【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)

这篇具有很好参考价值的文章主要介绍了【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:K-means聚类算法

聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,聚类技术经常被称为无监督学习
k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。

二:实例分析

现有50个二维数据点如下图,使用K-Means算法将以下数据实现聚类。
【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)
结果展示:
【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)

三:原理与步骤

K-means算法是典型的基于距离(欧式距离、曼哈顿距离)的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。
K-mean算法步骤如下:

  1. 先定义总共有多少个簇类,随机选取K个样本为簇中⼼。
  2. 分别计算所有样本到随机选取的K个簇中⼼的距离。
  3. 样本离哪个中⼼近就被分到哪个簇中⼼。
  4. 计算各个中⼼样本的均值(最简单的⽅法就是求样本每个点的平均值)作为新的簇心。
  5. 重复2、3、4直到新的中⼼和原来的中⼼基本不变化的时候,算法结束。

算法结束条件:

  1. 当每个簇的质心,不再改变时就可以停止k-menas。
  2. 当循环次数达到事先规定的次数时,停止k-means

原理示意图:
【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)
简单小实例:
有以下6个点,初始随机选取两个点作为两个簇的簇中心(这里假设选取的是A3,A4),求最后的簇所属情况。
【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)
1️⃣:计算每个点到簇心的距离,将距离近的归为一类。
【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)
2️⃣:将红色对应的点和绿色对应的每个点分别求X,Y平均值,最为新的簇心。
【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)
3️⃣:计算每个点到新簇心的距离,继续将对应距离近的点归为一类。
【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)
4️⃣:由于关联点没有发生变化,所以之后的结果不会发生变化。停止计算
5️⃣:得结果红色簇:A1,A3,A5,紫色簇:A2,A4,A6。文章来源地址https://www.toymoban.com/news/detail-429474.html

四:Matlab代码以及详解

clc;clear;close all;
data(:,1)=[90,35,52,83,64,24,49,92,99,45,19,38,1,71,56,97,63,...
    32,3,34,33,55,75,84,53,15,88,66,41,51,39,78,67,65,25,40,77,...
    13,69,29,14,54,87,47,44,58,8,68,81,31];
data(:,2)=[33,71,62,34,49,48,46,69,56,59,28,14,55,41,39,...
    78,23,99,68,30,87,85,43,88,2,47,50,77,22,76,94,11,80,...
    51,6,7,72,36,90,96,44,61,70,60,75,74,63,40,81,4];
%50 * 1
figure(1)

scatter(data(:,1),data(:,2),'MarkerEdgeColor','r','LineWidth',2)
%% 原理推导K均值
[m,n]=size(data);%m = 50,n = 1;
cluster_num=4;%4个初始中心
cluster=data(randperm(m,cluster_num),:);%randperm(m,cluster_num)在前m中随机选取cluster_num个  %随机选取中心
%data函数  取数据用
epoch_max=1000;%最大次数
therad_lim=0.001;%中心变化阈值
epoch_num=0;
while(epoch_num<epoch_max)
    epoch_num=epoch_num+1;
    for i=1:cluster_num
    distance=(data-repmat(cluster(i,:),m,1)).^2;% 50 * 2  repmat扩展矩阵
    %.^2是矩阵中的每个元素都求平方,^2是求矩阵的平方或两个相同的矩阵相乘,因此要求矩阵为方阵
    distance1(:,i)=sqrt(sum((distance),2));%求行和
    %distance1(:,i)=sqrt(sum(distance'));% 默认求列和  1表示每一列进行求和,2表示每一行进行求和;
    %sqrt(sum(distance')) == 1 * 50
    %distance1 50 * 4 表示每个点距离第i个点的距离
    end
    [~,index_cluster]=min(distance1');%distance1' = 4 * 50,min 求列最值  index_cluster = 最小值所在行号  index_cluster = 1 * 50
    for j=1:cluster_num
    cluster_new(j,:)=mean(data(find(index_cluster==j),:));% 4 * 2  找到距离对应中心最近的点 横纵坐标各取平均值
    end
    if (sqrt(sum((cluster_new-cluster).^2))>therad_lim)
        cluster=cluster_new;
    else
        break;
    end
end
%% 画出聚类效果
figure(2)
%subplot(2,1,1)
a=unique(index_cluster); %找出分类出的个数
C=cell(1,length(a));%1 * 4的元胞
for i=1:length(a)
   C(1,i)={find(index_cluster==a(i))};
end
for j=1:cluster_num
    data_get=data(C{1,j},:);%从data中取每个类的点
    scatter(data_get(:,1),data_get(:,2),80,'filled','MarkerFaceAlpha',.6,'MarkerEdgeAlpha',.9);
    hold on
end
plot(cluster(:,1),cluster(:,2),'kp','LineWidth',2);%画出4个聚类中心
hold on
sc_t=mean(silhouette(data,index_cluster'));
title_str=['原理推导K均值聚类','  聚类数为:',num2str(cluster_num),'  SC轮廓系数:',num2str(sc_t)];
title(title_str)

到了这里,关于【聚类算法】带你轻松搞懂K-means聚类(含代码以及详细解释)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k-means聚类算法详解

    什么是特征向量? 用来描述样本点的一组数据,要和我们数学中的向量区别一下,本质来说就是个数组,数组中的每个元素代表从不同角度描述样本点的值。 K-means 是我们最常用的基于 欧式距离 的聚类算法,其认为两个目标的距离越近,相似度越大。 聚类就是对大量末知标

    2024年02月16日
    浏览(24)
  • 无涯教程-聚类算法 - K-Means

    K-均值聚类算法计算质心并进行迭代,直到找到最佳质心为止,它假定群集的数目是已知的,它也称为扁平聚类算法。通过算法从数据中识别出的簇数以K均值中的\\\" K\\\"表示。 在该算法中,将数据点分配给群集,以使数据点和质心之间的平方距离之和最小。应当理解,簇内的较

    2024年02月10日
    浏览(33)
  • 【g】聚类算法之K-means算法

    聚类算法是一种无监督学习方法,它将相似的数据样本划分为一组,同时将不相似的数据样本划分为另一组。这个过程由计算机自动完成,不需要任何人为的干预。 K-means算法是一种经典的聚类算法,它的主要思想是把数据集分成k个簇,每个簇包括距离其它各簇最近的若干个

    2024年02月08日
    浏览(31)
  • K-means++聚类算法(matlab实现)

    K-means++算法:K-means++算法是K-means算法的改进版,其在选择初始质心时采用了一种更加聪明的方法,能够有效地避免局部最优解。具体来说,K-means++算法的初始质心是根据距离数据点最远的原则来选择的,这样可以保证初始质心的分布更加广泛,从而使得算法更容易找到全局最

    2024年02月07日
    浏览(84)
  • 机器学习之K-means聚类算法

    目录 K-means聚类算法 算法流程 优点 缺点 随机点聚类 人脸聚类 旋转物体聚类 K-means聚类算法是一种无监督的学习方法,通过对样本数据进行分组来发现数据内在的结构。K-means的基本思想是将n个实例分成k个簇,使得同一簇内数据相似度高而不同簇之间数据相似度低。 K-means的

    2024年02月11日
    浏览(33)
  • K-means聚类算法原理及实现

    1.1概念 聚类分析,也称为分割分析或分类分析,可将样本数据分成一个个组(即簇)。同一簇中的对象是相似的,不同簇中的对象则明显不同。 Statistics and Machine Learning Toolbox™ 提供了几种聚类方法和相似性度量(也称为距离度量)来创建簇。此外,簇计算可以按照不同的计

    2024年03月18日
    浏览(33)
  • 四种确定K-means最佳聚类个数的方法(K-means++)——附代码

    目录 摘要: 1.K-means算法 2.Calinski-Harabasz Criterion(卡林斯基-哈拉巴斯指标,CH值) 3.Davies-Bouldin Criterion(戴维斯-博尔丁指标,DB值) 4.Gap Value(Gap值) 5.Silhouette Coefficient(轮廓系数) 6.基于Matlab的K-means聚类及最佳聚类数选取结果: 7.本文Matlab代码实现: Kmeans算法中,K值所决

    2024年01月17日
    浏览(35)
  • K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

      目录  一、概述 二、经典K-means算法 三、K-means++算法 四、ISODATA算法 六、数据集测试       在本篇文章中将对四种聚类算法(K-means,K-means++,ISODATA和Kernel K-means)进行详细介绍,并利用数据集来真实地反映这四种算法之间的区别。       首先需要明确的是上述四种算法都属

    2024年01月23日
    浏览(39)
  • 传统机器学习(三)聚类算法K-means(一)

    K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means基于欧式距离认为两个目标距离越近,相似度越大。 1.1.1 算法流程 (1)图a表达了初始的数据集, 假设k=2; (2)在图b中,随机选择两个k类的对应的类别质心,即图中的红色质

    2023年04月15日
    浏览(31)
  • K-means聚类算法原理、步骤、评价指标和实现

    1、聚类 聚类与分类不同,聚类分析分通过分析大量含有一定规律但杂乱数据,得到数据间内在的逻辑,将杂乱的数据按照所得的数据规律划分成不同的种类。K-measn、DBSCAN和层次是当前广泛使用的三种聚类方法。以下对三种方法进行分析,选择适合的聚类方法。 方法 K-means

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包