Cách hợp lý nhất để chuyển đổi giờ là hai biến xoay qua lại khỏi bồn rửa. Hãy tưởng tượng vị trí của kim giờ của đồng hồ 24 giờ. Vị x
trí dao động qua lại ra khỏi bồn rửa với y
vị trí. Đối với một đồng hồ 24 giờ bạn có thể thực hiện điều này với x=sin(2pi*hour/24)
, y=cos(2pi*hour/24)
.
Bạn cần cả hai biến hoặc chuyển động thích hợp qua thời gian bị mất. Điều này là do thực tế là đạo hàm của sin hoặc cos thay đổi theo thời gian khi (x,y)
vị trí thay đổi trơn tru khi nó di chuyển xung quanh vòng tròn đơn vị.
Cuối cùng, hãy xem xét liệu có đáng để thêm tính năng thứ ba để theo dõi thời gian tuyến tính hay không, có thể được xây dựng theo giờ của tôi (hoặc phút hoặc giây) từ khi bắt đầu bản ghi đầu tiên hoặc dấu thời gian Unix hoặc một cái gì đó tương tự. Ba tính năng này sau đó cung cấp các proxy cho cả sự tiến triển theo chu kỳ và tuyến tính của thời gian, ví dụ: bạn có thể kéo theo hiện tượng tuần hoàn như chu kỳ giấc ngủ trong chuyển động của mọi người và cả sự tăng trưởng tuyến tính như dân số theo thời gian.
Hi vọng điêu nay co ich!
Thêm một số mã ví dụ có liên quan mà tôi đã tạo cho câu trả lời khác:
Ví dụ về nếu được hoàn thành:
# Enable inline plotting
%matplotlib inline
#Import everything I need...
import numpy as np
import matplotlib as mp
import matplotlib.pyplot as plt
import pandas as pd
# Grab some random times from here: https://www.random.org/clock-times/
# put them into a csv.
from pandas import DataFrame, read_csv
df = read_csv('/Users/angus/Machine_Learning/ipython_notebooks/times.csv',delimiter=':')
df['hourfloat']=df.hour+df.minute/60.0
df['x']=np.sin(2.*np.pi*df.hourfloat/24.)
df['y']=np.cos(2.*np.pi*df.hourfloat/24.)
df
def kmeansshow(k,X):
from sklearn import cluster
from matplotlib import pyplot
import numpy as np
kmeans = cluster.KMeans(n_clusters=k)
kmeans.fit(X)
labels = kmeans.labels_
centroids = kmeans.cluster_centers_
#print centroids
for i in range(k):
# select only data observations with cluster label == i
ds = X[np.where(labels==i)]
# plot the data observations
pyplot.plot(ds[:,0],ds[:,1],'o')
# plot the centroids
lines = pyplot.plot(centroids[i,0],centroids[i,1],'kx')
# make the centroid x's bigger
pyplot.setp(lines,ms=15.0)
pyplot.setp(lines,mew=2.0)
pyplot.show()
return centroids
Bây giờ hãy thử xem:
kmeansshow(6,df[['x', 'y']].values)
Bạn chỉ có thể thấy rằng có một số sau nửa đêm bao gồm các cụm màu xanh lá cây trước nửa đêm. Bây giờ, hãy giảm số cụm và chỉ ra rằng trước và sau nửa đêm có thể được kết nối trong một cụm chi tiết hơn:
kmeansshow(3,df[['x', 'y']].values)
Xem cách cụm màu xanh chứa thời gian từ trước và sau nửa đêm được nhóm lại với nhau trong cùng một cụm ...
QED!