如何用KShape对时间序列聚类并利用肘方法可视化确定最佳k值?

2026-04-02 02:141阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计894个文字,预计阅读时间需要4分钟。

如何用KShape对时间序列聚类并利用肘方法可视化确定最佳k值?

时序数据聚类的算法流程,按照以下步骤执行:

1. 数据预处理:对时序数据进行清洗和规范化处理,确保数据质量。

2.特征提取:根据具体应用需求,从时序数据中提取有意义的特征。

3.距离度量:使用基于相互相关性的距离度量(如SBD,基于形状的距离),计算相邻时序数据的相似度。

4.聚类:根据距离度量结果,将相似度高的时序数据聚为一类。

5.评估与优化:评估聚类结果的有效性,必要时对参数进行调整和优化。

点击文末阅读原文获取完整代码和数据。

时序数据的聚类方法,该算法按照以下流程执行。(点击文末“阅读原文”获取完整代码数据)。

  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'))

# 从文件中加载数据帧并将其存储在一个列表中。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()


01

02

如何用KShape对时间序列聚类并利用肘方法可视化确定最佳k值?

03

04

用肘法计算簇数

什么是肘法...

  • 计算从每个点到簇中心的距离的平方和,指定为簇内误差平方和 (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')




本文共计894个文字,预计阅读时间需要4分钟。

如何用KShape对时间序列聚类并利用肘方法可视化确定最佳k值?

时序数据聚类的算法流程,按照以下步骤执行:

1. 数据预处理:对时序数据进行清洗和规范化处理,确保数据质量。

2.特征提取:根据具体应用需求,从时序数据中提取有意义的特征。

3.距离度量:使用基于相互相关性的距离度量(如SBD,基于形状的距离),计算相邻时序数据的相似度。

4.聚类:根据距离度量结果,将相似度高的时序数据聚为一类。

5.评估与优化:评估聚类结果的有效性,必要时对参数进行调整和优化。

点击文末阅读原文获取完整代码和数据。

时序数据的聚类方法,该算法按照以下流程执行。(点击文末“阅读原文”获取完整代码数据)。

  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'))

# 从文件中加载数据帧并将其存储在一个列表中。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()


01

02

如何用KShape对时间序列聚类并利用肘方法可视化确定最佳k值?

03

04

用肘法计算簇数

什么是肘法...

  • 计算从每个点到簇中心的距离的平方和,指定为簇内误差平方和 (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')