MATLAB小技巧(31)kmeans聚类

MATLAB小技巧(31)kmeans聚类

前言

MATLAB进行图像处理相关的学习是非常友好的,可以从零开始,对基础的图像处理都已经有了封装好的许多可直接调用的函数,这个系列文章的话主要就是介绍一些大家在MATLAB中常用一些概念函数进行例程演示!

k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,聚类技术经常被称为无监督学习。k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。本仿真示例MATLAB版本为MATLAB2015b。

一. MATLAB仿真

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:Kmeans聚类
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-28
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% I. 清空环境变量
clear all
clc

tic

X = [2345	22.133	73.667	21.667	1645.7441
2330	21.6	79.333	21	1693.2693
2315	20.667	87.333	19.667	1754.3945
2300	20.333	91	19	1824.0728
2245	20.233	93	19	1886.6993
2230	20.067	93.333	19	1946.2612
2215	20.067	94	19	2012.9419
2200	19.933	93.667	18.667	2078.9727
2145	20.167	92.667	19.333	2144.7363
2130	23.333	75.333	23.333	2197.4436
2115	26.567	62.667	27.667	2202.8196
2100	27	59.667	27.667	2216.8677
2045	28.033	54	29.333	2235.9443
2030	29.133	47.667	30.333	2235.5813
2015	29.167	46.333	30	2213.2466
2000	29.133	46.667	30	2211.2786
1945	29.333	46.333	30.667	2184.4988
1930	29.5	45.667	30.667	2152.5903
1915	29.833	45	30.667	2149.1938
1900	30.067	44.333	31.333	2135.2549
1845	30.5	46	32.333	2159.0088
1830	31.033	45	33.333	2154.5742
1815	31.633	42	33.667	2149.6626
1800	31.967	40.333	33.333	2153.6826
1745	32.3	39.333	33	2177.1943
1730	32.567	38.333	33.667	2181.7134
1715	32.833	37.333	34.333	2175.1987
1700	33	35.667	33.667	2163.4102
1645	33.1	37	34.333	2148.2231
1630	33.333	36.333	33.667	2144.8501
1615	33.633	35.667	34.667	2120.0862
1600	33.9	35	35	2094.7168
1545	33.967	35.333	35.333	2078.2246
1530	33.733	35.667	34.667	2062.4155
1515	33.667	35.667	35.333	2081.3938
1500	33.867	35	35	2092.5576
1445	33.633	35	34.333	2053.0674
1430	33.267	35.667	34	2067.6699
1415	33.133	35	34.333	2066.2915
1400	33.3	35	34.667	2074.0708
1345	32.6	36.667	33.667	2078.8323
1330	32.267	36	32.333	2055.3105
1315	32.367	36.333	32.667	2069.3018
1300	32.733	34.333	33	2064.3274
1245	32.467	34.667	33	2062.2773
1230	32.3	35	32.667	2062.4373
1215	32.3	34.667	33	2058.9009
1200	32.067	34.667	32.333	2070.9666
1145	31.767	34.333	32	2068.8518
1130	31.367	36	32	2064.728
1115	31.033	36.333	31	2065.0349
1100	30.767	36.667	30.667	2034.1639
1045	30.367	37	30.333	2027.9369
1030	30.1	37.333	30	2013.0757
1015	29.467	37.667	29	1979.8931
1000	28.967	40	28.667	1950.5785
945	28.533	40.667	28.333	1901.5054
930	28.233	39.333	28	1829.9697
915	27.467	42	27.667	1764.4973
900	27.267	42.333	27	1709.8811
845	26.7	45	27	1629.5698
830	26.533	44.667	26.667	1576.8669
815	26.3	44.667	25.667	1523.8842
800	25.833	46	25.667	1452.2449
745	25.267	49.333	24.667	1384.7441
730	24.6	51.333	24.333	1345.5134
715	24.1	56.667	23.333	1294.5331
700	23.5	62	23.667	1259.9128
645	23.133	62.333	22.667	1229.3931
630	22.767	62.667	22.333	1200.9705
615	22.4	64.333	22	1170.6023
600	22.033	64.667	21.667	1131.8568
545	21.867	63.333	21.333	1119.5798
530	21.567	62.333	20.667	1090.9631
515	21.633	62	20.667	1079.8999
500	21.767	60.667	20.667	1068.698
445	21.867	61.667	20.667	1060.152
430	22.033	61	21	1053.1154
415	22.433	59.333	21.667	1055.0146
400	22.7	58	22	1079.9813
345	22.733	57	22	1074.444
330	22.733	58.333	22.667	1084.1436
315	22.7	59.667	22.333	1094.5214
300	22.7	60	22.667	1102.3699
245	22.633	60.667	22.333	1121.6499
230	22.6	61.333	22.333	1131.3728
215	22.667	61.667	22	1145.8096
200	22.7	61	22	1163.0804
145	22.767	61.333	22.333	1183.9659];%导入数据
 
%调用Kmeans函数
%X N*P的数据矩阵
%Idx N*1的向量,存储的是每个点的聚类标号
%Ctrs K*P的矩阵,存储的是K个聚类质心位置
%SumD 1*K的和向量,存储的是类间所有点与该类质心点距离之和
%D N*K的矩阵,存储的是每个点与所有质心的距离;
%参考链接https://wenku.baidu.com/view/377afe18ff00bed5b9f31da6.html?re=view
[Idx,Ctrs,SumD,D] = kmeans(X,3,'Replicates',5, 'dist','sqEuclidean');%聚的3类,可以改的

%画出聚类为1的点。X(Idx==1,1),为第一类的样本的第一个坐标;X(Idx==1,2)为第二类的样本的第二个坐标
plot(X(Idx==1,1),X(Idx==1,2),'r.','MarkerSize',14)
hold on
plot(X(Idx==2,1),X(Idx==2,2),'b.','MarkerSize',14)
hold on
plot(X(Idx==3,1),X(Idx==3,2),'g.','MarkerSize',14)
 
%绘出聚类中心点,kx表示是圆形
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)
 
legend('Cluster 1','Cluster 2','Cluster 3','Centroids','Location','NW')
 
resultkmeans=[X,Idx];%原始数据与聚类结果的合并

%找出每个类原始数据样本所在位置
k1=find(Idx==1);
k2=find(Idx==2);
k3=find(Idx==3);


%每个模型所需数据
bp1 =resultkmeans(k1,:);
bp2=resultkmeans(k2,:);
bp3=resultkmeans(k3,:);
toc

二. 仿真结果

在这里插入图片描述

三. 小结

K均值是比较常见也是原理比较简单的聚类方法,在自己的专栏《视觉机器学习20讲》中也有相关示例,链接在文末。每天学一个MATLAB小知识,大家一起来学习进步阿!

视觉机器学习20讲-MATLAB源码示例(1)-Kmeans聚类算法

猜你喜欢

转载自blog.csdn.net/sinat_34897952/article/details/125464529