पृष्ठभूमि:
घंटे को बदलने का सबसे तार्किक तरीका दो चर में है जो सिंक से आगे और पीछे स्विंग करता है। 24-घंटे की घड़ी के घंटे के हाथ के अंत की स्थिति की कल्पना करें। x
स्थिति झूलों के साथ आगे और पीछे सिंक्रनाइज़ेशन से बाहर y
स्थिति। एक 24 घंटे की घड़ी के लिए आप के साथ ऐसा कर सकते हैं x=sin(2pi*hour/24)
, y=cos(2pi*hour/24)
।
समय के माध्यम से आपको चर या उचित आंदोलन की आवश्यकता होती है। यह इस तथ्य के कारण है कि पाप या व्युत्पन्न के व्युत्पन्न समय में बदल जाते हैं जबकि (x,y)
स्थिति सुचारू रूप से बदलती है क्योंकि यह यूनिट सर्कल के चारों ओर घूमती है।
अंत में, विचार करें कि क्या रैखिक समय का पता लगाने के लिए एक तीसरी विशेषता जोड़ना उचित है, जिसे पहले रिकॉर्ड या यूनिक्स समय की मुहर या कुछ इसी तरह की शुरुआत से घंटों (या मिनट या सेकंड) के रूप में निर्मित किया जा सकता है। ये तीन विशेषताएं तब समय की चक्रीय और रैखिक प्रगति दोनों के लिए परदे के पीछे प्रदान करती हैं जैसे आप लोगों के आंदोलन में नींद चक्र जैसे चक्रीय घटना को भी बाहर निकाल सकते हैं और जनसंख्या बनाम समय की तरह रैखिक विकास भी कर सकते हैं।
यदि पूरा किया जा रहा है, तो इसका उदाहरण:
# 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)
यह देखें कि नीले क्लस्टर में मध्यरात्रि से पहले और बाद में एक ही क्लस्टर में एक साथ क्लस्टर किए गए समय कैसे होते हैं ...
आप इसे समय, या सप्ताह के दिन, या सप्ताह के महीने, या महीने के दिन, या मौसम, या कुछ भी कर सकते हैं।