前言

KMedoids的聚类有时比KMeans的聚类效果要好。手上正好有一批时序数据,今天用KMedoids试下聚类效果

安装

KMedoids可以使用sklearn的拓展聚类模块scikit-learn-extra,模块需要保证

  • Python (>=3.6)

  • scikit-learn(>=0.22)

安装 scikit-learn-extra

PyPi: pip install scikit-learn-extra
Conda: conda install -c conda-forge scikit-learn-extra
Git: pip install https://github.com/scikit-learn-contrib/scikit-learn-extra/archive/master.zip

安装 tslearn

PyPi: python -m pip install tslearn
Conda: conda install -c conda-forge tslearn
Git: python -m pip install https://github.com/tslearn-team/tslearn/archive/master.zip

为什么要使用scikit-learn-extra和tslearn两个模块?因为sklearn里面没有自带的KMedoids,也没有类似DTW的时序度量算法,但组合两者恰好能解决问题

测试

import numpy as np
from sklearn_extra.cluster import KMedoids
import tslearn.metrics as metrics
# 自定义数据处理
import data_process
from tslearn.clustering import silhouette_score
from tslearn.preprocessing import TimeSeriesScalerMeanVariance
from tslearn.generators import random_walks
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt# shape(X) = (100,2800+)
X = np.loadtxt("top100.txt",dtype=np.float,delimiter=",")
# 降成30维
X = data_process.downsample(X,30)
seed = 0# elbow法则找最佳聚类数,结果:elbow = 5
def test_elbow():global X,seeddistortions = []dists = metrics.cdist_dtw(X) # dba + dtw# dists = metrics.cdist_soft_dtw_normalized(X,gamma=.5) # softdtwfor i in  range ( 2 , 15 ):km = KMedoids(n_clusters=i,random_state=seed,metric="precomputed")km.fit(dists)#记录误差和distortions.append(km.inertia_)plt.plot(range ( 2 , 15 ), distortions, marker= 'o' )plt.xlabel( 'Number of clusters' )plt.ylabel( 'Distortion' )plt.show()def test_kmedoids():num_cluster = 5# 声明precomputed自定义相似度计算方法km = KMedoids(n_clusters= num_cluster, random_state=0,metric="precomputed")# 采用tslearn中的DTW系列及变种算法计算相似度,生成距离矩阵distsdists = metrics.cdist_dtw(X) # dba + dtw# dists = metrics.cdist_soft_dtw_normalized(X,gamma=0.5) # softdtwy_pred = km.fit_predict(dists)np.fill_diagonal(dists,0)score = silhouette_score(dists,y_pred,metric="precomputed")print(X.shape)print(y_pred.shape)print("silhouette_score: " + str(score))for yi in range(num_cluster):plt.subplot(3, 2, yi + 1)for xx in X[y_pred == yi]:plt.plot(xx.ravel(), "k-", alpha=.3)# 注意这里的_cluster_centers要写成X[km.medoid_indices_[yi]],因为你是precomputed,源码里面当precomputed时_cluster_centers等于Noneplt.plot(X[km.medoid_indices_[yi]], "r-")plt.text(0.55, 0.85,'Cluster %d' % (yi + 1),transform=plt.gca().transAxes)if yi == 1:plt.title("KMedoids" + " + DBA-DTW")plt.tight_layout()plt.show()#test_elbow()
test_kmedoids()

采用KMedoids + DBA-DTW聚类效果  # 轮廓系数silhouette_score: 0.5465097470777784

采用KMedoids + SoftDTW聚类效果   # 轮廓系数silhouette_score: 0.6528261125440392

直接采用欧氏距离的聚类效果    # 轮廓系数silhouette_score: 0.5209641775604567

相比采用KMeans,KMedoids在的聚类中心(红线部分)从视觉上要似乎要更好(KMeans+DTW聚类效果可见该文章最后一节),但轮廓系数却不如KMeans。但仅欧氏距离而言,KMedoids的轮廓系数要比KMeans更好那么一点

【时间序列聚类】KMedoids聚类+DTW算法相关推荐

  1. R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归

    通过对用电负荷进行聚类,我们可以提取典型负荷曲线,提高随后的用电量预测的准确性. 我将向您展示第一个用例,即通过K-medoids聚类方法提取典型的电力负载曲线. 我们必须以某种方式降低维度.最好的方 ...

  2. 最大最小距离算法(K-MEANS K-medoids )聚类算法的结合运用

    聚类算法通常会得到一种分类,将n个点聚合成k类,同一聚类(即插槽簇)中的对象相似度较高:而不同类中的对象相似度较小. 聚类算法的基本流程如下: (1)从n个节点中选择 k 个节点作为初始聚类中心.(2 ...

  3. R语言聚类算法之k中心聚类(K-medoids)

    1.原理解析: 针对K-均值算法易受极值影响这一缺点的改进算法.在原理上的差异在于选择个类别中心点时不取样本均值点,而在类别内选取到其余样本距离之和最小的样本为中心. 2.在R语言中的应用 k中心聚类 ...

  4. java 最大最小聚类,最大最小距离算法(K-MEANS K-medoids )聚类算法的结合运用

    聚类算法通常会得到一种分类,将n个点聚合成k类,同一聚类(即插槽簇)中的对象相似度较高:而不同类中的对象相似度较小. 聚类算法的基本流程如下: (1)从n个节点中选择 k 个节点作为初始聚类中心.(2 ...

  5. 论文学习——基于优化DTW算法的水文要素时间序列数据相似性分析

    文章目录 1 摘要 2 结论 3 引言 4 水文时间序列数据相似性度量的相关研究 4.0 前人工作 4.1 提出问题 4.2 DTW动态时间弯曲距离算法 5 基于DTW的水文要素时间序列数据相似性度量 ...

  6. 聚类基本概念及常见聚类算法和EM算法

    1. 基本概念 1.1 定义 聚类:发现数据中分组聚集的结构,根据数据中样本与样本之间的距离或相似度,依据类内样本距离小(相似度大).类间样本距离大(相似度小)将样本划分为若干组/类/簇. 基于划分的 ...

  7. 密度聚类、密度聚类过程、OPTICS算法

    密度聚类.密度聚类过程.OPTICS算法 目录 密度聚类.密度聚类过程.OPTICS算法 密度聚类 密度聚类过程 OPTICS算法

  8. 聚类算法(2):系统聚类/层次聚类算法

    层次聚类:自下而上法(bottom-up)和自上而下法(top-down) 聚类算法(4)--Hierarchical clustering层次聚类 系统聚类:相当于自下而上法,也就是层次聚类 目录 ...

  9. 聚类方法:DBSCAN算法研究

    DBSCAN聚类算法三部分: 1.        DBSCAN原理.流程.参数设置.优缺点以及算法: http://blog.csdn.net/zhouxianen1987/article/detai ...

  10. 机器学习之聚类算法:K均值聚类(一、算法原理)

    目录 一.Kmeans 二.Kmeans的流程 三.距离度量方式 3.1.闵可夫斯基距离 3.2.马哈拉诺比斯距离 3.3.其他 四.Kmeans聚类实例 五.Kmeans存在的问题 5.1.初始点的 ...

最新文章

  1. 【linux开发】IO端口和IO内存的区别及分别使用的函数接口
  2. davinci项目服务器无法,集成就能降成本!GS集成DaVinci Resolve项目服务器
  3. ajax代码 java,AJAX - java代码库 - 云代码
  4. 故乡的路:十位少数民族摄影师联展
  5. 小程序tab切换效果
  6. html标签的pre语义,HTML pre 标签
  7. WPF 媒体播放器(MediaElement)使用实例(转)
  8. Ping++ 支付接口对接
  9. R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)
  10. CSS:结合clip-path实现目录的隐藏显示以及提示框的隐藏显示
  11. 阿铭Linux_网站维护学习笔记20190305
  12. 转载——傅里叶变换概念及公式推导
  13. Python 功能函数round解析
  14. maven-repository文件
  15. Android 白天黑夜模式切换换肤
  16. 29岁华为员工工资曝光,揭露残酷真相:职场下半场,拼的就是这项能力!
  17. Apple App store的应用购买限制 - 年龄
  18. 【Linux】ps -ef 和ps aux 有什么不同呢?
  19. linux命令配置网卡IP (全)
  20. KEIL仿真 logic analyzer

热门文章

  1. 在线支付线上支付是什么?其应用范围
  2. 智能食谱管理系统3.02
  3. BIOS设置nbsp;翻译中文图文教程(一)
  4. word中的破折号中间有空格?
  5. android 代码审核 同质化,李相国:Android同质化竞争以差异制胜
  6. Presto 在 Pinterest 的实践
  7. 输出所有水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
  8. python与机器学习
  9. HTML5期末大作业:动漫网站设计——灌篮高手(4页)HTML+CSS 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码...
  10. 12种纸飞机的折法 - T爸写给小T的书