聚类分析:以负轮廓宽度校正观测值

时间:2018-07-17 11:07:00

标签: cluster-analysis k-means silhouette

我正在尝试在数据集中(〜1000个序列)中找到模式,该模式包含具有每年频率的时间序列数据。一些样本数据:

         V1     V2     V3     V4     V5     V6     V7     V8     V9    V10    V11    V12    V13    V14    V15    V16    V17    V18
1 1.0000 0.6154 0.0000 0.0769 0.0000 0.0000 0.0000 0.2308 0.6923 0.6923 0.6923 0.6923 0.6923 0.3846 0.3846 0.0769 0.0769 0.0769
2 1.0000 0.8354 0.5274 0.4451 0.4604 0.4634 0.4543 0.2195 0.0976 0.1159 0.0793 0.0000 0.0152 0.0305 0.0305 0.0335 0.0915 0.0152
3 0.9524 0.8571 0.2381 0.1429 0.6667 1.0000 1.0000 0.1905 0.4286 0.3810 0.3810 0.5714 0.0952 0.1905 0.0000 0.0000 0.0952 0.8571
4 0.9200 1.0000 0.6000 0.4000 0.0000 0.4200 0.3600 0.4400 0.4200 0.3200 0.4800 0.6400 0.5200 0.5200 0.5200 0.5400 0.4800 0.7800
5 0.8372 1.0000 0.7209 0.7907 0.6279 0.6047 0.6047 0.6279 0.5349 0.4419 0.4419 0.2791 0.4419 0.2326 0.1860 0.1860 0.1860 0.0000
6 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.6154 0.6154 0.6154 0.6154 1.0000

请注意,数据已标准化,因为我想基于相似形状对时间序列进行聚类。我认为聚类分析将是一个适当的分析,并且我尝试使用以下函数对时间序列进行聚类:

  

a <-factoextra :: eclust(Normalized_df,FUNcluster =“ kmeans”,nstart = 25,k.max = 5)

但是,我有几个观测结果的silouhette宽度为负。有没有办法纠正这些作业?例如,如果值sil_width为负,则将观察值放置在邻居群集中。可以在下面找到一个例子。

cluster neighbor    sil_width
    1       1        3 -0.001258464
    2       1        3 -0.004661913
    3       1        4 -0.010083277
    4       1        4 -0.012569472
    5       1        3 -0.012793575
    6       1        4 -0.013089868
    7       1        5 -0.013346165

动机是对这些观察进行校正,以增加聚类的平均轮廓宽度。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

将轮廓负向的点移动到另一个群集中可能会减少该群集中其他点的轮廓。 如何进一步改善结果还不是很明显,a)最佳解决方案可能包含负的Silhouette值,b)不可能找到仅具有正值的解决方案价值观。最后但并非最不重要的一点,c)它不再是k均值聚类的结果-一些点将不再分配给最接近的均值。

核心原因是每个聚类中的得分是一致的。将一个点移动到另一个群集会更改其所有分数。