matlab实现K-means聚类算法

代码是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

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值