python中的最小生成树聚类

python中的最小生成树聚类,python,cluster-analysis,minimum-spanning-tree,Python,Cluster Analysis,Minimum Spanning Tree,我有一个数组(X),包含10个用户的分数值和他们的分数。我使用最小生成树聚类(MST)根据用户的值对其进行聚类。 MST没有对数据进行群集,而是返回0个群集 以下代码: import warnings import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn_extra.cluster import KMedoids from tabulate

我有一个数组(X),包含10个用户的分数值和他们的分数。我使用最小生成树聚类(MST)根据用户的值对其进行聚类。 MST没有对数据进行群集,而是返回0个群集

以下代码:

import warnings
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn_extra.cluster import KMedoids
from tabulate import tabulate
from termcolor import colored, cprint 
from prettytable import PrettyTable
from mst_clustering import MSTClustering
%matplotlib inline
warnings.filterwarnings('ignore')

X = np.array([0.85142858,0.85566274,0.85364912,0.81536489,0.84929932,0.85042336,0.84899714,
         0.82019115, 0.86112067,0.8312496 ])
X=X.reshape(-1, 1)

MST = MSTClustering(cutoff_scale=2, approximate=False)
labels = MST.fit_predict(X)

dfMST= pd.DataFrame(zip(labels,X))
dfMST = dfMST.rename({0: 'cluster', 1: 'values'}, axis=1)
dfMST['user'] = dfMST.index
dfMST = dfMST[['cluster', 'user',  'values']]
print ('clustering the data using MST')
print(tabulate(dfMST, headers='keys', tablefmt='psql')) 
产生的结果如下:

clustering the data using MST
+----+-----------+--------+----------+
|    |   cluster |   user |   values |
|----+-----------+--------+----------|
|  0 |         0 |      0 | 0.851429 |
|  1 |         0 |      1 | 0.855663 |
|  2 |         0 |      2 | 0.853649 |
|  3 |         0 |      3 | 0.815365 |
|  4 |         0 |      4 | 0.849299 |
|  5 |         0 |      5 | 0.850423 |
|  6 |         0 |      6 | 0.848997 |
|  7 |         0 |      7 | 0.820191 |
|  8 |         0 |      8 | 0.861121 |
|  9 |         0 |      9 | 0.83125  |
+----+-----------+--------+----------+
如何通过MST以正确的方式对用户进行集群?
我应该指定其他截止尺度参数吗?
MSTClustering
使用递归相交的两个接近图生成一个聚类解决方案,该聚类解决方案具有自动
k
确定

另一方面,
KMedoids
最小化标记为在簇中的点与指定为簇中心的点之间的距离,其中手动指定要形成的簇的数量以及要生成的medoid的数量

因此,您不应该期望得到相同数量的簇(即,两种方法的解决方案相同),在第一种情况下,您手动将簇的数量指定为5,因此,您得到了5个簇,在第二种情况下,您让算法找到了最佳簇数,发现所有用户都属于同一个集群(尤其是数据集非常小的集群)。因此,你得到的是一个非常有效的结果


如果你真的相信(并且有证据)用户应该被划分为5个集群,那么直觉上,你应该使用第一个算法
KMedoids

谢谢你的回答,我想使用MST集群生成一个具有自动k确定的集群解决方案。一个数组(X)只是一个例子,我有两个不同的大数据集,首先我发现这些数据集的最佳聚类数是肘部和轮廓索引方法的5个,但当应用MST聚类时,我得到了零个聚类!!!!对于这两个数据集!!!!因此,我没有集群!!!!!!!!!