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

news2024/9/24 19:13:43

目录

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.coloradmin.cn/o/689335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java性能权威指南-总结18

Java性能权威指南-总结18 线程与同步的性能线程同步避免同步伪共享 线程与同步的性能 线程同步 避免同步 如果同步可以完全避免,那加锁的损失就不会影响应用的性能。 有两种一般性的方式可以应对。其一是在每个线程中使用不同的对象,这样访问对象时就…

Selenium教程__界面的刷新、后退、前进操作(4)

本文将介绍如何使用Selenium来实现界面的刷新、后退和前进操作,以便于测试、开发人员能够更好地控制和管理用户界面的交互行为。 通过学习本文内容,您将能够掌握Selenium中相关API的使用方法,并能够灵活地应用到您的项目中,从而提…

机器学习-搭建轻量级机器人模型

在自己的机器上部署一个机器人简直太酷啦,因为模型数据缘故,可能有时候回复会有一点点怪,不过不影响我们探索机器模型的学习,搭建安装完毕,大家就可自行学习源码啦。 这是启动后台的图片。 需要安装环境:p…

vue监听鼠标与键盘事件

mounted () {window.addEventListener(mousedown, this.handleMousedown)//监听鼠标按下window.addEventListener(mouseup, this.handleMouseup)//监听鼠标抬起window.addEventListener(keydown, this.handlekeydown)//监听键盘按下},methods: {// 鼠标按下事件handleMousedown…

GDAL 标记图像连接区域

文章目录 一、简介1.1原始算法1.2修改标记算法二、实现代码三、实现效果参考资料一、简介 1.1原始算法 标记图像连接区域的算法有很多,这里主要实现了一种基于扫描线的改进算法(Suzuki算法),原始算法使用了一种决策树策略,即对二进制图像b(x,y)进行重复传递,在前向和后向…

chatgpt赋能python:Python要点:从入门到精通

Python要点:从入门到精通 Python是一门高级编程语言,是一种解释型、面向对象、动态数据类型的语言。它的设计思想是“代码易读易写”,在数据科学、人工智能、自动化测试、Web开发等领域广泛应用。本文将从入门到精通的角度来介绍Python的要点…

模拟电路系列分享-电阻的选则

目录 概要 整体架构流程 技术名词解释 技术细节 1.阻值的选择 2.不能太小的原因 3.不能太大的原因 4.E系列选择 小结 概要 提示:这里可以添加技术概要 例如: 电阻(Resistor]是我们的老朋友了,从初中就认识。但到目前为止,我们却…

chatgpt赋能python:Python获取电脑IP:教你简单又快速的实现方式

Python获取电脑IP:教你简单又快速的实现方式 如果你是一名网络工程师或者Web开发者,那么获得电脑IP地址对你来说是一个常见的任务。而Python作为一种流行的脚本语言,也提供了多种方法来获取电脑的IP地址。下面我们将介绍三种Python获取电脑I…

深度生成模型系统的实现原理有哪些?未来的挑战是什么?

由于计算机性能的快速提升, 学习可观测样本的概率密度并随机生成新样本的生成模型成为热点。相比于需要学习条件概率分布的判别模型生成模型的训练难度大、模型结构复杂, 但除了能够生成新样本外, 生成模型在图像重构、缺失数据填充、密度估计、风格迁移和半监督学习等应用领域…

【因果图法和决策表】某软件的一个模块的需求规格说明书中描述:(1)年薪制员工:严重过失,扣年终风险金的4%;过失,扣年终风险金的2%。(2)非年薪制员工:严重过失,扣当月薪资的8%;过失,扣当月薪

题目: 某软件的一个模块的需求规格说明书中描述: (1)年薪制员工:严重过失,扣年终风险金的4%;过失,扣年终风险金的2%。 (2)非年薪制员工:严重过…

14.RocketMQ之高可用性机制

1.2 高可用性机制 RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。 Master和Slave的区别:在Broker的配置文件中,参数 brokerId的值为0表明这个Broker是Master,大于0表明这个Broker是 Slave,同时brokerRole参数也会说…

保证水库大坝安全需要做好哪方面的监测

水库安全监测是保证水库大坝安全的重要手段是确保水库大坝安全运行的基础也是做好水库安全管理的重要技术保障。根据《水库大坝安全管理条例》《水库大坝安全监测技术规范》等有关规定,对坝体变形、渗透、应力应变等进行监测,以掌握坝体、坝基和库岸的运…

css增加高斯模糊的效果

实现效果 关键代码 backdrop-filter 当你创造一个元素加上这个属性后,会使得这个元素后面的区域添加效果(如模糊或颜色偏移) background: rgba(0,0,0,.5);backdrop-filter: blur(10px);

MFC开发第二天 Windows计算器的开发,常用消息解析与处理

文章目录 相关概念陈述一、初始API汇总消息汇总 二、Windows计算器的开发三、常见的消息解析与处理附录 相关概念陈述 INT PTR是一个指向整数类型数据的指针。PTR是指针的缩写,INT是表示整数类型。因此,INT PTR表示指向整数类型的指针。 1、对话框弹出…

Ambari自动部署hadoop

1、Ambari介绍 Apache Ambari项目旨在通过开发用于配置,管理和监控Apache Hadoop集群的软件来简化Hadoop管理. Ambari提供了一个由RESTful API支持的直观,易用的Hadoop管理Web Ul。 Ambari使系统管理员能够: 提供Hadoop集群 Ambari提供了跨任意数量的主…

戴尔游匣笔记本Dell G16 7630原厂Win11系统重装,安装原装出厂OEM预装系统镜像,恢复出厂状态

DELL戴尔游匣笔记本电脑,Dell G16 7630原厂Windows11系统原装OEM预装系统镜像,恢复出厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、戴尔外星人控制中心等预装程序 链接:https://pan.baidu.com/s/10s7dFd1yHhUsgkKVS-No2A?…

数据库管理-第八十五期 19c OCM之路-准备与环境篇(20230626)

数据库管理 2023-06-26 第八十五期 19c OCM之路-准备与环境篇1 计划2 考试环境3 技巧和注意事项总结 第八十五期 19c OCM之路-准备与环境篇 从去年就有消息传出,OCM将从12c升级到19c,今年12c OCM停考,从业内大佬和OU处了解到其实今年3月30日…

JSP自定义标签【下】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于自定义标签的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 导读: 💡辉辉…

linux-2.6.22.6内核信号量、阻塞和费阻塞

信号量 1.所谓信号量也是资源共享条件下保护资源的一种手段,当定义一个信号量时,这个信号量就相当于一个互斥锁,只能属于一个进程,我们把之前同一设备同一时刻只能由一个进程打开的原子变量操作改成信号量。 代码如下&#xff1…

黑河学院ASP.NET程序设计大作业(1)--搭建页面

一、作业简介: 说明:我分到的是上海交通大学-生命科学技术学院 网址:https://life.sjtu.edu.cn/ 二、作业流程: 前台: 1.确定技术点(是自己搭建,还是用框架) 2.搭建首页、所有的静态页面&#x…