k均值聚类后的时间序列求和

时间:2020-07-03 07:08:00

标签: python dataframe time-series k-means

我正在尝试对具有时间序列数据的集合进行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)

`

1 个答案:

答案 0 :(得分:0)

您可以访问每个群集的数据点,然后对其求和。 像这样:

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吗?