我试图放入相同的数据来进行缺口统计,并希望获得最佳的聚类数。为了检查结果的真实性,我尝试使用不同的程序R
和Matlab
进行相同的测试。但是,R
和Matlab
中的结果彼此不同。 R
中的最佳簇数为40,但是Matlab
中的最佳簇数为6。我试图检查每个参数,并对其进行调整以使所有参数相同,但仍然得到不同的结果。 / p>
还有一些我错过的细节吗?还是因为不同程序的结果不同? 很久以来我一直对此问题感到困扰。如果您能帮助我,我将非常感谢您。
这是输入数据gaptest
,聚类方法是pam
X1 X2
1 0.6351928 -0.7824029
2 0.6401326 -0.7919060
3 0.6427007 -0.7968948
4 0.6558318 -0.8229245
5 0.6566169 -0.8245088
6 0.6680986 -0.8480393
7 0.6782454 -0.8693981
8 0.6796789 -0.8724580
9 0.7115760 -0.9431477
10 0.7133614 -0.9472431
11 0.7296727 -0.9852485
12 0.8195850 -1.2030732
13 0.8470816 -1.2677628
14 0.8491237 -1.2724711
15 0.9787868 -1.5406940
16 1.0200572 -1.6149679
17 1.0680393 -1.6964657
18 1.0776983 -1.7123423
19 1.0944731 -1.7395482
20 1.0968986 -1.7434456
21 1.1069733 -1.7595397
22 1.1134140 -1.7697527
23 1.1464978 -1.8213617
24 1.2733486 -2.0097707
25 1.3603164 -2.1343635
26 1.5108690 -2.3507509
27 1.7984058 -2.8258020
28 1.8317105 -2.8951666
29 1.9689162 -3.3205491
30 1.9830438 -3.6912299
31 1.8931125 -4.0746001
32 7.0844451 -12.5712374
33 7.0636832 -12.5987628
34 6.9238601 -12.7901880
35 6.8664584 -12.8743234
36 6.8151738 -12.9560336
37 7.1884836 -12.8093261
38 7.4338566 -12.6135888
39 7.6658285 -8.5133002
40 7.6070872 -8.4042949
41 7.6053719 -8.4004027
42 8.3855195 -8.0055749
43 8.5990981 -8.0174662
44 10.3757387 -8.3280635
45 10.4124935 -8.3389941
46 10.4836669 -8.3608685
47 10.8223695 -8.4792392
48 10.9421194 -8.5275618
matlab
中的代码
myfunc=@(x,k) kmedoids(x,k,'Algorithm','pam','Start','sample');
gap1=evalclusters(gaptest,myfunc,'gap','KList',[1:length(gaptest)],'B',200,'SearchMethod','firstMaxSE','ReferenceDistribution','PCA');
在Matlab
中绘制结果
enter image description here
R
中的代码
clusGap(gaptest,pam,K.max=47,B=200,verbose=TRUE)
产生R
clusGap(x = gaptest, FUNcluster = pam, K.max = 47, B = 200, verbose = TRUE)
B=200 simulated reference sets, k = 1..47; spaceH0="scaledPCA"
--> Number of clusters (method 'firstSEmax', SE.factor=1): 40
在R
中绘制结果
enter image description here
我尝试更改Matlab
中的聚类方法,并且最佳数仍为6。R
和Matlab
中的结果图看起来非常相似。但是最佳簇数仍然不同。
答案 0 :(得分:1)
我认为这是因为 MATLAB 中的 'firstMaxSE' 和 R 中的 'firstSEmax' 以不同的方式搜索最佳 k。
来自文档(https://uk.mathworks.com/help/stats/evalclusters.html#shared-criterion 和 https://www.rdocumentation.org/packages/cluster/versions/2.1.0/topics/clusGap)
'firstMaxSE' 在 MATLAB 中搜索第一个 k,使得 Gap(k)≥Gap(k+1)−SE(k+1) 得到满足。看看你的第一个情节,这似乎在 k=6 时满足。在 R 中,等效选项是“Tibs2001SEmax”而不是“firstSEmax”。
R中的“firstSEmax”搜索不小于第一个局部最大值减去相应SE因子的第一个值的位置。第一个局部最大值出现在 k 范围内远晚于 6,因此“firstSEmax”返回 40 作为最佳聚类数。
这些选项的名称可能有点令人困惑,因为它们听起来几乎相同但指代的事物不同。如果您尝试在 R 中使用“Tibs2001SEmax”,我认为您的结果可能与 MATLAB 的输出一致。