K-means算法是一种聚类算法,属于无监督学习。K-means算法主要做两件事情:1、簇分配;2、移动聚类中心。
算法主要流程:
1. 随机地选择k个对象,每个对象初始地代表了一个簇的中心;
2. 对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;
3. 重新计算每个簇的平均值,更新为新的簇中心;
4. 不断重复2、3,直到准则函数收敛。
K-means算法伪代码
Repeat{
for i=1 to m
c(i)=index (form 1 to K) of cluster centroid closest to x(i) %簇分配
for k=1 to K
center=mean of points assigned to cluster k %移动聚类中心
}
matlab 代码实现
%%输入数据
function data=datafile()
%随机产生三组随机数
% 第一组数据
mu1=[0 0 ]; %均值
S1=[.1 0 ;0 .1]; %协方差
data1=mvnrnd(mu1,S1,100); %产生高斯分布数据
%第二组数据
mu2=[1 1 ];
S2=[.1 0 ;0 .1];
data2=mvnrnd(mu2,S2,100);
% 第三组数据
mu3=[-1.25 1.25 ];
S3=[.1 0 ;0 .1];
data3=mvnrnd(mu3,S3,100);
data=[data1;data2;data3];
end
%%k-means函数
function [id,center]=k_means(data,K)
%K-means聚类
%id是表示数据点属于哪一类的标记,center是每个类的聚类中心
%data为输入数据,K为需要分的聚类
% data=datafile();
% K=3;
[m,n]=size(data); %求输入数据