文档介绍:K-均值聚类分析
1案例题目:
选取一组点(三维或二维),在空间内绘制出来,之后根据K均值聚类,把这组点分为n类。
此例中选取的三维空间内的点由均值分别为(0,0,0),(4,4,4),(-4,4,-4),协方差分别为, 常达到局部最小而难以得到全局最小。
聚类个数k的选定是很难估计的,很多时候我们事先并不知道给定的数据集应该分成多少类才合适。关于K-均值聚类算法中聚类数据k值得确定,有些根据方差分析理论,应用混合F统计量来确定最佳分类树,并应用了模糊划分熵来验证最佳分类的准确性。
将类的质心(均值点)作为聚类中心进行新一轮聚类计算,将导致远离数据密集区的孤立点和噪声点会导致聚类中心偏离真正的数据密集区,所以K-均值算法对噪声点和孤立点非常敏感。
图1为未聚类前初始样本及中心,图2为聚类后的样本及中心。
图1 未聚类前初始样本及中心
图1 聚类后的样本及中心
4.程序:
clear;
clc;
TH = ;
N = 20;
n = 0;
th = 1;
%第一类数据
mu1=[0 0 0]; % 均值
S1=[3 0 0;0 3 0;0 0 3];% 协方差矩阵
X1=mvnrnd(mu1,S1,50); %产生多维正态随机数,mul为期望向量,s1
为协方差矩阵,50为规模
%第一类数据
mu2=[4 4 4];% 均值
S2=[0 0 0;0 3 0;0 0 3];% 协方差矩阵
X2=mvnrnd(mu2,S2,50);
%第一类数据
mu3=[-4 4 -4];% 均值
S3=[3 0 0;0 3 0;0 0 3];% 协方差矩阵
X3=mvnrnd(mu3,S3,50);
X=[X1;X2;X3]; %三类数据合成一个不带标号的数据类
plot3(X(:,1),X(:,2),X(:,3),'+');%显示
hold on
grid on
title('初始聚类中心');
k=4;
[count,d] = size(X);
centers=X(round(rand(k,1)*count),:);
id = zeros(count,1);
%会出聚类中心
plot3(centers(:,1),centers(:,2),centers(:,3),'kx',...
'MarkerSize',10,'LineWidth',2)
plot3(centers(:,1),centers(:,2),centers(:,3),'ko',...
'MarkerSize',10,'LineWidth',2)
dist = zeros(k,1);
newcenters = zeros(k,d);
while( n < N && th > TH)
%while n<N
for ix = 1:count
for ik = 1:k
dist(ik) = sum((X(ix,:)-centers(ik,:)).^2);
end
[~,tmp]=sort(dist); %离哪个类