当前位置:   article > 正文

[学习笔记]k-mean算法matlab的简单实现与系统聚类分析

[学习笔记]k-mean算法matlab的简单实现与系统聚类分析

一、聚类模型的引入
1.1概念介绍
聚类分析:样本或者变量之间存在不同程度的相似性,要求设法找出一些能够度量他们之间的相似程度的统计量作为分类依据,再利用这些量将样本或者变量进行分类在利用这些量将样本或者变量进行分类。系统聚类分析:将n个样本或者n个制表看成n类,一类包括一个样本或者指标,然后将性值最接近的两类合并成一个新类,以此类推。最终可以按照需要来句欸的那个分多少类,每类有多少样本(指标)。
1.2 使用目的
聚类后,我们可以更加准确的在每个类中单独使用统计模型进行估计,分析或者预测;也可以探究不同类之间的相关性和主要差异。

二、k-means聚类算法
2.1 算法原理
在数据相似程度能够通过欧式距离度量时,通过人为设定类别的个数让机器自己去找类别的个数。(如果不能够用欧式距离度量时,也就不能直接使用k-means聚类算法)
K -means算法实现的伪代码:
function K-Means(输入数据,中心点个数K)
获取输入数据的维度Dim和个数N
随机生成K个Dim维的点
while(算法未收敛)
对N个点:计算每个点属于哪一类。
对于K个中心点:
1,找出所有属于自己这一类的所有数据点
2,把自己的坐标修改为这些数据点的中心点坐标 end 输出结果:
End
(该资料源于:https://zhuanlan.zhihu.com/p/20432322)
2.2 matlab模拟
使用正态分布随机变量生成训练数据集。

rng('default') % For reproducibility
X = [randn(100,2)*0.75+ones(100,2);   
 randn(100,2)*0.5-ones(100,2);    
randn(100,2)*0.75];%(此次生成的数据是二维训练数据,合计300个数据)
[idx,C] = kmeans(X,3);
figuregscatter(X(:,1),X(:,2),idx,'bgm')
hold onplot(C(:,1),C(:,2),'kx')
legend('Cluster 1','Cluster 2','Cluster 3','Cluster Centroid')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
语法说明:
Idx:每个观测值的簇索引的 n×1 向量
X、K:以将 n×p 数据矩阵 X 的观测值划分为 k 个聚类。其中n表示数据的数量,p表示数据的维度
C:在 k×p 矩阵 C 中返回 k 个簇质心的位置。
Sumd:在 k×1 向量 sumd 中返回簇内的点到质心距离的总和。
D:在 n×k 矩阵 D 中返回每个点到每个质心的距离。
2.3 k-means相关设置
‘Display’:后接参数‘final’、‘iter’、‘off’
‘final’:显示最终迭代结果
‘iter’:显示每次迭代的结果
‘off’:不显示任何内容
‘Distance’:后接参数’sqeuclidean’、‘cityblock’、‘cosine’、‘correlation’、'hamming’不同的参数对应了不同的距离算法。一般默认算法是sqeuclidean,即是阿基米德距离算法。
‘MaxIter’:后接参数设置最大迭代次数,默认值是100
‘Options’:控制迭代算法以最小化拟合标准的选项,默认是statset 返回结构体数组
‘Replicates’:重新选择质心位置重复聚类次数。其默认值是1。

稍稍复杂一点的使用:

构建数据

rng default; % For reproducibility
X = [randn(100,2)*0.75+ones(100,2);
    randn(100,2)*0.5-ones(100,2)];
  • 1
  • 2
  • 3

显示数据分布

figure(1);
plot(X(:,1),X(:,2),'.');
title 'Randomly Generated Data';
  • 1
  • 2
  • 3

设置使用k-means

opts = statset('Display','final');
[idx,C] = kmeans(X,2,'Distance','cityblock',...
    'Replicates',5,'Options',opts);	
  • 1
  • 2
  • 3

显示聚类结果图

figure(2);
plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(C(:,1),C(:,2),'kx',...
     'MarkerSize',15,'LineWidth',3) 
legend('Cluster 1','Cluster 2','Centroids',...
       'Location','NW')
title 'Cluster Assignments and Centroids'
hold off
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述
调用 ‘Replicates’,5,'时出现
Replicate 1, 3 iterations, total sum of distances = 201.533.
Replicate 2, 5 iterations, total sum of distances = 201.533.
Replicate 3, 3 iterations, total sum of distances = 201.533.
Replicate 4, 3 iterations, total sum of distances = 201.533.
Replicate 5, 2 iterations, total sum of distances = 201.533.

三、系统聚类法
3.1分类思想
例如只考虑某一项指标,比如说下表的数学成绩表格,我们就可以把接近的点划归为一类。
在这里插入图片描述
如果此时加入了物理成绩,即可在平面上表示出来。然后把接近的点化为一类。
在这里插入图片描述
我们把距离近作为样品聚为一类的准则,当然距离可以是绝对值距离、欧式距离等。由一个样品组成的类是最基本的类;如果每一类都由一个样品组成,那么样品间的距离就是类间距离。如果某一类包含不止一个样品,那么就要确定类间距。而类间距是基于样品间距离定义的。
最短距离法:
在这里插入图片描述
最长距离法:
在这里插入图片描述
组间平均连接法:在这里插入图片描述
组内平均链接法:在这里插入图片描述
重心法:
在这里插入图片描述
3.2 算法过程
1.计算n个样品两两间的距离dij
2.构造n个类,每个类只包含一个样品
3.合并距离最近的两类为一个新类
4.计算新类与当前各类的距离
5.判断类的个数是否等于1,如果不是则重复3,4,5。6.画类聚图
7.决定分类个数和类
3.3分析案例(来源于辽宁石油化工大学 于晶贤老师)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/484771
推荐阅读
相关标签
  

闽ICP备14008679号