机器学习之K-means聚类算法

news/2024/5/20 7:02:00 标签: 聚类, 机器学习, 算法

目录

K-means聚类算法

算法流程

优点

缺点

随机点聚类

人脸聚类

旋转物体聚类


K-means聚类算法

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

算法流程

K-means的算法过程如下:

优点

K-means优点:

①是解决聚类问题的一种经典算法,简单、快速。

②对处理大数据集,该算法保持可伸缩性和高效率。

③当簇近似为高斯分布时,它的效果比较好。

缺点

K-means缺点:

①在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用。

②必须事先给出要生成的簇的数目k。

③对初值敏感,对于不同的初始值,可能会导致不同的结果。

④不适合发现非凸形状的簇或者大小差别很大的簇。

⑤对噪声和孤立点数据敏感。

随机点聚类

 

代码中的变量musigma定义了两个高斯分布的均值和标准差,用来生成三个不同的类别的样本数据。然后将这些样本数据合并在一个矩阵sample中。

接下来,代码定义了K值为3,表示将样本数据聚成3个类别。classSampleNumber表示每个类别的样本数量为100。color矩阵用于存储样本点的颜色信息,classColor定义了三个类别的颜色。

class向量用于存储每个样本点的类别标签,初始值为0。classCenter矩阵定义了初始的类别中心点的坐标。

之后的代码通过迭代更新类别中心点的坐标,使得样本点与其所属类别中心点的距离最小。具体的更新过程为:对每个样本点,计算其与三个类别中心点的距离,将其归到距离最近的类别,并更新该类别的样本数和下一次迭代的类别中心点坐标。

每次迭代完成后,代码通过绘制散点图展示了聚类结果。其中,三个类别的中心点使用实心圆点表示,不同类别的样本点使用不同符号和颜色进行标记。

代码最终会生成四张图,分别展示初始状态和三次迭代后的聚类结果。

mu=[0 0];
sigma=[1 1];
class1=mvnrnd(mu,sigma,10);
mu=[5 5];
class2=mvnrnd(mu,sigma,10);
mu=[10 10];
class3=mvnrnd(mu,sigma,10);
sample=[class1;class2;class3];

k=3;
sampleNumberAll=size(sample,1);
classSampleNumber=100;
color=zeros(sampleNumberAll,3);
classColor=[[255 0 0];[0 255 0];[0 0 255]];
class=zeros(1,k);
classCenter=[2 8;3 9;4 10];
figure(1);
hold on;
scatter(classCenter(:,1),classCenter(:,2),[],classColor,'filled');
scatter(sample(:,1),sample(:,2),'m');
for iterator=1:3
    nextCenter=[0 0;0 0;0 0];
    classNumber=[0 0 0];
    for i=1:sampleNumberAll
        distances=zeros(1,k);
        for j=1:k
            distances(j)=pdist2(sample(i,:),classCenter(j,:));
        end
        [~,index]=sort(distances);
        class(i)=index(1);
        classNumber(class(i))=classNumber(class(i))+1;
        nextCenter(class(i),:)=nextCenter(class(i),:)+sample(i,:);
    end
    for i=1:k
        if classNumber(i)~=0
            classCenter(i,:)=nextCenter(i,:)/classNumber(i);
        end
    end
    figure(iterator+1);
    scatter(classCenter(:,1),classCenter(:,2),[],classColor,'filled');
    hold on;
    for i=1:sampleNumberAll
        if class(i)==1
            scatter(sample(i,1),sample(i,2),'r','s');
        elseif class(i)==2
            scatter(sample(i,1),sample(i,2),'g','d');
        else
            scatter(sample(i,1),sample(i,2),'b','h');
        end
    end
end

人脸聚类

 

代码和随机生成点的差不多,不过有一个地方我研究了很久,那就是如何给每个点配上相应的照片,我之前都是一张张手贴上去的,这次努力研究了一把,终于实现自动配图。

figure(2);
scatter(classCenter(:,1),classCenter(:,2),[],classColor,'filled');
hold on;
for i=1:sampleNumberAll
    if class(i)==1
        scatter(sample(i,1),sample(i,2),'r','s','filled');
    elseif class(i)==2
        scatter(sample(i,1),sample(i,2),'g','d','filled');
    end
    hold on;
    picture=pictures(:,i);
    picture=reshape(picture,128,128);
    picture=imrotate(picture,180);
    colormap(gray(256));
    image('CData',picture,'XData',[sample(i,1)-150 sample(i,1)+150],'YData',[sample(i,2)-500+700 sample(i,2)+500+700]);
end

旋转物体聚类

实际上你也可以看出来,k-means适合聚一堆的凸形状的,像下面这种流形和条形的不凸的就没有办法聚的好。 


http://www.niftyadmin.cn/n/470486.html

相关文章

【计算机视觉】中科院发布Fast SAM,精度相当SAM,速度提升了50倍!

文章目录 一、导读二、介绍三、方法3.1 实例分割3.2 提示引导选择3.2.1 点提示3.2.2 框提示3.2.3 文本提示 四、实验结果五、不足之处六、结论 一、导读 SAM已经成为许多高级任务(如图像分割、图像描述和图像编辑)的基础步骤。然而,其巨大的…

设计模式-05.02-行为型-策略职责链

策略模式【常用】 策略模式。在实际的项目开发中,这个模式也比较常用。最常见的应用场景是,利用它来避免冗长的 if-else 或 switch 分支判断。不过,它的作用还不止如此。它也可以像模板模式那样,提供框架的扩展点等等。 策略模式…

YOLOv5、YOLOv7独家原创改进:独家首发最新原创XIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能、收敛速度和鲁棒性

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5、YOLOv7独家原创改进:独家首发最新原创XIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能、收敛速度和鲁棒性。 �…

和鲸社区数据分析每周挑战【第九十五期:奈飞股价预测分析】

和鲸社区数据分析每周挑战【第九十五期:奈飞股价预测分析】 文章目录 和鲸社区数据分析每周挑战【第九十五期:奈飞股价预测分析】一、前言1、背景描述2、数据说明3、数据集预览 二、数据读取和数据预处理三、历史股价数据可视化四、利用sklearn中LinearR…

python GUI工具之PyQt5模块,pyCharm 配置PyQt5可视化窗口

https://doc.qt.io/qt-5/qtwidgets-module.html https://doc.qt.io/qt-5/qt.html#AlignmentFlag-enum 一、简介 PyQt是Qt框架的Python语言实现,由Riverbank Computing开发,是最强大的GUI库之一。PyQt提供了一个设计良好的窗口控件集合,每一…

PostgreSQL13.1

目录 1. PostgreSQL简介1.1 PostgreSQL是什么?1.2 PostgreSQL数据库的优缺点是什么?1.2.1 PostgreSQL的主要优点如下:1.2.2 PostgreSQL的应用劣势如下: 1.3 PostgreSQL不同大版本之间的特性比较1.4OpenGauss与PostgreSQL的对比1.4…

【架构师基本功】高可用设计原则

文章目录 1. 备份和恢复机制2. 负载均衡1. 垂直扩展2. 水平扩展3. 使用负载均衡设备 3. 避免单点故障1. 使用冗余组件2. 使用热备份 4. 异地容灾1. 备份数据到异地2. 备份系统到异地3. 配置冗余系统 高可用性是指系统在遭受故障或异常情况时仍然能够保持其正常运行能力。在现代…

图片、文件资源服务器(minio服务器)

1.MinioConfig配置类 Configuration ConfigurationProperties(prefix "minio") Data public class MinioConfig {/*** minio部署的机器ip地址*/Value("${minio.endpoint}")private String endpoint;/*** minio使用的端口*/Value("${minio.port}"…