图像聚类算法

news2024/9/20 14:40:51

什么是分类

分类
分类其实是从特定的数据中挖掘模式,作出判断的过程。
分类学习主要过程:
(1)训练数据集存在一个类标记号,判断它是正向数据集(起积极作用,不是垃圾短信), 还是负向数据集(起抑制作用,是垃圾短信);
(2)然后需要对数据集进行学习训练,并构建一个训练的模型;
(3)通过该模型对预测数据集进预测,并计算其结果的性能。
有些类型不区分正向和反向,比如,性别,男、女、其他(包含95种其他性别,阿美莉卡无奇不有,不知道是不是从佛罗里达传出去的)
这里要注意啊,咳咳,性别分类如果是依据某些标签(特征值,比如头发长短,性别特征)去做区分,那就是分类,如果是没有标签,依据数据共性去区分,那就是聚类了。

什么是聚类

聚类
从广义上说,聚类就是将数据集中在某些方面相似的数据成员放在一起。
一个聚类就是一些数据实例的集合,其中处于相同聚类中的数据元素彼此相似,但是处于不同聚类中的元素彼此不同。
由于在聚类中那些表示数据类别的分类或分组信息是没有的, 即这些数据是没有标签的 ,所以聚类通常被归为无监督学习(Unsupervised Learning)

引申一下有监督学习,半监督学习,无监督学习

区分有监督和无监督,就是看是否有监督(supervised)(这TM不是废话嘛!确实是废话),也就看输入数据是否有标签(label)。输入数据有标签,则为有监督学习(x,y),没标签则为无监督学习(x)。
举个栗子,在中学学习的时候,所有学习的终极目标就是考试,每次模考就是检测学习的一个过程,考的好与坏,都是有标准答案去判定的,这就是有监督学习

但是走上社会了,没有分数和答案的制约了,学习不论好坏,不论方向,这就是无监督学习

那么半监督呢?大学嘛,浪里个浪,大部分时间自由发挥,考前一周开始临时抱佛脚,直接开启super power模式,期末考过就行(60分万岁!!!)

聚类的目的也是把数据分类,但是事先是不知道如何去分的,完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。
在聚类的结论出来之前,完全不知道每一类有什么特点,一定要根据聚类的结果通过人的经验来分析,看看聚成的这一类大概有什么特点。
总之,聚类主要是"物以类聚",通过相似性把相似元素聚集在一起,它没有标签;而分类通过标签来训练得到一个模型,对新数据集进行预测的过程,其数据存在标签。

聚类样本间的属性

1. 有序属性:西瓜的甜度:0.1,0.5,0.9
2. 无序属性:性别:男,女,等(这个等字就很精髓了)
这里聚类就是根据样本共性来的,比如某些妹子比较emmmm,你懂的,那么可能就被分到男性里面了(想什么呢,我说的是短发,手动狗头)

聚类的常见算法

聚类算法分为三大类:

1. 原型聚类:
K均值聚类算法(K-Means,不是Timi~~~!
2. 层次聚类
3. 密度聚类

K-Means聚类

K-Means聚类是最常用的聚类算法,最初起源于信号处理,其目标是将数据点划分为K个类簇。 该算法的最大优点是简单、便于理解,运算速度较快,缺点是要在聚类前指定聚集的类簇数。 k-means算法是一种原型聚类算法。
k-means聚类算法的分析流程:
第一步,确定K值,即将数据集聚集成K个类簇或小组。
第二步,从数据集中随机选择K个数据点作为质心(Centroid)或数据中心。
第三步,分别计算每个点到每个质心之间的距离,并将每个点划分到离最近质心的小组。
第四步,当每个质心都聚集了一些点后,重新定义算法选出新的质心。(对于每个簇,计算其均值,即得到新的k个质心点)
第五步,迭代执行第三步到第四步,直到迭代终止条件满足为止(聚类结果不再变化)
上废话,直接少图:

在图像处理中,通过K-Means聚类算法可以实现图像分割、图像聚类、图像识别等操作。
我们通过K-Means可以将这些像素点聚类成K个簇,然后使用每个簇内的质心点来替换簇内所有的像素点,这样就能实现在不改变分辨率的情况下 量化压缩图像颜色,实现图像颜色层级分割。
优点:
1.是解决聚类问题的一种经典算法,简单、快速
2.对处理大数据集,该算法保持高效率
3.当结果簇是密集的,它的效果较好
缺点:
1.必须事先给出k(要生成的簇的数目)
2.对躁声和孤立点数据敏感

层次聚类

层次聚类 是一种很直观的算法。顾名思义就是要一层一层地进行聚类。
层次法(Hierarchicalmethods) 先计算样本之间的距离。每次将距离最近的点合并到同一个类。然后,再计算类与类之间的距离,将距离最近的类合并为一个大类。不停的合并,直到合成了一个类。其中类与类的距离的计算方法有:最短距离法,最长距离法,中间距离法,类平均法等。比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离。
层次聚类算法根据层次分解的顺序分为:自下底向上和自上向下,即 凝聚的层次聚类算法 分裂的层次聚 类算法( agglomerative和divisive) ,也可以理解为自下而上法(bottom-up)和自上而下法(top-down)。

自顶向下算法

Hierarchical K-means算法是“自顶向下”的层次聚类算法,用到了基于划分的聚类算法那K-means,算法思路如下:

1.首先,把原始数据集放到一个簇C,这个簇形成了层次结构的最顶层;

2.使用K-means算法把簇C划分成指定的K个子簇C_i,i = 1,2,…,k,形成一个新的层;

3.对于步骤2所生成的K个簇,递归使用K-means算法划分成更小的子簇,直到每个簇不能再划分(只包含一个数据对象)或者满足设定的终止条件。

Hierarchical K-means算法一个很大的问题是,一旦两个点在最开始被划分到了不同的簇,即使这两个点距离很近,在后面的过程中也不会被聚类到一起。

对于以上的例子,红色椭圆框中的对象聚类成一个簇可能是更优的聚类结果,但是由于橙色对象和绿色对象在第一次K-means就被划分到不同的簇,之后也不再可能被聚类到同一个簇。 

你在脑海,你在心田,你在天边

嗯哼,网抑云时间结束

自底向上算法

Agglomerative Clustering算法

相比于Hierarchical K-means算法存在的问题,Agglomerative Clustering算法能够保证距离近的对象能够被聚类到一个簇中,该算法采用的“自底向上”聚类的思路。

算法思路,对于数据集D,D={x_1,x_2,…,x_n}:

1.将数据集中的每个对象生成一个簇,得到簇列表C,C={c_1,c_2,…,c_n} a) 每个簇只包含一个数据对象:c_i={x_i};

2.重复如下步骤,直到C中只有一个簇: a) 从C中的簇中找到两个“距离”最近的两个簇:min⁡〖D(c_i,c_j)〗; b) 合并簇c_i和cj,形成新的簇c(i+j); c) 从C中删除簇c_i和cj,添加簇c(i+j)

簇间距离计算

在上面描述的算法中涉及到计算两个簇之间的距离,对于簇C_1和C_2,计算〖D(C_1,C〗_2),有以下几种计算方式:

单连锁(Single link)

 

两个簇之间最近的两个点的距离作为簇之间的距离,该方式的缺陷是受噪点影响大,容易产生长条状的簇。

全连锁(Complete link)

两个簇之间最远的两个点的距离作为簇之间的距离,采用该距离计算方式得到的聚类比较紧凑。

平均连锁(Average link)

两个簇之间两两点之间距离的平均值,该方式可以有效地排除噪点的影响。

 

Agglomerative算法示例

对于如下数据:

  1. 将A到F六个点,分别生成6个簇;

找到当前簇中距离最短的两个点,这里我们使用单连锁的方式来计算距离,发现A点和B点距离最短,将A和B组成一个新的簇,此时簇列表中包含五个簇,分别是{A,B},{C},{D},{E},{F},如下图所示;

2 . 找到当前簇中距离最短的两个点,这里我们使用单连锁的方式来计算距离,发现A点和B点距离最短,将A和B组成一个新的簇,此时簇列表中包含五个簇,分别是{A,B},{C},{D},{E},{F},如下图所示;

3 . 重复步骤二、发现{C}和{D}的距离最短,连接之,然后是簇{C,D}和簇{E}距离最短,依次类推,直到最后只剩下一个簇,得到如下所示的示意图:

4 .此时原始数据的聚类关系是按照层次来组织的,选取一个簇间距离的阈值,可以得到一个聚类结果,比如在如下红色虚线的阈值下,数据被划分为两个簇:簇{A,B,C,D,E}和簇{F}

Agglomerative聚类算法的优点是能够根据需要在不同的尺度上展示对应的聚类结果,缺点同Hierarchical K-means算法一样,一旦两个距离相近的点被划分到不同的簇,之后也不再可能被聚类到同一个簇,即无法撤销先前步骤的工作。

BIRCH算法

CURE算法

Chameleon变色龙算法

这三个放到后面单独出一期讲

层次聚类的优缺点
优点:
1,距离和规则的相似度容易定义,限制少;
2,不需要预先制定聚类数;
3,可以发现类的层次关系;
缺点:
1,计算复杂度太高;
2,算法很可能聚类成链状
K-Means 与层次聚类
每一种聚类方法都有其特定的数据结构,对于服从高斯分布的数据用K-Means来进行聚类效果会比较好。
而对于类别之间存在层结构的数据,用层次聚类会比较好。

拓展

密度聚类 DBSCAN
算法:
需要两个参数:ε (eps) 和形成高密度区域所需要的最少点数 (minPts)
它由一个任意未被访问的点开始,然后探索这个点的 ε-邻域,如果 ε-邻域里有足够的点,则建立一个新的聚类,否则这个点被标签为杂音。
注意,这个杂音点之后可能被发现在其它点的 ε-邻域里,而该 ε-邻域可能有足够的点,届时这个点会被加入该聚类中。
优点:
1. 对噪声不敏感;
缺点:
1. 聚类的结果与参数有很大的关系;
谱聚类
1. 根据数据构造一个 图结构(Graph) ,Graph 的每一个节点对应一个数据点,将相似的点连接起来,并且边的权重用于表示数据之间的相似度。把这个 Graph 用邻接矩阵的形式表示出来,记为 W 。
2. 把 W 的每一列元素加起来得到 N 个数,把它们放在对角线上(其他地方都是零),组成一个 N * N的矩阵,记为 D 。并令 L = D-W 。
3. 求出 L 的前 k 个特征值,以及对应的特征向量。
4. 把这 k 个特征(列)向量排列在一起组成一个 N * k 的矩阵,将其中每一行看作 k 维空间中的一个向量,并使用 K-means 算法进行聚类。聚类的结果中每一行所属的类别就是原来 Graph 中的节点亦即最初的N 个数据点分别所属的类别。
简单抽象谱聚类过程,主要有两步:
1. 构图,将采样点数据构造成一张网图。
2. 切图,即将第一步构造出来的按照一定的切边准则,切分成不同的图,而不同的子图,即我们对应的聚类结果。

差不多了,累了,溜了溜了,see u next time

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715249.html

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

相关文章

C++与JAVA中迭代器的不同

1.C迭代器 #include <iostream> #include <vector> using namespace std;int main() {vector<int> vec;for(int i 0; i < 10; i) vec.push_back(i);for(std::vector<int>::iterator it vec.begin(); it ! vec.end(); it) {cout << "…

以太网常见设备(五)

目录 一、网卡 二、中继器 三、集线器 四、网桥 五、2层交换机 六、路由器 七、网关 一、网卡 网卡&#xff0c;全称网络接口卡&#xff0c;有时也叫做网络适配器、网卡、LAN卡。是计算机连接网络的接口。 二、中继器 中继器是OSI模型第1层物理层面上延长网络的设备。其…

pdf怎样转换成ppt格式?分享简单快捷的方法!

PDF和PPT是两种常见的文件格式&#xff0c;它们在使用场景上有所不同。PDF适合单独阅读和查看&#xff0c;而PPT则更适合在多人演讲时进行演示。有时候我们需要将PDF文件转换为PPT格式&#xff0c;以便进行演示、分享或修改。这在教育培训行业尤其常见&#xff0c;教师经常需要…

01-基础入门-概念名词

基础入门-概念名词 基础入门-概念名词1、域名&#xff08;1&#xff09;什么是域名&#xff08;2&#xff09;在哪里注册域名&#xff08;3&#xff09;二级域名和多级域名&#xff08;4&#xff09;域名对安全测试的意义 2、DNS&#xff08;1&#xff09;什么是DNS&#xff08…

常用开发功能——批量文件导出

某天工作接到一个需求&#xff1a;批量导出场站的订单信息&#xff0c;一个场站一个Excel文档&#xff1b; 与单个文件导出的区别在于&#xff0c;单个导出一次性只导出一个文件&#xff0c;在输出流中写入这一个文件即可&#xff0c;那么如何一次性导出多个文件&#xff1f;难…

茶叶小程序怎么做

茶叶小程序商城是一个专为茶叶爱好者打造的购物平台&#xff0c;提供了一系列便利的功能&#xff0c;使用户能够轻松选购适合自己口味的优质茶叶。以下是该小程序商城的主要功能介绍&#xff1a; 1. 商品展示&#xff1a;在茶叶小程序商城中&#xff0c;用户可以浏览各种各样的…

点云滤波Filtering

直通滤波 就是设置一个x、y、z方向的一个取值范围&#xff0c;以过滤掉明显不在测试距离范围的点云&#xff1b;使用Intel RealSense或者激光雷达采集的数据&#xff0c;可设置一个x,y,z合理的范围&#xff0c;过滤掉我们不需要的点云。 pcl::PassThrough 是点云库&#xff08;…

4通道AD采集子卡模块有哪些推荐?

FMC134是一款4通道3.2GSPS&#xff08;2通道6.4GSPS&#xff09;采样率12位AD采集FMC子卡模块&#xff0c;该板卡为FMC标准&#xff0c;符合VITA57.4规范&#xff0c;可以作为一个理想的IO模块耦合至FPGA前端&#xff0c;16通道的JESD204B接口通过FMC连接器连接至FPGA的高速串行…

IDEA在已有项目中新建module

1.在已经新建的项目名上右击&#xff0c;选择New->Module。 2.Location选择项目地址&#xff0c;Type选择Maven&#xff0c;Language选择Java&#xff0c;Group输入com.组名&#xff08;包名&#xff09;&#xff0c;Artifact输入项目名&#xff0c;Java选择8&#xff0c;Pa…

Java中字符串与byte数组之间的相互转换

前言 java与其他语言编写的程序进行tcp/ip socket通讯时&#xff0c;通讯内容一般都转换成byte数组型&#xff0c;java在字符与数组转换也是非常方便的。下面跟我一起来了解一下字符串与byte之间转换的原理 原理 我们都知道&#xff0c;在Java里byte类型是占用1个字节&#…

【每日随笔】摩托车驾驶 ③ ( 科目三教学 | 起步 | 人行横道 | 掉头 | 停车 )

文章目录 一、科目三教学1、推车 ( 找准车辆停放位置 )2、上车前检查 ( 开始考试前准备 )3、科目三考试开始4、科目三路线介绍5、起步6、人行横道7、掉头8、停车 一、科目三教学 进去后 , ① 先起步 , ② 然后遇到人行横道 , ③ 再后掉头 , ④ 最后靠边停车 ; 1、推车 ( 找准车…

SpringSecurity_day3_授权管理

SpringSecurity和JWT SpingSecurity用于保护web安全,实现访问控制的功能,身份认证和授权操作,账号密码校验,使用token授权 JWT:可以实现跨域身份验证和授权,安全和方便 集成授权的操作流程 1.重写UserDetails中的方法getAuthorities 2.查询当前用户所有的权限信息,并返回Gr…

科技项目验收测试报告有什么注意事项和疑惑?

科技项目验收测试报告是一份重要的文件&#xff0c;用于评估科技项目的质量和可靠性&#xff0c;对项目的成功交付具有关键作用。在项目完成的最后阶段&#xff0c;通过对项目进行全面测试和评估&#xff0c;以确保项目符合预期的目标和需求&#xff0c;并满足用户的期望。 一…

π221N61 低功耗5.0kVrms 双向I²C隔离器 兼容Si8602AD-B-IS

π221N61荣湃深力科兼容IC接口的低功耗双 向隔离器&#xff0c;IC隔离器输入和输出采用二氧化硅(SiO2) 介质隔离&#xff0c;可阻断高电压并防止噪声电流进入控制侧&#xff0c;避 免电路干扰和损坏敏感器件。π221N61 是基于荣湃智能分压专利技术设计 的产品&#xff0c;与光电…

环卫工人儿子高考687分被多校争抢 父亲:就算贷款、卖房也会让他读下去

大家好&#xff01;我是老洪。 今天一早看到一则资讯。 广州一名环卫工人的儿子高考取得了687分的优异成绩&#xff0c;考入了上海交通大学。 真优秀。 据报道&#xff0c;清华大学、浙江大学、复旦大学、中科大等多所中国知名高校都曾亲自打电话向这位环卫父亲的儿子表示祝贺并…

【MySQL】不允许你不会使用子查询

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集&#xff01; &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指…

Web_php_unserialize

源码解析 依旧是反序化漏洞&#xff0c;本源码定义了一个Demo的类&#xff0c;里包含了__construct、__destruct()、__wakeup三个方法 简介&#xff1a; __construct()方法是在创建对象时&#xff0c;调用赋初值 __destruct()方法是在对象不再使用时自动调用&#xff0c;这里的…

Jest单元测试Vue项目实践

​ 做单元测试的优点&#xff1a; 1.减少bug避免低级错误 2.提高代码运行质量 3.快速定位问题 4.减少调试时间&#xff0c;提高开发效率 5.便于重构 Jest安装&#xff1a; npm install babel-jest jest jest-serializer-vue vue/test-utils vue/cli-plugin-unit-jest -D…

好用到飞起的新项目「GitHub 热点速览」

作者&#xff1a;HelloGitHub-小鱼干 虽然本周 GitHub 热榜都是一些熟悉的面孔&#xff0c;但还是有不少新开源的项目&#xff0c;比如受启发于 Stripe IDs 的 UUIDv7 扩展 typeid&#xff0c;相信有了它&#xff0c;数据标识问题就迎刃而解了。此外&#xff0c;还有刚开源就获…

Linux--自动化的构建项目:make、Makefile

make是一个命令 Makefile是一个文件 Makefile的构成&#xff1a; ①依赖关系 ②依赖方法 编写Malefile文件的最终目标是生成项目&#xff0c;换句话说就是&#xff0c;想让Makefile把我的源代码编译&#xff0c;自动形成可执行文件 示例&#xff1a; 注&#xff1a;.PHONY…