k-均值聚类后总结时间序列
Summing time series after k-means clustering
我正在使用时间序列数据的集合上的 K 均值聚类中尝试 K 的不同变体。
对于每个实验,我想总结每个集群标签的时间序列并对它们进行预测。
例如:
如果我将时间序列分为 3 个集群,我想对属于集群 1 的所有时间序列(按列)和属于集群 2 的所有时间序列求和,对集群 3 也是如此。之后我将对每个聚合的时间序列集群,但我不需要预测部分的帮助。
我正在考虑将集群标签添加到原始数据帧,然后使用 .loc 和循环来提取与相同集群对应的时间序列。但是我想知道是否有更有效的方法?
import pandas as pd
from datetime import datetime
import numpy as np
from sklearn.cluster import KMeans
#create dataframe with time series
date_rng = pd.date_range(start='1/1/2018', end='1/08/2018', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
for i in range(20):1
df['ts' + str(i)] = np.random.randint(0,100,size=(len(date_rng)))
df_pivot = df.pivot_table(columns = 'date', values = df.columns)
#cluster
K = range(1,10,2)
for k in K:
km = KMeans(n_clusters=k)
km = km.fit(df_pivot)
print(km.labels_)
#sum/aggregate all ts in each cluster column-wise
#forecast next step for each cluster(dont need help with this part)
`
您可以访问每个集群的数据点,然后对它们的值求和。
像这样:
labels = km.labels_
centroids = km.cluster_centers_
cluster_sums_dict = {} # cluster number: sum of elements
for i in range(k):
# select
temp_cluster = df_pivot[np.where(labels==i)]
cluster_sums_dict[i] = temp_cluster['ts'].sum()
另请注意,您可以使用每个聚类的质心进行预测而不是聚合 cluster_values 吗?
我正在使用时间序列数据的集合上的 K 均值聚类中尝试 K 的不同变体。 对于每个实验,我想总结每个集群标签的时间序列并对它们进行预测。
例如: 如果我将时间序列分为 3 个集群,我想对属于集群 1 的所有时间序列(按列)和属于集群 2 的所有时间序列求和,对集群 3 也是如此。之后我将对每个聚合的时间序列集群,但我不需要预测部分的帮助。
我正在考虑将集群标签添加到原始数据帧,然后使用 .loc 和循环来提取与相同集群对应的时间序列。但是我想知道是否有更有效的方法?
import pandas as pd
from datetime import datetime
import numpy as np
from sklearn.cluster import KMeans
#create dataframe with time series
date_rng = pd.date_range(start='1/1/2018', end='1/08/2018', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
for i in range(20):1
df['ts' + str(i)] = np.random.randint(0,100,size=(len(date_rng)))
df_pivot = df.pivot_table(columns = 'date', values = df.columns)
#cluster
K = range(1,10,2)
for k in K:
km = KMeans(n_clusters=k)
km = km.fit(df_pivot)
print(km.labels_)
#sum/aggregate all ts in each cluster column-wise
#forecast next step for each cluster(dont need help with this part)
`
您可以访问每个集群的数据点,然后对它们的值求和。 像这样:
labels = km.labels_
centroids = km.cluster_centers_
cluster_sums_dict = {} # cluster number: sum of elements
for i in range(k):
# select
temp_cluster = df_pivot[np.where(labels==i)]
cluster_sums_dict[i] = temp_cluster['ts'].sum()
另请注意,您可以使用每个聚类的质心进行预测而不是聚合 cluster_values 吗?