作业3 用K-means进行聚类实验

题目说明

基于 V O C VOC VOC数据集中 600 600 600张图像的边界框标注,利用聚类算法获得对该数据集上的锚框。为简化数据,每个边界框只给出长和宽,因此只需要在二维空间进行聚类分析。请使用K-means算法实现聚类。

0x01 实验内容

  1. 使用K-means进行聚类实验:
    假设K=3,分别在不同(大于两次)初始聚类中心情况下进行聚类,观察聚类收敛后聚类中心的情况。
  2. 聚类结果可视化:
    对上述聚类结果进行可视化。(二维平面用不同颜色表示不同簇)

0x02 K-means算法

K-means算法是最简单的一种聚类算法。算法的目的是使各个样本与所在类均值的误差平方和达到最小(这也是评价K-means算法最后聚类效果的评价标准)

0x03 K-means聚类算法的一般步骤:

初始化。输入基因表达矩阵作为对象集X,输入指定聚类类数N,并在X中随机选取N个对象作为初始聚类中心。设定迭代中止条件,比如最大循环次数或者聚类中心收敛误差容限。
进行迭代。根据相似度准则将数据对象分配到最接近的聚类中心,从而形成一类。初始化隶属度矩阵。
更新聚类中心。然后以每一类的平均向量作为新的聚类中心,重新分配数据对象。
反复执行第二步和第三步直至满足中止条件。

在这里插入图片描述

0x04 实验过程:

本实验主要采用了MATLAB语言来实现。

  1. 选取K=2时:

在这里插入图片描述

  1. 选取K=3时:

在这里插入图片描述
3. 选取K=4时:
在这里插入图片描述
4. 选取K=5时:

在这里插入图片描述
结论:各个聚类中心的位置随着K值的改变而改变,当数据被分成几簇后,
每个点的坐标位置并不会改变。

0x05 code:

%K=5时:
clc;
clear;
X=readmatrix('classes.txt');
[idx,C] = kmeans(X,5)
figure;
plot(X(:,1),X(:,2),'.');
title 'Randomly Generated Data';
figure;
plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
hold on
plot(X(idx==3,1),X(idx==3,2),'y.','MarkerSize',12)
hold on
plot(X(idx==4,1),X(idx==4,2),'g.','MarkerSize',12)
hold on
plot(X(idx==5,1),X(idx==5,2),'c.','MarkerSize',12)
plot(C(:,1),C(:,2),'kx',...
     'MarkerSize',15,'LineWidth',3) 
legend('Cluster 1','Cluster 2','Cluster 3','Cluster 4','Cluster 5','Centroids',...
       'Location','NW')
title 'Cluster Assignments and Centroids'
hold off
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐