시간을 변환하는 가장 논리적 인 방법은 싱크대에서 앞뒤로 움직이는 두 가지 변수입니다. 24시 시계의 시침 끝 위치를 상상해보십시오. x
위치 스윙은 함께 갔다 싱크에서 백업 y
위치. 24 시간 시계를 들어 당신이 이것을 달성 할 수있다 x=sin(2pi*hour/24)
, y=cos(2pi*hour/24)
.
두 변수가 모두 필요하거나 시간을 통한 적절한 이동이 손실됩니다. 이는 (x,y)
원 또는 원 주위를 이동함에 따라 위치가 매끄럽게 변할 때 sin 또는 cos의 파생어가 시간에 따라 변하기 때문입니다.
마지막으로, 선형 레코드를 추적하는 세 번째 기능을 추가 할 가치가 있는지 고려하십시오. 첫 번째 레코드의 시작 또는 유닉스 타임 스탬프 또는 이와 유사한 것으로 시작하여 몇 시간 또는 몇 분 또는 몇 초를 구성 할 수 있습니다. 이 세 가지 기능은 주기적 및 선형 시간 진행 모두에 대한 프록시를 제공합니다. 예를 들어 사람들의 운동에서 수면주기와 같은 순환 현상을 제거하고 인구 대 시간과 같은 선형 성장을 이끌어 낼 수 있습니다.
이것이 도움이되기를 바랍니다!
다른 답변을 위해 생성 한 관련 예제 코드 추가 :
달성중인 경우의 예 :
# 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!