Saati dönüştürmenin en mantıklı yolu, lavabonun içinde ileri geri sallanan iki değişkendir. 24 saatlik bir saatin saat elinin sonunun konumunu hayal edin. x
Konum hali ile ileri ve lavabo üzerinden 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 kaybedilir. Bunun nedeni ya günahın ya da cos'un türevinin, (x,y)
pozisyonun birim çember etrafında hareket ederken yumuşak bir şekilde değiştiği zaman içerisinde değişmesidir.
Son olarak, ilk zamanın başlangıcından itibaren saat (veya dakika veya saniye) veya bir Unix zaman damgası veya benzeri bir şey oluşturulabilen lineer 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'ler sağlar; örneğin, insanların hareketlerinde uyku döngüleri gibi döngüsel fenomenleri ve ayrıca zamana göre popülasyona benzer lineer büyümeyi çıkarabilirsiniz.
Bu yardımcı olur umarım!
Başka bir cevap için oluşturduğum ilgili bazı örnek kodları ekleyin:
Gerçekleştirilip gerçekleştirilmediği
# 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)
Sadece gece yarısından önce yeşil kümenin dahil olduğu gece yarısından sonra olanların olduğunu ancak zar zor görebilirsiniz. Şimdi küme sayısını azaltalım ve gece yarısından önce ve sonra tek bir kümeye daha ayrıntılı bir şekilde 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 ...
QED!