最近在学习模式识别相关知识,也需要用到动态聚类算法知识,所以就发了K-means聚类。
C-means(K-means)聚类算法是一种很常用的聚类算法,其基本思想史通过迭代寻找C个聚类的一种划分方案,是的用这C个聚类的均值来代表相应各类样本时所得到的的总体误差最小。

参考:《模式识别(张学工第二版)》
在这里插入图片描述
在这里插入图片描述

在MATLAB中有kmeans函数,实例如下

在这里插入图片描述在这里插入图片描述
解决方案:

X=[0 0; 1 1; 2 2; 4 3; 4 4; 5 3; 5 4; 6 5];
figure;
plot(X(:,1),X(:,2),'.');
title 'Generated Data';
[idx,C] = kmeans(X,2);
figure;
plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',20)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',20)
plot(C(:,1),C(:,2),'kx',...
    'MarkerSize',20,'LineWidth',3) 
legend('Cluster 1','Cluster 2','Centroids',...
      'Location','NW')
title 'Cluster Assignments and Centroids'
hold off
grid;

实际效果如下:
在这里插入图片描述

kmeans

Syntax

idx = kmeans(X,k)
idx = kmeans(X,k,Name,Value)
[idx,C] = kmeans(___)
[idx,C,sumd] = kmeans(___)
[idx,C,sumd,D] = kmeans(___)

idx = kmeans(X,k)执行k-means聚类,将n×p数据矩阵X的观测值划分为k个聚类,并返回一个包含每个观测值的聚类索引的n×1向量(idx)。X的行对应点,列对应变量。默认情况下,kmeans使用平方欧式距离度量和k-means++算法来初始化集群中心。
idx = kmeans(X,k,Name,Value)返回带有由一个或多个名称、值对参数指定的附加选项的集群索引。例如,指定余弦距离,使用新的初始值重复集群的次数,或者使用并行计算。
[idx,C] = kmeans()返回k×p矩阵C中的k簇质心位置。
[idx,C,sumd] = kmeans()返回k×1向量sumd中点到质心距离的簇内和。
[idx,C,sumd,D] = kmeans()返回n×k矩阵D中每个点到每个质心的距离。

X: NP的数据矩阵,N为数据个数,P为单个数据维度
K: 表示将X划分为几类,为整数
Idx: N
1的向量,存储的是每个点的聚类标号
C: KP的矩阵,存储的是K个聚类质心位置
sumD: 1
K的和向量,存储的是类间所有点与该类质心点距离之和
D: N*K的矩阵,存储的是每个点与所有质心的距离

Examples

Train a k-Means Clustering Algorithm
在这里插入图片描述

load fisheriris
X = meas(:,3:4);

figure;
plot(X(:,1),X(:,2),'k*','MarkerSize',5);
title 'Fisher''s Iris Data';
xlabel 'Petal Lengths (cm)'; 
ylabel 'Petal Widths (cm)';

rng(1); % For reproducibility
[idx,C] = kmeans(X,3);

x1 = min(X(:,1)):0.01:max(X(:,1));
x2 = min(X(:,2)):0.01:max(X(:,2));
[x1G,x2G] = meshgrid(x1,x2);
XGrid = [x1G(:),x2G(:)]; % Defines a fine grid on the plot

idx2Region = kmeans(XGrid,3,'MaxIter',1,'Start',C);
% Assigns each node in the grid to the closest centroid

figure;
gscatter(XGrid(:,1),XGrid(:,2),idx2Region,...
    [0,0.75,0.75;0.75,0,0.75;0.75,0.75,0],'..');
hold on;
plot(X(:,1),X(:,2),'k*','MarkerSize',5);
title 'Fisher''s Iris Data';
xlabel 'Petal Lengths (cm)';
ylabel 'Petal Widths (cm)'; 
legend('Region 1','Region 2','Region 3','Data','Location','SouthEast');
hold off;

在这里插入图片描述
先写这么多,以后看到了用到了再补上。

Logo

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

更多推荐