Cara paling logis untuk mengubah jam adalah menjadi dua variabel yang berayun bolak-balik. Bayangkan posisi ujung jarum jam dari 24 jam. The x
ayunan posisi bolak-balik dari wastafel dengan y
posisi. Untuk jam 24-jam Anda dapat melakukannya dengan x=sin(2pi*hour/24)
, y=cos(2pi*hour/24)
.
Anda perlu kedua variabel atau gerakan yang tepat melalui waktu hilang. Hal ini disebabkan oleh fakta bahwa turunan dari dosa atau cos berubah dalam waktu ketika (x,y)
posisi bervariasi dengan lancar saat bergerak di sekitar satuan lingkaran.
Akhirnya, pertimbangkan apakah perlu menambahkan fitur ketiga untuk melacak waktu linier, yang dapat dibangun jam saya (atau menit atau detik) dari awal catatan pertama atau cap waktu Unix atau sesuatu yang serupa. Ketiga fitur ini kemudian memberikan proksi untuk progresif siklus dan linear waktu, mis. Anda dapat menarik fenomena siklus seperti siklus tidur dalam pergerakan manusia dan juga pertumbuhan linear seperti populasi vs waktu.
Semoga ini membantu!
Menambahkan beberapa kode contoh yang relevan yang saya hasilkan untuk jawaban lain:
Contoh jika dilakukan:
# 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
Sekarang mari kita coba:
kmeansshow(6,df[['x', 'y']].values)
Anda hanya bisa melihat bahwa ada beberapa setelah tengah malam yang termasuk dalam kluster hijau sebelum tengah malam. Sekarang mari kita kurangi jumlah cluster dan tunjukkan bahwa sebelum dan sesudah tengah malam dapat dihubungkan dalam satu cluster secara lebih detail:
kmeansshow(3,df[['x', 'y']].values)
Lihat bagaimana gugus biru berisi waktu dari sebelum dan sesudah tengah malam yang dikelompokkan bersama di dalam kluster yang sama ...
QED!