与分类不同,聚类分析是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法。与分类模型需要使用有类标记样本构成的训练数据不同,聚类模型可以建立在五类标记的数据上,是一种非监督的学习算法。聚类的输入是一组未被标记的样,聚类根据数据自身的距离或相似度将它们划分为若干组,划分的原则是组内样本最小化而组件距离最大化。
K-Means聚类算法
K-means聚类算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数K,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度越大。
算法过程
1.从N个样本数据中心随机选取K个对象作为初始的聚类中心;
2.分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中;
3.所有对象分配后,重新计算K个聚类的中心;
4.与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转第2步,否则转第4步。
5.当质心不发生变化时停止并输出聚类结果。
代码实现
%% 使用K-Means算法聚
clear ;
% 参数初始化
inputfile = 'path'; %
k = 3; % 聚类的类别
iteration =500 ; % 聚类最大循环次数
distance = 'sqEuclidean'; % 距离函数
%% 读取数据
[num,txt]=xlsread(inputfile);
data = num(:,2:end);
%% 数据标准化
data = zscore(data);
%% 调用kmeans算法
opts = statset('MaxIter',iteration);
[IDX,C,~,D] = kmeans(data,k,'distance',distance,'Options',opts);
%% 打印结果
for i=1:k
disp(['第' num2str(i) '组聚类中心为:']);
disp(C(i,:));
end
disp('K-Means聚类算法完成!');
|