K-means聚类算法及其MATLAB实现

Matlab实现Kmeans聚类算法 matlab实现kmeans聚类算法 阅读详情

参考:

http://www.youkuaiyun.com/article/2012-07-03/2807073-k-means

http://www.cnblogs.com/zhzhang/p/5437778.html

http://blog.youkuaiyun.com/qll125596718/article/details/8243404/


K-means属于无监督学习方法

K表示类别数,Means表示均值,K一般由人工来指定,或通过层次聚类(Hierarchical Clustering)的方法获得数据的类别数量作为选择K值的参考

选择较大的K可以降低数据的误差,但会增加过拟合的风险。


K-mean算法如下:

(1)随机选取K个初始质心

(2)分别计算所有样本到这K个质心的距离

(3)如果样本离质心Si最近,那么这个样本属于Si点群;如果到多个质心的距离相等,则可划分到任意组中

(4)按距离对所有样本分完组之后,计算每个组的均值(最简单的方法就是求样本每个维度的平均值),作为新的质心

(5)重复(2)(3)(4)直到新的质心和原质心相等,算法结束


K-mean算法的一些特点、与EM估计的关系:

(1)定义畸变函数J=∑(所有点到质心距离),J是非凸函数,所以最后得到的结果并不是全局最小值,也就是说k-means算法对质心的初始位置选取比较敏感。可以选取不同的处置跑多遍k-means,然后选取最小的J对应的μ和c

(2)通过不断交替更新【质心μ】和【每个样本类别c】,有种坐标上升(coordinate ascent的思想)

(3)k-means算法也有种E-M估计的思想,因为E-M的E步是估计隐变量,对应k-means的第一步估计质心,然后确定类别变量(隐变量);M步是通过调整其他参数,即重新确定质心μ,来使得J最小化



距离的度量:

       常用的距离度量方法包括:欧几里得距离和余弦相似度。两者都是评定个体间差异的大小的。欧几里得距离度量会受指标不同单位刻度的影响,所以一般需要先进行标准化(归一化),同时距离越大,个体间差异越大;空间向量余弦夹角的相似度度量不会受指标刻度的影响,余弦值落于区间[-1,1],值越大,差异越小。但是针对具体应用,什么情况下使用欧氏距离,什么情况下使用余弦相似度?
       从几何意义上来说,n维向量空间的一条线段作为底边和原点组成的三角形,其顶角大小是不确定的。也就是说对于两条空间向量,即使两点距离一定,他们的夹角余弦值也可以随意变化。感性的认识,当两用户评分趋势一致时,但是评分值差距很大,余弦相似度倾向给出更优解。举个极端的例子,两用户只对两件商品评分,向量分别为(3,3)和(5,5),这两位用户的认知其实是一样的,但是欧式距离给出的解显然没有余弦值合理。



K-mean算法实现过程如下:

(1)先产生三组不同的高斯分布数据,做为原始数据,如下图:


(2)当聚类中心数N取不同的值,聚类结果不同,如下:

N=2时


N=3时


N=4时


N=5时


另外:即使N相同的情况下,每次聚类的结果也会不同,因为初始质点的选取是随机的

MATLAB实现如下:

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]; 
N=3;%设置聚类数目
[m,n]=size(data);
pattern=zeros(m,n+1);
center=zeros(N,n);%初始化聚类中心
pattern(:,1:n)=data(:,:);
for x=1:N
    center(x,:)=data( randi(300,1),:);%第一次随机产生聚类中心
end
while 1
distence=zeros(1,N);
num=zeros(1,N);
new_center=zeros(N,n);
 
for x=1:m
    for y=1:N
    distence(y)=norm(data(x,:)-center(y,:));%计算到每个类的距离
    end
    [~, temp]=min(distence);%求最小的距离
    pattern(x,n+1)=temp;         
end
k=0;
for y=1:N
    for x=1:m
        if pattern(x,n+1)==y
           new_center(y,:)=new_center(y,:)+pattern(x,1:n);
           num(y)=num(y)+1;
        end
    end
    new_center(y,:)=new_center(y,:)/num(y);
    if norm(new_center(y,:)-center(y,:))<0.1
        k=k+1;
    end
end
if k==N
     break;
else
     center=new_center;
end
end
[m, n]=size(pattern);
 
%最后显示聚类后的数据
figure;
hold on;
for i=1:m
    if pattern(i,n)==1 
         plot(pattern(i,1),pattern(i,2),'r*');
         plot(center(1,1),center(1,2),'ko');
    elseif pattern(i,n)==2
         plot(pattern(i,1),pattern(i,2),'g*');
         plot(center(2,1),center(2,2),'ko');
    elseif pattern(i,n)==3
         plot(pattern(i,1),pattern(i,2),'b*');
         plot(center(3,1),center(3,2),'ko');
    elseif pattern(i,n)==4
         plot(pattern(i,1),pattern(i,2),'y*');
         plot(center(4,1),center(4,2),'ko');
    else
         plot(pattern(i,1),pattern(i,2),'m*');
         plot(center(4,1),center(4,2),'ko');
    end
end
grid on;


K-means聚类 —— matlab 1.简介 2.算法原理 3.实例分析 3.1 读取数据 3.2原理推导K均值过程 3.3 自带kmeans函数求解过程 完整代码 阅读详情

相关推荐

基于MATLAB的K-means聚类算法

实验数据说明 Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa(山鸢尾),Versicolour(杂色鸢尾),Virginica(维吉尼亚鸢尾))三个种类中的哪一类。 鸢尾花(iris)数据集,它共有4个属性列和一个品种类别列:sepal length(萼片长度)、sepal width(萼片宽度)、petal length(花瓣长度)、petal width (花瓣宽度),单位都是厘米。3个品种类别是Setosa、Ve

qq_540710991的博客 1万+

在Matlab实现Kmeans算法(每行代码带注释)

可用于矢量量化的kmeans算法

qq_49665818的博客 9858

看不懂打我系列之K-means聚类算法及其MATLAB实现

1、原理(理论) K-means属于无监督学习方法 K表示类别数,Means表示均值,K一般由人工来指定,或通过层次聚类(Hierarchical Clustering)的方法获得数据的类别数量作为选择K值的参考 选择较大的K可以降低数据的误差,但会增加过拟合的风险。 K-mean算法如下: (1)随机选取K个初始质心 (2)分别计算所有样本到这K个质心的距离 (3)如果样本离质心Si最近,那么这个样本属于Si点群;如果到多个质心的距离相等,则可划分到任意组中 (4)按距离对所有样本分完组之后,计算每个组的

qq_45881087的博客 1万+

k-means聚类算法(matlab实现)

k-means聚类算法是硬聚类算法的一种,即在n纬欧几里得空间把n个样本数据分为k类。首先根据用户要确定聚类的数目k,随机性的选取k个样本,把每一个对象成为一个种子,每一个种子代表一个类的中心,对其余的每个对象,采用近邻原则,将它们赋给最近的类。重新计算在每个类中对象的均值新形成的聚类中心,重复进行这个过程直到函数式收敛为止。K-means算法是一种无监督学习算法,用于将n个数据点划分为k个簇(cluster)。该算法的主要思想是将数据点划分为k个簇,使得同一簇内的数据点彼此相似,而簇间的数据点相差较大。

qq_40276082的博客 9801

Matlab实现简单K-means聚类算法

K-means算法简要思想:算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。 (1)适当选择k个类的初始中心; (2)在第k次迭代中,对任意一个样本,求其到各中心的距离,将该样本归到距离最短的中心所在的类; (3)利用均值等方法更新类的中心值; (4)对于所有的c个聚类中心,如果利用(2)(3)的迭代

山高路远坑很深的博客 1万+

Matlab实现k-means聚类算法

k-means是聚类中的一个十分经典的算法,具体的思想可以参考Andrew Ng的讲义《The k-means clustering algorithm》,这里不再赘述。   需要用到Matlab中的核心函数kmeans,具体用法可以参考Matlab命令: doc kmeans IDX = kmeans(X,k) [IDX,C] = kmeans(X,k) [IDX,C,sumd] = ...

叶子结点的专栏 2855

k-means聚类算法及matlab实现(简单实现)

k-means简介   k-means算法也称k均值算法,是一种常用的聚类算法。聚类算法是研究最多、应用最广的一种无监督学习算法。   聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”。通过这样的划分,每个簇里的样本可能有一些潜在的、共同的特质。   例如,对于给定样本集D={x1,x2,x3,…,xm}包含m个无标记样本,其中每个样本xi是一个n维的特征向量,聚类算法将样本集D划分为k个不相交的簇。其中,k个簇之间互不相交,且k个簇的并集为D。 k-means原理 k-mea

qq_43812171的博客 4万+

基于Matlab实现k-means聚类算法

K-means算法是一种基于贪心思想的无监督聚类算法,它能够将数据集划分为k个簇,并且每个数据点都属于距离自己最近的簇。K-means聚类算法是一种非常流行的无监督聚类算法,在实际应用中得到了广泛的运用。假设我们有一个二维数据集data,包含9个样本点,其中前6个样本点分别在三个不同的簇中,后三个样本点分别位于这三个簇中心点附近。从结果中可以看出,我们成功地将数据集划分为了k个簇,并且每个数据点都属于距离自己最近的簇。%对于数据集中的每个样本点,计算它与每个簇中心之间的距离,将它划分到距离最近的簇中。

2301_78484069的博客 1844

【聚类分析 】鲸鱼算法WOA-K-means++聚类优化算法Matlab实现

聚类分析作为一种无监督学习方法,在数据挖掘、模式识别等领域有着广泛的应用。其目标在于将数据样本划分成若干个不同的簇,使得簇内样本具有较高的相似度,而簇间样本的相似度较低。K-means算法作为一种经典的聚类算法,因其简单高效而备受关注。然而,K-means算法的性能严重依赖于初始聚类中心的选取,容易陷入局部最优解。为了克服这一缺点,K-means++算法被提出,它通过一种概率化的方式选择初始聚类中心,有效地提高了聚类结果的质量。然而,K-means++算法仍然存在收敛速度慢以及对参数K敏感的问题。

Matlab245的博客 896

MATLAB中K-Means聚类算法的实现指南

本文还有配套的精品资源,点击获取 简介:本文讨论了K-Means聚类算法(KMS)在MATLAB环境中的实现步骤和要点。KMS是无监督学习中的一项技术,通过将数据划分为K个簇,使数据点属于最近的簇中心。MATLAB的简洁代码适合快速开发和数据分析,能够通过初始化、分配数据、更新簇中心和迭代过程几个主要步骤来实现KMS算法。压缩包中的“SimpleKMeans.java”文件...

weixin_36288992的博客 2211

K-means聚类算法MATLAB实现与实战详解

策略描述适用场景多次运行多次执行K-means,选择最优结果对结果稳定性要求高的场景先验知识初始化利用已有知识设定初始中心具有明确先验信息的领域,如图像处理、文本聚类本章详细分析了K-means算法中的聚类中心初始化与数据点分配策略,包括随机初始化、K-means++初始化、欧氏距离、曼哈顿距离、余弦相似度等不同分配方法,并结合代码示例与流程图展示了其实现原理和优化策略。下一章将深入探讨聚类中心的更新机制与终止条件的设计。

weixin_42309599的博客 933

(Matlab实现)K-means算法及最佳聚类数目的确定

Kmeans算法中,K值所决定的是在该聚类算法中,所要分配聚类的簇的多少。Kmeans算法对初始值是⽐较敏感的,对于同样的k值,选取的点不同,会影响算法的聚类效果和迭代的次数。本文通过计算原始数据中的:CH值、DB值、Gap值、轮廓系数,四种指标来衡量K-means的最佳聚类数目,并使用K-means进行聚类,最后可视化聚类的结果。

qq_58146006的博客 1169

单相全桥逆变三种SPWM调制方式(单极/双极/倍频)到底怎么选?一篇讲透优缺点与选型

本文深入解析单相全桥逆变器中单极性、双极性和单极性倍频三种SPWM调制方式的原理与工程选型策略。通过对比开关损耗、谐波特性和驱动复杂度等关键指标,提供基于STM32的实战方案和选型框架,帮助工程师在新能源发电、电机驱动等应用中做出最优决策。

weixin_34046298的博客 802

kmeans聚类算法matlab代码,K-Means算法实现(Matlab)

K-Means算法具体内容可以参考我博客的相关文章,这里只使用Matlab对其进行实现,其他内容不多赘述K-Means算法1.生成随机样本点首先利用 mvnrnd 函数生成3组满足高斯分布的数据,每组数据都是100*2的矩阵,也就相当于生成300个在坐标轴上的样本点%% 第一组数据mu1=[0 0]; %均值S1=[0.1 0 ; 0 0.1]; %协方差data1=mvnrnd(mu1,S1...

weixin_35755823的博客 6589

数字后端流程--place

Floorplan完成后芯片的大致框架已经出现,万里长征已经迈出特别重要的第一步了,前面的步骤我们已经完成了io port,macro的摆放,现在core外只剩下std cell(标准单元)了,Place这一步就是要把std cell放进core里。看到密密麻麻的std cell也不用紧张,因为放std cell不用像macro手动一个一个摆,工具就可以帮我们完成大部分工作。虽然这一步的工作只有一个,但也不是只要Place完就能进行下一步的,衡量Place质量是否满足标准会通过以下几点判断。

qq_68400574的博客 771

SAP 屏幕增强:客户商主数据屏幕增强(KNA1、KNB1、KNVV)

本文介绍了SAP系统中针对客户主数据(KNA1、KNB1、KNVV)进行屏幕增强的具体实现方法。主要内容包括:1)在SPRO配置中创建新条目;2)通过SE80创建函数组和程序(LZKNA1TOP等);3)设置子屏幕9001并添加自定义结构字段;4)利用BADI(CUSTOMER_ADD_DATA等)实现数据交互逻辑。文章分别详细说明了针对客户主数据的一般数据(KNA1)、公司代码数据(KNB1)和销售数据(KNVV)三类不同数据的增强配置步骤,包括函数模块创建、屏幕设置和BADI方法调用等关键技术点。

SAP ABAP开发技能记录分享 1616

Matlab--k-means聚类算法实现

** Matlab–k-means聚类算法实现 ** 第一次在优快云写自己的博客,希望开门大吉 哈哈哈 也希望分享的内容大家能够喜欢。 本次创作内容为-----k-means聚类算法实现。 自己用matlab写的时候,遇到很多问题,一些常见matlab语法等等,查找很多博主分享的知识,获益许多,由此形成了这次的完整代码,运行成功的! 本次编写内容为: 编程实现k-means聚类算法,并将实验结果显示出来。 代码如下,也欢迎大家一起交流,共同学习和进步! E1 = [0,0]; %数学期望 sigma =

多敲代码! 4027

HDMI协议介绍(二)--DataIsland Packets

前文简单介绍了HDMI传输的三个周期:控制周期、DataIsland周期和Video周期。DataIsland传输音频和辅助数据,这些数据以Packet的形式传输。本文简单介绍DataIsland Packet。

SlamDunk的博客 5671
上一篇: C++一些基本概念总结【面向过程篇】——指针
下一篇: 几种查找算法总结与比较—顺序查找、有序查找、散列表查找
code_caq
博客等级 码龄11年 112粉丝 58原创
评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值