代码是matlab写的,测试数据在最下面。可以看到聚点移动的轨迹,代码开始运行后,每按一下键盘,聚点移动一次。
效果是这样的
代码
load('ex7data2.mat');
K = 3;
scatter(X(:,1), X(:,2),'g.');
randidx = randperm(size(X, 1));
centroid = X(randidx(1:K), :);
old_centroid = centroid;
new_centroid = zeros(K, 2);
max_iteration = 10;
pause;
for i = 1 : max_iteration
hold on;
idx = zeros(size(X,1), 1);
for j = 1 : size(X, 1)
dis = pdist2(old_centroid, X(j,:));
[C, idx(j,1)] = min(dis);
end
new_centroid = zeros(K, 2);
sum = zeros(K, 1);
for j = 1 : size(idx, 1)
new_centroid(idx(j,1),:) = new_centroid(idx(j,1),:) + X(j,:);
sum(idx(j),1) = sum(idx(j),1) + 1;
end;
for j = 1 : K
new_centroid(j, 1) = new_centroid(j, 1) / sum(j, 1);
new_centroid(j, 2) = new_centroid(j, 2) / sum(j, 1);
end;
scatter(old_centroid(:,1), old_centroid(:,2), 'MarkerFaceColor', 'b');
scatter(new_centroid(:,1), new_centroid(:,2), 'MarkerFaceColor', 'r');
for j = 1 : K
plot([old_centroid(j,1) new_centroid(j, 1)], [old_centroid(j, 2) new_centroid(j, 2)], 'k');
end;
old_centroid = new_centroid;
pause;
end;
测试数据
1.842080 4.607572
5.658583 4.799964
6.352579 3.290854
2.904017 4.612204
3.231979 4.939894
1.247923 4.932678
1.976199 4.434897
2.234541 5.055472
2.983408 4.840464
2.979704 4.806711
2.114964 5.373736
2.121695 5.208542
1.514353 4.770033
2.169792 5.274354
0.418524 4.883125
2.470537 4.804189
4.060691 4.995039
3.007089 4.678978
0.666323 4.871879
3.162187 4.836583
0.511553 4.910529
3.134280 4.961781
2.049746 5.624139
0.665828 5.243993
1.017320 4.844736
2.178936 5.297587
2.859626 5.260420
1.308826 5.301587
0.992532 5.015674
1.403726 4.575277
2.660466 5.196238
2.799959 5.115263
2.069953 4.684671
3.297652 5.592055
1.892977 4.890432
2.559831 5.263978
1.153540 4.678667
2.251508 5.445003
2.209603 4.914693
1.591419 4.832126
1.678380 5.269038
2.591486 4.925934
2.809964 5.538499
0.953116 5.580371
1.517753 5.038366
3.231142 5.784297
2.541800 4.810987
3.814229 4.735268
1.684958 4.596436
2.177772 4.861540
1.817333 5.133339
1.857766 4.869624
3.030843 5.240576
2.926583 5.096679
3.434935 5.340807
3.203671 4.859248
0.105118 4.729163
1.405979 5.066368
2.241851 4.924462
1.366784 5.261611
1.707255 4.042315
1.919096 5.578484
1.601567 4.644530
0.379634 5.261947
2.021345 4.412674
1.120367 5.208807
2.269014 4.618189
-0.245127 5.740192
2.128578 5.011498
1.844200 5.031539
2.325583 4.748680
1.523341 4.879162
1.022851 5.010507
1.853827 5.007525
2.203217 4.945164
1.201000 4.578298
1.020627 4.629911
1.604932 5.136631
0.476474 5.135360
0.363917 4.733328
0.313198 5.546946
2.286648 5.007670
2.154601 5.462830
2.052885 4.779586
4.888043 5.506708
2.403047 5.081473
2.568695 5.206879
1.829760 4.596573
0.548452 5.026730
3.171096 5.594645
3.042021 5.007584
2.404278 5.025871
0.177835 5.297650
2.614287 5.222874
2.300978 4.972358
3.907793 5.094647
2.056705 5.233913
1.381335 5.001950
1.160742 4.677279
1.728182 5.360284
3.203606 0.722215
3.061929 1.571921
4.017149 1.160706
1.402608 1.087265
4.081650 0.872003
3.152731 0.981559
3.451864 0.427841
3.853843 0.792048
1.574493 1.348111
4.723721 0.620441
2.879611 0.754137
0.967913 1.161668
1.531781 1.100549
4.138359 1.247810
3.161090 1.294229
2.951770 0.895831
3.278443 1.750439
2.127018 0.956720
3.326489 1.280191
2.543715 0.957327
3.233947 1.082023
4.431530 0.540410
3.564786 1.117647
4.255885 0.906440
4.053866 0.532919
3.089702 1.088144
2.847345 0.267593
3.635860 1.121602
1.955389 1.321569
2.883840 0.804545
3.484444 1.135514
3.497984 1.100464
2.455759 0.789047
3.203800 1.027281
3.006773 0.625191
1.965480 1.217308
2.179893 1.308798
2.612070 0.990769
3.955499 0.832693
3.648465 1.628497
4.184500 0.453562
3.787572 1.454429
3.300637 1.281076
3.028364 1.356352
3.184122 1.414108
4.169119 0.205810
3.240242 1.148762
3.915961 1.012258
2.969797 1.012103
1.129939 0.770853
2.717308 0.486976
3.118902 0.694383
2.405180 1.117781
2.958184 1.018871
1.654563 1.186312
2.397758 1.247214
2.284093 0.648655
2.795887 0.995267
3.411563 1.159636
3.506635 0.738781
3.936160 1.462029
3.902067 1.277788
2.610364 0.880276
4.372719 1.029141
3.083491 1.196326
2.115994 0.793037
2.156534 0.403589
2.144911 1.135824
1.849355 1.022326
4.159082 0.617207
2.764945 1.431490
3.905612 1.165753
2.540717 0.983925
4.277831 1.180137
3.310582 1.031245
2.155207 0.806966
3.713637 0.458132
3.540102 0.864461
1.605200 1.109805
1.751643 0.688535
3.124051 0.678218
2.371988 1.427896
2.534460 1.215621
3.683447 1.228345
3.267013 0.320567
3.941591 0.825774
3.264551 1.383687
4.304711 1.107260
2.684994 0.353449
3.126352 1.280689
2.942944 1.028251
3.118765 1.332855
2.023590 0.447716
3.622029 1.286438
2.428659 0.864993
2.095173 1.140105
5.292395 0.368733
2.072917 1.167639
0.946232 0.245223
2.739119 1.100723
6.005065 2.727842
6.056964 2.949704
6.770128 3.214114
5.640347 2.693853
5.633254 2.990023
6.174432 3.290265
7.246948 2.968774
5.581629 3.335104
5.362721 3.146812
4.707758 2.787109
7.428921 3.466795
6.641072 3.059987
6.374737 2.562531
7.287803 2.751799
6.202952 2.678562
5.387360 2.267373
5.667310 2.964779
6.597022 3.070824
7.756606 3.156045
6.632627 3.147992
5.766350 3.142717
5.994232 2.757079
6.378704 2.650223
5.740362 3.103913
4.616524 2.793207
5.335340 3.039287
5.372939 2.816848
5.036112 2.924861
5.529087 3.336816
6.050869 2.807026
5.132009 2.198122
5.732849 2.877381
6.781107 3.056769
6.448344 3.352992
6.399415 2.897569
5.860679 2.995771
6.447652 3.165609
5.367081 3.195026
5.887356 3.346156
3.961625 2.720250
6.284382 3.173606
4.205848 2.816474
5.326156 3.033140
7.171352 3.412273
7.494928 2.840188
7.398072 3.484870
5.024330 2.986832
5.317125 2.817414
5.876552 3.216611
6.037628 2.683035
5.912803 2.856319
6.694514 2.890561
6.010180 2.724013
6.927220 3.199600
6.335595 3.308643
6.242571 2.791793
5.578123 3.247660
6.407739 2.675550
6.800295 3.175796
7.216840 2.728966
6.511007 2.727319
4.606305 3.329458
7.655032 2.870956
5.502958 2.629246
6.630607 3.015023
3.459280 2.684784
8.203398 2.416935
4.956794 2.897763
5.370527 2.449548
5.697979 2.949771
6.273763 2.242560
5.052745 2.756922
6.885756 2.888453
4.187744 2.892835
5.975103 3.025919
6.094571 2.618680
5.723957 3.044542
4.372498 3.054882
6.292063 2.775739
5.145330 4.132257
6.587057 3.375083
5.787691 3.292551
6.727981 3.004398
6.640789 2.410688
6.232289 2.728509
6.217727 2.809946
5.781163 3.079878
6.624473 2.744537
5.195908 3.069729
5.871772 3.255177
5.895621 2.898440
5.617543 2.597507
5.631761 3.047587
5.502587 3.118691
6.482126 2.550851
7.302787 3.380160
6.991984 2.987067
4.825534 2.779617
6.117681 2.854757
0.940489 5.715568