Найбільш логічний спосіб перетворити годину на дві змінні, які розгойдуються назад і назад з раковини. Уявіть положення кінця годинної руки цілодобового годинника. У x
гойдаються позиції вперед і назад з раковини з y
позицією. Для 24-годинний ви можете зробити це з x=sin(2pi*hour/24)
, y=cos(2pi*hour/24)
.
Вам потрібні обидві змінні, або правильний рух через час втрачено. Це пов'язано з тим, що похідна або sin, або cos змінюється в часі, коли (x,y)
положення плавно змінюється, коли воно об'їжджає одиничне коло.
Нарешті, подумайте, чи варто додати третю особливість для відстеження лінійного часу, яка може бути побудована моїми годинами (або хвилинами чи секундами) від початку першого запису, або часовою маркою Unix або чимось подібним. Ці три особливості надають проксі-сервіси як для циклічного, так і для лінійного прогресування часу, наприклад, ви можете вивести циклічне явище, як цикли сну в русі людей, а також лінійний приріст, як кількість населення проти часу.
Сподіваюся, це допомагає!
Додавання відповідного прикладу коду, який я створив для іншої відповіді:
Приклад виконання, якщо:
# 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
Тепер давайте спробуємо:
kmeansshow(6,df[['x', 'y']].values)
Ви ледве можете побачити, що є кілька після півночі, включені до зеленого скупчення до півночі. Тепер давайте зменшимо кількість кластерів і покажемо, що до і після півночі можна більш детально підключитись до одного кластеру:
kmeansshow(3,df[['x', 'y']].values)
Подивіться, як синій кластер містить часи, що передують до і після півночі, які об'єднані в один кластер ...
QED!