【数据挖掘】K-Means聚类算法

本文深入探讨了K-Means聚类算法的基本原理和应用,详细介绍了聚类分析的概念、聚类算法的分类及特点,特别关注于K-Means算法的工作流程、实施细节和评估标准。通过实例演示了K-Means算法的具体操作过程。

本文源代码下载

数据挖掘的过程

 

聚类分析

聚类分析是根据数据本身结构特征对数据点进行分类的方法。实质是按照彼此距离 的远近将数据分为若干个类别,以使得类别内数据的“差异性”尽可能小(即“同质 性”尽可能大),类别间“差异性”尽可能大。

 

聚类算法

  1. 聚类的目标:将一组数据分成若干组,组 内数据是相似的,而组间数据是有较明显 差异。
  2. 与分类区别:分类与聚类最大的区别在于分 类的目标事先已知,聚类也被称为无监督机器学习。
  3. 聚类手段:①划分法 ②层次方法 ③基于密 度方法 ④基于网络方法  ⑤基于模型方法

 

K-Means时十大数据挖掘算法之一:

  1. C4.5
  2. K-Means
  3. SVM
  4. Apriori
  5. EM
  6. AdaBoost
  7. PageRank
  8. KNN
  9. Naive Bayes
  10. CART

 

度量法则

1.欧式距离

欧氏距离 (欧几里得距离,Euclidean distance)

– N维空间内任意两点 x(x1,...xn) 和 y(y1,...yn) 之间的距离为

d(x,y) = \sqrt {​{​{({x_1} - {y_1})}^2} + {​{({x_2} - {y_2})}^2} + \cdots + {​{({x_n} - {y_n})}^2}} = \sqrt {\sum\limits_{i = 1}^n {​{​{({x_i} - {y_i})}^2}} }

 

2.曼哈顿距离

d(x,y) = \left| {​{x_1} - {y_1}} \right| + \left| {​{x_2} - {y_2}} \right| + \cdots + \left| {​{x_n} - {y_n}} \right|

3.闵可夫斯基距离

d(x,y) = \sqrt[p]{​{​{​{\left| {​{x_1} - {y_1}} \right|}^p} + {​{\left| {​{x_2} - {y_2}} \right|}^p} + \cdots + {​{\left| {​{x_n} - {y_n}} \right|}^p}}}

欧氏距离和曼哈顿距离可以看做是闵可夫斯基距离在p=2和p=1下的特例

 

k-均值算法 (k-Means)特性

  1. 聚类算法将数据点分为多个 簇(cluster)
  2.  k-menas算法中,簇的中心 叫做簇质心或中心点 (centroid),质心不一定是 一个真实存在的数据点.
  3. 把每个簇想像成一块有质量 的物体,质心即这块物体的 质量中心。
  4. k-means要求事先指定数据 要分为几组,例如可指定分 为4组,这里的4即算法名称 中k的含义,此时 k = 4。

 

K-均值算法流程描述

指定n=k(k为要分的组数)

  1. 随机挑选n个点作为初试簇质心。
  2. 遍历所有点,各自加入距离最近的簇(距离可以用欧式距离,需要对数据进行标准化)。
  3. 调整各个簇的质心(取簇中各点的算术平均值作为新质心的坐标即可)。
  4. 回到第二步。

终止条件:簇不再发生变化

 

如何评价聚类结果的质量?

  • 好的聚类结果的簇内数据点比较紧凑,簇间相距大, 即簇内中各数据点离质心的距离都比较小。
  • 可使用误差平方和(SSE, Sum of Squared Errors) 准则函数来评价。
  • 一个簇的误差平方和即簇内各点到质心欧式距离的 平方和:

SSE(k) = \sum\limits_{p \in X} {dis\tan ce{​{(p,centroid)}^2}}

其中p表示簇中的点,X是簇内点的集合,distance(p, centroid)即点p到簇质心的距离

聚类结果的SSE即各个簇的SSE之和,其值越 小表示聚类质量越好

 

手工聚类算法样例(以二维为例):

%K_means聚类算法实例 
%数据初始化
clear
x=[0 0;1 0;0 1;1 1;2 1;1 2;2 2; 3 2;6 6;7 6;8 6;6 7;7 7;8 7;9 7;7 8; 8 8;9 8; 8 9;9 9];
z=zeros(2,2);
z1=zeros(2,2);
%设置初始中心点为前两个样本点
z=x(1:2,1:2);
%寻找聚类中心 
while 1
    count=zeros(2,1);%为求解聚类中心 计次数
    allsum=zeros(2,2);%为求解聚类中心 计数据之和
    for i=1:20
        %对每一个样本i,求i到两个聚类中心点的距离
        temp1=sqrt((z(1,1)-x(i,1))^2+(z(1,2)-x(i,2))^2);
        temp2=sqrt((z(2,1)-x(i,1))^2+(z(2,2)-x(i,2))^2);
        %到哪个聚类中心点距离较小,就将i分配该聚类中心
        if (temp1<temp2)
        count(1)=count(1)+1;
        allsum(1,1)=allsum(1,1)+x(i,1);
        allsum(1,2)=allsum(1,2)+x(i,2);
        else
        count(2)=count(2)+1;
        allsum(2,1)=allsum(2,1)+x(i,1);
        allsum(2,2)=allsum(2,2)+x(i,2);
     end
    end 
    %重新计算两个聚类中心点
    z1(1,1)=allsum(1,1)/count(1);
    z1(1,2)=allsum(1,2)/count(1);
    z1(2,1)=allsum(2,1)/count(2);
    z1(2,2)=allsum(2,2)/count(2);
    if(z==z1)%聚类中心不再变化时,结束 
        break;
    else
        z=z1;
    end   
end 
disp(z1);%输出聚类中心 
%绘制所有样本点
plot(x(:,1),x(:,2),'k*')
hold on 
%绘制聚类中心点
plot(z1(:,1),z1(:,2),'ro')
set(gca,'linewidth',1);
xlabel('特征x1','fontsize',12);
ylabel('特征x2','fontsize',12);
title('K-means 分类图','fontsize',12);

 

算法实现

  • [IDX,C,sumd,D]=kmeans(x,k,param1,val1,param2,val2,…)
  • X为输入数据,k为聚类数
  • IDX为每个样本数据的类别
  • C为返回的k个类别的中心向量
  • sumd为返回每个类别样本到中心向量的距离和
  • D为返回每个样本到中心的距离,附加参数 param1,val1,param2,val2,…如下表

附加参数表

参数表
参数名参数值说明
distance 距离计算函数,默认选项
 sqEuclidean平方欧式距离
 Cosine余弦距离
 Correlation相关系数距离
 Hamming汉明距离
emptyaction 当一个距离中心没有一个样本值时的操作
 error把一个空聚类作为错误,默认选项
 drop把空聚类移除
 singleton为距离聚类中心最远的点创建一个聚类中心
MaxIter100循环的次数,默认为100
replicates1始值,根据sumd的值返回最佳的初始值聚类结果
start 用于初始化聚类中心向量的方法
 sample随机选择,默认选项   uniform 随机均匀的选择k个中心向量
 cluster使用样本数据的10%进行预分类
 matrixK*p维的矩阵,即自己制定聚类中心
 uniform随机均匀的选择k个中心向量

k-means聚类算法的实现:

利用matlab中的鸢尾花数据集来举例

load fisheriris %载入数据集
X = meas(:,3:4);%取花瓣长度和宽度两个特征
figure;
plot(X(:,1),X(:,2),'k*');%画出图形表示样本
title 'Fisher''s Iris Data';
xlabel 'Petal Lengths (cm)';
ylabel 'Petal Widths (cm)';
[idx,C] = kmeans(X,3);%聚类
hold on
plot(C(:,1),C(:,2),'ro');%画出聚类中心
plot(C(:,1),C(:,2),'bx');

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cout0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值