我试图放置相同的数据来进行差距统计,并希望获得最佳的集群数量。为了检验结果的真实性,我尝试使用不同的程序R
和Matlab
进行相同的测试。然而,R
和Matlab
中的结果彼此不同。R
中的最佳簇数为40,而Matlab
中的最优簇数为6。我试着检查每个参数并调整它们,使所有参数都相同,但仍然得到不同的结果。
还有一些细节我遗漏了吗?还是不同项目的不同结果是有原因的?这个问题困扰了我很长时间。如果你能帮助我,我将非常感谢你。
这是输入数据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
中的绘图结果在此处输入图像描述
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
中的绘图结果在此处输入图像描述
我尝试在Matlab
中更改聚类方法,但最优数量仍然是6。CCD_ 15和CCD_。但集群的最佳数量仍然不同。
我认为这是因为MATLAB中的"firstMaxSE"和R中的"第一SEmax"以不同的方式搜索最优k。
从文档中(https://uk.mathworks.com/help/stats/evalclusters.html#shared-标准和https://www.rdocumentation.org/packages/cluster/versions/2.1.0/topics/clusGap)
MATLAB中的"firstMaxSE"搜索第一个k,使得Gap(k(≥Gap(k+1(−SE(k+1。看看你的第一个情节,在k=6时,这似乎是令人满意的。在R中,等价的选项是"R";Tibs2001SEmax";而不是";第一SEmax";。
"第一SEmax";在R中搜索不小于第一局部最大值减去相应SE因子的第一值的位置。第一局部最大值在k范围内出现得比6晚得多;第一SEmax";返回40作为簇的最佳数目。
这些选项的名称可能有点令人困惑,因为它们听起来几乎相同,但指的是不同的东西。如果您尝试使用";Tibs2001SEmax";在R中,我认为您的结果可能与MATLAB的输出一致。