배경:
시간을 변환하는 가장 논리적 인 방법은 동기화되지 않은 두 가지 변수로 변환하는 것입니다. 24시 시계의 시침 끝 위치를 상상해보십시오. x
위치는 요동과 왕복 동기화 백업 y
위치. 24 시간 시계를 들어 당신이 이것을 달성 할 수있다 x=sin(2pi*hour/24)
, y=cos(2pi*hour/24)
.
두 변수가 모두 필요하거나 시간을 통한 적절한 이동이 손실됩니다. 이것은 sin 또는 cos의 미분이 시간에 (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)
파란색 클러스터에 자정 전후의 시간이 동일한 클러스터에 함께 클러스터 된 시간을 포함하는 방법을 확인하십시오.
시간, 요일, 매주, 달, 계절 또는 기타 모든 작업에 대해이 작업을 수행 할 수 있습니다.