常用的聚类算法:K-means、K中心点、系统聚类
KMeans:K-均值聚类也叫快速聚类法,在最小化误差函数的基础上将数据划分为预定的类数K。该算法原理简单并便于处理大量的数据。
K中心点:K-均值算法对孤立点的敏感性,K-中心点算法不采用簇中对象的平均值作为簇中心,而选用簇中离平均值最近的对象作为簇中心。
系统聚类:系统聚类也叫多层次聚类,分类的单位由高到低呈树形结构,且所处的位置越低,其所包含的对象就越少,但这些对象间的共同特征越多。该聚类方法只适合在小数据量的时候使用,数据量大的时候处理速度会非常慢。
K-means聚类:
算法描述:
(1)从N个样本中随机选取K个对象最为初始的聚类中心。
(2)分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中。
(3)所有对象分配完成后,重新计算K个聚类中心。
(4)与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转到第二步。
(5)当聚类中心不发生变化时停止并输出聚类结果。
注意:
聚类的结果可能依赖于初始聚类中心的随机选择,可能使得结果严重偏离全局最优分类。在实践中为了得到较好的结果,通常以不同的初始聚类中心,多次运行K-Means算法。在所有对象分配完成后,重新计算K个聚类的中心时,对于连续数据聚类中心取该簇的均值。
代码:
使用matlab的kmeans函数进行聚类
%% 使用K-Means算法聚类消费行为特征数据
clear ;
% 参数初始化
inputfile = '../data/consumption_data.xls'; % 销量及其他属性数据
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聚类算法完成!');