一.K-均值聚类(K-means)概述

1.聚类

“类”指的是具有相似形得几何。聚类是值将数据集划分为若干类,是的类内之间得数据最为相似,各类之间的数据相似度差别尽可能大。聚类分析就是以相似性为基础,对数据集进行聚类划分,属于无监督学习。

2.无监督学习和监督学习

K-均值聚类属于无监督学习。监督学习知道从对象(数据)中学习什么,而无监督学习无需知道所要搜寻的目标,它根据算法得到数据的共同特征。比如用分类和聚类来说,分类事先就知道所要得到的类别,而聚类是以相似度为基础,将对象就分得不同的簇。

3.K-means

K-means算法是一种简单的迭代型聚类算法,采用距离作为相似性指标,从而发现给定数据集中的K个类,且每个类的中心是根据类中所有值的均值得到,每个类用聚类中心来描述。对于给定的一个包含n个d 维数据点的数据集X以及要分得的类别K,选取欧式距离作为相似度指标,聚类目标是使得各类的聚类平方和最小,即最小化:

结合最小二乘法和拉格朗日原理,聚类中心为对应类别中各数据点的平均值,同时为了使得算法收敛,在迭代过程中,应使最终聚类中心尽可能的不变。

二.K均值聚类算法实现

1.K均值聚类算法流程

K-means是一个反复迭代的过程,算法分为四个步骤:

1) 选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心:

2) 对于样本中的数据对象,根据他们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类;

3) 更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值:

4) 判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)。

2.K均值聚类Matlab实现

1)自主选择数据测试:利用mvnrnd()函数在一定范围内创造随机数,并作图,生成的随机二维分布图形见图1:

2)分析类别数K的设定:K值的确定可以由以下方法确定:1、根据实际需要;2、肘部法则;3、轮廓系数;4、层次聚类;5、Canopy算法;6、间隔统计量 Gap Statistic;

本文采用层次聚类的方法确定K的取值。层次聚类是通过可视化然后认为去判断大致聚为积累,很明显在共同父节点的一颗子树可以被聚类为一类。分层聚类图见图2:

图2

从图中我们可以看到K可以取3。

3)初始质心的选取:选择适当的初始质心是基本K-means算法的关键步骤。

方法1:随机选取初始质心,但是这样簇的质量常常很差。处理选取初始质心问题的一种常用技术是“多次运行,每次使用一组不同的随机初始质心,然后选取具有最小SSE的簇集。

方法2:取一个样本,并使用层次聚类技术对它聚类。从层次聚类中提取K个簇,并用这些簇的质心作为初始质心。适用于小样本。

方法3:随机选择第一个点,或去所有点的质心作为第一个点。然后,对于每个后继初始质心,选择已经选取过的初始质心最远的点。使用这种方法,确保了选择的初始质心不仅是随机的,而且是散开的。但是,这种方法可能选中离群点。

方法4:canopy算法。

本文随机选取质心,见图3:

图3

5) 距离的度量:常用的距离度量方法包括:欧几里得距离和余弦相似度。欧氏距离是最常见的距离度量,二余弦相似度是最常见的相似度度量,借助图4三维坐标系来看下欧氏距离和余弦相似度的区别:

图4:三维坐标系

从图上可以看出距离度量衡量的是空间各点间的绝对距离,跟各个点所在的位置坐标(即个体特征维度的数值)直接相关;而余弦相似度衡量的是空间向量的夹角,更加的是体现在方向上的差异,而不是位置。本文选择欧式距离来对距离进行度量,欧氏距离公式见(2):

6) 聚类效果展示如图5:

图5

7) 聚类效果评估:Kmeans是一种非监督学习,没有标签和其他信息来比较聚类结果。从图5的结果可以清晰的看到算法具有一定的聚类效果,本文采用MCR进行验证,结果见图6

图6

多次计算平均求得的MCR= 0.66,表明误分率还是蛮大的,聚类效果并不是很理想,究其原因:虽然算法收敛,但算法只是收敛到了局部最小值,而并非全局最小值。

三.模糊K均值算法

模糊K-均值算法由K-均值算法派生而来的。K-均值算法在聚类过程中,每次得到的结果虽然不一定是预期的效果,但类别之间的边界是明确的,聚类中心根据各类当前具有的样本进行修改。模糊K-均值算法在聚类过程中,每次得到的类别边界仍是模糊的,每类聚类中心的修改都需要用到所有样本,此外聚类准则也体现了模糊性。

四.模糊K-均值算法

1.模糊K-均值算法过程

模糊K-均值算法基本思想是首先设定一些类及每个样本对各类的隶属度;然后通过迭代,不断调整隶属度至收敛。收敛条件是隶属度的变化量小于规定的阈值。具体步骤如下:

(1)
确定模式类数K,1<K≤N,N是样本个数。

(2)
根据先验知识确定样本属于各类的隶属度,建立初始隶属度矩阵U(0)=[],其中i为类别编号、矩阵的行号,j为样本编号、矩阵的列号。表示第j个元素对第i个类的隶属度。对隶属度矩阵的第j列而言,它表示第j个元素分别对各模式类的隶属度,因此矩阵的每列元素之和为1。

(3)
求各类的聚类中心L是迭代次数。见公式(3):

式中,参数m≥2,是一个控制聚类结果模糊程度的参数。可以看出各聚类中心的计算必须用到全部的N个样本,这是与一般(非模糊)K-均值算法的区别之一。在一般(非模糊)K-均值算法中,某一类的聚类中心仅由该类样本决定,不涉及其他类。

(4)
计算新的隶属度矩阵U(K+1),矩阵元素计算如下:

式中,是第L次迭代完成时,第j个样本到第i类聚类中心的距离。为避免分母为零,特别的

5) 回到(3)求聚类中心,重复至收敛。收敛条件:


,其中为规定的参数。 (6)

当算法收敛时,就得到了各类的聚类中心以及表示个样本对各类隶属程度的隶属度矩阵,模糊聚类到此结束。这时,准则函数

达到最小。

(6) 根据隶属度矩阵U(L+1)进行聚类,按照隶属原则进行划分,即



.模糊K均值matlab实现

1.沿用上面用K均值聚类的的数据随机创造一组数据,见图6;

图6

2.沿用上面K均值聚类确定K值的方法确定K值,取K=3。

3.根据先验知识确定初始隶属度矩阵,利用matlab的rand()函数初始化隶属度矩阵U(0),并归一化,见图7:

图7

其中,cluster_n为聚类中心个数,即K值,data_n为样本点数,U为隶属度矩阵。

4.模糊K均值聚类时迭代的一步:计算新的隶属度矩阵,先求样本点到聚类中心的距离d,见图8:

图8

然后利用求得的距离d,带入公式求解新的隶属度矩阵,见图9:

图9

并求得目标函数值,见图10:

图10

将新得的聚类中心和隶属度值重新分配进行下一次迭代。

5.设置隶属度最小变化量,当变化量小于这个阈值时,迭代终止,见图11:

图11

变化量小于设定阈值,跳出迭代。

3.聚类效果展示,见图12:

图12

五.总结

通过实验,我们发现K均值聚类的优缺点:

优点:

1.算法快速、简单;

2.对大数据集有较高的效率并且是可伸缩性的;

3.时间复杂度近于线性,而且适合挖掘大规模数据集。

缺点:

1.在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。

2.在 K-means 算法中,首先需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果。

3.从 K-means 算法框架可以看出,该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的。

一K均值聚类程序:
clear all;close
all;clc;
%% 随机生成数据
% 第一组数据
mu1=[0 0 ]; %均值
S1=[.1 0 ;0.1]; %协方差
data1=mvnrnd(mu1,S1,100); %产生高斯分布数据
%第二组数据
mu2=[1.25 1.25 ];
S2=[.1 0 ;0 .1];
data2=mvnrnd(mu2,S2,100);
% 第三组数据
mu3=[-1.25 1.25 ];
S3=[.1 0 ;0 .1];
data3=mvnrnd(mu3,S3,100);
% 显示数据
plot(data1(:,1),data1(:,2),‘b+’);
hold on;
plot(data2(:,1),data2(:,2),‘r+’);
plot(data3(:,1),data3(:,2),‘g+’);
grid on;
% 三类数据合成一个不带标号的数据类
data=[data1;data2;data3];
%% 分层聚类确定K值
eucD =pdist(data,‘euclidean’);
clustTreeEuc =linkage(eucD,‘average’);
cophenet(clustTreeEuc,eucD);
P3 = figure;clf;
[h,nodes] = dendrogram(clustTreeEuc,20);
set(gca,‘TickDir’,‘out’,‘TickLength’,[.0020],‘XTickLabel’,[]);
%% 随机产生聚类中心
N=3;%设置聚类数目
[m,n]=size(data);
pattern=zeros(m,n+1);
center=zeros(N,n);%初始化聚类中心
pattern(:,1:n)=data(:

K均值聚类算法以及模糊K均值算法研究,matlab相关推荐

  1. 两种聚类方法——K均值聚类(K-means)算法和模糊C均值聚类(FCM)算法的简述与在MATLAB中的实现

    目录 1.K-means算法 1.1算法流程 1.2程序实现 1.3实验结果 原始数据集 聚类结果 2.FCM算法 2.1算法流程 2.2程序设计 FCM子函数 主函数 2.3实验结果 原始数据集 聚 ...

  2. K-means算法和模糊C均值算法对比

    目录 数据集来源 模糊C均值算法 原理 模糊理论的数学基础(模糊集合) 定义 表示方法 Zadeh表示法 序偶表示法 向量表示法 隶属函数 隶属函数确定方法 模糊关系 定义 实现步骤 应用 代码实现 ...

  3. 基于 K 均值聚类的径向基RBF神经网络优化(Matlab代码实现)

  4. 【图像分割】医学图像均值聚类+OUST+区域生长法图像分割【含GUI Matlab源码 2210期】

    ⛄一.图像分割简介 1 图像分割技术 图像分割 : 根据灰度 , 颜色 , 纹理等,将图像进行分割. 2 常用的分割技术 2.1 边缘检测法 边缘是图像的最重要的特征.边缘是指周围像素灰度有阶跃变化或 ...

  5. 【图像分割】基于均值聚类+OUST+区域生长法实现MRI图像分割附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  6. 【论文必用】模糊C均值聚类的简单介绍、复现及Python代码详解、聚类可视化图的绘制过程详解!

    详解模糊C均值聚类 一.聚类 二.模糊C均值聚类 三.模糊C均值聚类的Python实现 四.参考链接 一.聚类 聚类的定义: 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类 ...

  7. k均值聚类算法考试例题_k means聚类算法实例

    所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高.其中每个子集叫做一个簇. ...

  8. 聚类之K均值聚类和EM算法

    这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means) ...

  9. K-Means(K均值)聚类算法

    K-mean ​ 初始数据集如下图所示,数据集未做任何标记labels 要求将其分为两簇,K均值算法的操作原理为: 随机挑选两个点作为聚类中心(cluster centroids),K-均值算法是一个 ...

  10. python计算iris数据集的均值_模糊C均值聚类算法及python实现

    目录 本文采用数据集为iris,将iris.txt放在程序的同一文件夹下.请先自行下载好. 模糊理论 模糊控制是自动化控制领域的一项经典方法.其原理则是模糊数学.模糊逻辑.1965,L. A. Zad ...

最新文章

  1. 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity
  2. C++与C#类型对应关系
  3. 直接启动SDK Manager: $ADNROID_HOME/tools/android
  4. python面向对象编程指南 脚本之家_python对象及面向对象技术详解
  5. Hadoop 架构已凋谢 ?!
  6. 14.程序员的自我修养---附录
  7. SIP - FreeSwitch 安装 编译
  8. 【SVN】解决SVN安装语言包后无法选择中文的问题
  9. 4G模块UICC逻辑通道入口+CGLA
  10. Yasm入门-hello world
  11. 打开微信键盘自动弹出_微信一打开就弹出键盘 微信打字键盘怎么恢复
  12. 聋校计算机教学案例,聋校汉语拼音b、p的教学案例
  13. CentOS 6.6安装命令行 Web 浏览器 links
  14. 27_Pandas按星期,月份,季度和年份的天计算时间序列数据的总计和平均值
  15. ffmpeg实时传输视频_使用ffmpeg和DirectX 11流式传输视频
  16. SpringCloud微服务之间使用Feign调用不通情况举例
  17. 【SVAC】国标SVAC对飙通行标准,优势何在?
  18. 华东理工大学pk华东师范大学计算机专业,华东理工大学朱为宏教授和华东师范大学杨海波教授合作在光控手性金属配位自组装体系的研究中取得突破性进展...
  19. python 使用xpath获取网页标签内容
  20. STM32 输入捕获 测量频率 PWM占空比

热门文章

  1. Python+OpenCV实现sobel边缘检测
  2. SSM框架整合+案例
  3. MCGrating光栅设计软件
  4. 详解如何提取Unity素材,源码
  5. python将多个txt内容合并_python合并多个txt文件成为一个文件
  6. 隐藏IP地址的三种方法
  7. 在VS2010配置并运行PBC库程序
  8. 【Redis】笔记(尚硅谷、黑马整合)
  9. keil5.36设置GB2312编码后无法修改字体的解决方法——2022.04.04
  10. 【ESP32】HardwareSerial库使用