Python用KShape对时间序列进行聚类和肘方法确定最优聚类数k可视化

时序数据的聚类方法

由Kaizong Ye,Liao Bao撰写

去年,我们为一位客户进行了短暂的咨询工作,他正在构建一个主要基于KShape的分析应用程序。该算法按照以下流程执行。

  1. 使用基于互相关测量的距离标度(基于形状的距离:SBD)
  2. 根据 1 计算时间序列聚类的质心。(一种新的基于质心的聚类算法,可保留时间序列的形状)
  3. 划分成每个簇的方法和一般的kmeans一样,但是在计算距离尺度和重心的时候使用上面的1和2。
import pandas as pd

    # 读取数据帧,将其转化为时间序列数组,并将其存储在一个列表中

    tata = \[\]

    for i, df in enmee(dfs):

        

        # 检查每个时间序列数据的最大长度。

        for ts in tsda:

            if len(s) > ln_a:

                lenmx = len(ts)

        

        # 给出最后一个数据,以调整时间序列数据的长度

        for i, ts in enumerate(tsdata):

            dta\[i\] = ts + \[ts\[-1\]\] * n_dd

    





    # 转换为矢量

    stack_list = \[\]

    for j in range(len(timeseries_dataset)):

       

        stack_list.append(data)

    

    # 转换为一维数组

    trasfome\_daa = np.stack(ack\_ist, axis=0)

    return trafoed_data

数据集准备

# 文件列表

flnes= soted(go.ob('mpldat/smeda*.csv'))

视频

KMEANS均值聚类和层次聚类:R语言分析生活幸福质量系数可视化实例

探索见解

去bilibili观看

探索更多视频

# 从文件中加载数据帧并将其存储在一个列表中。

for ienme in fiemes:

    df = pd.read\_csv(filnme, indx\_cl=one,hadr=0)

    flt.append(df)

聚类结果的可视化

# 为了计算交叉关系,需要对它们进行归一化处理。

# TimeSeriesScalerMeanVariance将是对数据进行规范化的类。

sac\_da = TimeeiesalerMVarne(mu=0.0, std=1.0).fit\_trnform(tranfome_data)



# KShape类的实例化。

ks = KShpe(\_clusrs=2, n\_nit=10, vrboe=True, rano_stte=sed)

yprd = ks.ft\_reitsak\_ata)

# 聚类和可视化



plt.tight_layout()

plt.show()

R语言k-Shape时间序列聚类方法对股票价格时间序列聚类

阅读文章


用肘法计算簇数

  • 什么是肘法…
  • 计算从每个点到簇中心的距离的平方和,指定为簇内误差平方和 (SSE)。
  • 它是一种更改簇数,绘制每个 SSE 值,并将像“肘”一样弯曲的点设置为最佳簇数的方法。


随时关注您喜欢的主题


#计算到1~10个群组 

for i  in range(1,11):

    #进行聚类计算。

    ks.fit(sacdta)

    #KS.fit给出KS.inrta_

    disorons.append(ks.netia_)



plt.plot(range(1,11), disorins, marker='o')

可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds