Arka fon:
Saati dönüştürmenin en mantıklı yolu, senkronizasyondan ileri geri sallanan iki değişkendir. 24 saatlik saatin saat ibresinin sonunun pozisyonunu hayal edin. x
Konum hali ile ileri eşitlenmemiş geri y
pozisyonda. 24 saatlik saat biçimi için size bu başarabilirsiniz x=sin(2pi*hour/24)
, y=cos(2pi*hour/24)
.
Her iki değişkene de ihtiyacınız var veya zaman içinde doğru hareket kaybediliyor. Bunun nedeni, günah veya cos türevinin zaman içinde değişmesidir, oysa (x,y)
pozisyon birim çemberin etrafında dolaşırken sorunsuz bir şekilde değişir.
Son olarak, ilk kaydın başlangıcından itibaren saat (veya dakika veya saniye) veya bir Unix zaman damgası veya benzeri bir şey olarak oluşturulabilecek doğrusal zamanı izlemek için üçüncü bir özellik eklemenin faydalı olup olmadığını düşünün. Bu üç özellik daha sonra zamanın hem döngüsel hem de doğrusal ilerlemesi için proxy sağlar; örneğin insanların hareketindeki uyku döngüleri gibi döngüsel olayları ve ayrıca nüfus ve zaman gibi lineer büyümeyi ortaya çıkarabilirsiniz.
Başarılı olup olmadığına örnek:
# 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
Şimdi deneyelim:
kmeansshow(6,df[['x', 'y']].values)
Gece yarısından önce yeşil gece kümesine dahil olan gece yarısından sonra zamanlar olduğunu neredeyse hiç görebilirsiniz. Şimdi kümelerin sayısını azaltalım ve gece yarısından önce ve sonra tek bir kümeye daha ayrıntılı olarak bağlanabileceğini gösterelim:
kmeansshow(3,df[['x', 'y']].values)
Mavi kümenin gece yarısından önce ve sonra aynı kümede birlikte kümelenmiş zamanları nasıl içerdiğini görün ...
Bunu zaman, haftanın günü, ayın haftası, ayın günü ya da sezonu veya herhangi bir şey için yapabilirsiniz.