本博客是对虹膜识别中需要用到的K-means算法的学习。

一、聚类

聚类本身是无监督问题,实际上就是把已有的一部分数据,按照其相似度分为不同的簇,将相似度高的分为一簇,而相异度高的分为不同簇。

二、K-means算法的定义

Kmeans聚类算法算得上是最著名的聚类方法。K-means算法实际上是一个重复移动簇中心点的过程,把簇的中心点,移动到其包含成员的平均位置,然后重新划分其内部成员,多次重复此步骤,即可完成聚类。

关于k:

1)k表示簇的数量;

2)k-means可以自动分配样本到不同的簇,但是不能决定究竟要分几个簇;

3)k必须是一个比训练集样本数小的正整数;

4)有时,k的值是由问题内容指定的。例如,一个鞋厂有三种新款式,它想知道每种新款式都有哪些潜在客户,于是它调研客户,然后从数据里找出三类,k为3。也有一些问题没有指定聚类的数量,最优的聚类数量是不确定的。【1】

三、K-means的过程

这个图其实可以很好的表示K-means的过程【2】。

1)确定K值,这里是两类,及红色和蓝色两类,两个X号分别为两类的初始化中心点,记为C1,C2;

2)根据C1和C2所在位置,计算各个数据与C1、C2的距离,将所有数据分为蓝红两类,如图C;

3)在分完类后,在根据现在两个类的分布,分别计算现在两个类的中心点C1'和C2';

4)接着重复第二步,计算各个数据与与C1、C2的距离,将所有数据分为新的蓝红两类;

5)再重复第三步,再计算新的两个类的中心点C1''和C2'';

6)接着继续重复……

7)最终我们得到最终的结果,如图f,结束的条件是新的中心的位置和原来中心的位置的距离小于一个阈值(我们提前设置的,这时表示重新计算的中心的位置变化不大,趋于稳定,或者说收敛,可以认为我们进行的聚类已经达到期望的结果,算法终止);【】

四、要点讨论

1.K值的选择

1)由问题内容指定的,就像第一部分中举得例子一样

2)肘部法则

肘部法则会把不同k值的成本函数值画出来。随着k值的增大,平均畸变程度会减小;每个类包含的样本数会减少,于是样本离其重心会更近。但是,随着k值继续增大,平均畸变程度的改善效果会不断减低。kk值增大过程中,畸变程度的改善效果下降幅度最大的位置对应的k值就是肘部。为了让读者看的更加明白,下面让我们通过一张图用肘部法则来确定最佳的k值。【1】

根据上图数据明显可分成两类,即K选择2,因为从1→2的过程中平均畸变程度变化最大,而2→9的平均畸变程度很小;

3)

2.初始化中心

k个初始化的中心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个中心。如果仅仅是完全随机的选择,有可能导致算法收敛很慢。【2】

那么,我们怎么去选择呢?

1)常见的方法就是随机的选取初始中心,可以通过多次运行,每次使用一组不同的随机初始质心,然后选取具有最小SSE(误差的平方和)的簇集。这种策略简单,但是效果可能不好,这取决于数据集和寻找的簇的个数。【1】

2)第二种有效的方法是,取一个样本,并使用层次聚类技术对它聚类。从层次聚类中提取kk个簇,并用这些簇的质心作为初始质心。该方法通常很有效,但仅对下列情况有效:(1)样本相对较小,例如数百到数千(层次聚类开销较大);(2) kk相对于样本大小较小。【1】

tips:层次法(Hierarchicalmethods)先计算样本之间的距离。每次将距离最近的点合并到同一个类。然后,再计算类与类之间的距离,将距离最近的类合并为一个大类。不停的合并,直到合成了一个类。其中类与类的距离的计算方法有:最短距离法,最长距离法,中间距离法,类平均法等。比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离。【4】

3)随机地选择第一个点,或取所有点的中心作为第一个点。然后,计算所有点和第一个点的距离,选择离已经选取过的初始中心最远的点。使用这种方法,确保了选择的初始质心不仅是随机的,而且是散开的。但是,这种方法可能选中离群点。此外,求离当前初始质心集最远的点开销也非常大。为了克服这个问题,通常该方法用于点样本。由于离群点很少(多了就不是离群点了),它们多半不会在随机样本中出现。计算量也大幅减少。

3.距离的度量

常用的距离度量方法包括:欧几里得距离和余弦相似度。两者都是评定个体间距离大小的。

欧式距离计算公式:

余弦相似度相对复杂一点,这篇文章写得很清晰:https://www.cnblogs.com/dsgcBlogs/p/8619566.html

欧氏距离是最常见的距离度量,而余弦相似度则是最常见的相似度度量,很多的距离度量和相似度度量都是基于这两者的变形和衍生,所以下面重点比较下两者在衡量个体差异时实现方式和应用环境上的区别。【1】

从图上可以看出距离度量衡量的是空间各点间的绝对距离,跟各个点所在的位置坐标(即个体特征维度的数值)直接相关;而余弦相似度衡量的是空间向量的夹角,更加的是体现在方向上的差异,而不是位置。如果保持A点的位置不变,B点朝原方向远离坐标轴原点,那么这个时候余弦相似cosθ是保持不变的,因为夹角不变,而A、B两点的距离显然在发生改变,这就是欧氏距离和余弦相似度的不同之处。【1】

根据欧氏距离和余弦相似度各自的计算方式和衡量特征,分别适用于不同的数据分析模型:欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异;而余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分用户兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦相似度对绝对数值不敏感)。【1】

因为欧几里得距离度量会受指标不同单位刻度的影响,所以一般需要先进行标准化,同时距离越大,个体间差异越大;空间向量余弦夹角的相似度度量不会受指标刻度的影响,余弦值落于区间[-1,1],(因为夹角的值是0-180度)值越大,差异越小。【1】

从几何意义上来说,n维向量空间的一条线段作为底边和原点组成的三角形,其顶角大小是不确定的。也就是说对于两条空间向量,即使两点距离一定,他们的夹角余弦值也可以随意变化。感性的认识,当两用户评分趋势一致时,但是评分值差距很大,余弦相似度倾向给出更优解。举个极端的例子,两用户只对两件商品评分,向量分别为(3,3)和(5,5),这两位用户的认知其实是一样的,但是欧式距离给出的解显然没有余弦值合理。【1】

4.聚类效果评估

我们已经介绍过类的畸变程度的度量方法。本节为将介绍另一种聚类算法效果评估方法称为轮廓系数(Silhouette Coefficient)。轮廓系数是类的密集与分散程度的评价指标。它会随着类的规模增大而增大。彼此相距很远,本身很密集的类,其轮廓系数较大,彼此集中,本身很大的类,其轮廓系数较小。轮廓系数是通过所有样本计算出来的,计算每个样本分数的均值,计算公式如下:

a是每一个类中样本彼此距离的均值,b是一个类中样本与其最近的那个类的所有样本的距离的均值。

五、K-means算法优缺点

1.优点

1) 算法原理简单。需要调节的超参数就是一个k;

2) 具有出色的速度和良好的可扩展性;

2.缺点

1)K值有时不好确定;

2)该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的;

3)对噪音和异常点比较的敏感;

4)样本不均衡时,效果不佳;

参考文章:

【1】https://blog.csdn.net/u013719780/article/details/78413770

【2】https://www.cnblogs.com/pinard/p/6164214.html

【3】https://blog.csdn.net/weixin_38656890/article/details/80447548

【4】https://blog.csdn.net/andy_shenzl/article/details/83783469

尝试走一段很长的路,距离朝圣还剩 998 步

【图像算法朝圣之路二】虹膜识别1(K-means算法)相关推荐

  1. 【虹膜识别】+【开源代码】虹膜识别--步骤讲解及算法复现,虹膜表征:基于虹膜反映点的健康监测

    虹膜识别 项目目标 主要了解虹膜的使用 用于生物识别系统和开发用于提取显着特征的软件用于虹膜扫描的虹膜鉴定. 具体: •识别虹膜的显着特征以及如何使用它们来区分多种 扫描. •开发用于提取和显示给定虹 ...

  2. 【机器学习】机器学习从零到掌握之二 -- 教你实现K近邻算法

    本文是<机器学习从零到掌握>系列之第2篇 [机器学习]机器学习从零到掌握之一 -- 教你理解K近邻算法 伪代码如下: 对未知类别属性的数据集中的每个点一次执行以下操作: (1)计算已知类别 ...

  3. [opencv完整项目详解] 传统图像算法解决路标的检测和识别

    前言: 这是数字图像课程的大作业,老师要求不可以采用深度学习的方法检测和识别特定的路标,只能采用传统的图像算法提取特征从而检测出特定的车牌. 参考文章: https://blog.csdn.net/m ...

  4. 疫情下的防护——虹膜识别

    疫情下的又一层防护--虹膜识别 在新冠疫情的笼罩下,防护措施成为了重中之重.与此同时,给人脸识别和指纹识别等确认身份的用户带来难题--识别失效.因为一旦用户采取佩戴口罩.护目镜.帽子等防护方式,导致脸 ...

  5. 虹膜识别之路(一):深度学习现有CNN下的虹膜识别

    今天读了一篇IEEE paper:Iris Recognition With Off-the-Shelf CNN Features: A Deep Learning Perspective,在此做一些 ...

  6. c++ hough变换代码_基于Haar小波和Log-Gabor变换的虹膜识别方法

    在虹膜的识别研究方面,学者提出多种识别方法.DAUGMAN J提出使用二维Gabor变换提取虹膜特征[1]:谭铁牛等使用多通道Gabor滤波器提取虹膜特征[2-3]:LIM S等用二维小波对虹膜进行特 ...

  7. 虹膜识别论文5:DeepIrisNet2 2019年 学习心得

    DeepIrisNet2: Learning Deep-IrisCodes from Scratch for Segmentation-Robust Visible Wavelength and Ne ...

  8. 虹膜识别—DeepIrisNet2

    hello,这是鑫鑫鑫的论文分享站,今天分享的文章是DeepIrisNet2: Learning Deep-IrisCodes from Scratch for Segmentation-Robust ...

  9. [opencv完整项目详解] 传统图像算法解决路标的检测和识别(改进升级版)

    之前路标匹配[opencv完整项目详解] 传统图像算法解决路标的检测和识别 的一个改进版. 之前路标匹配存在的一个问题: 所有路标与模板的相似度都处于较高状态(基本都在50%以上),其主要原因就是虽然 ...

  10. 【项目实战-MATLAB】:基于机器学习的虹膜识别系统设计

    基于机器学习的虹膜识别系统设计 设计的虹膜识别系统流程图如图 1 所示,在图像的预处理过程中主要包括虹膜定位.虹膜区域提取.虹膜区域极坐标变换和归一化处理.最后采用SVM识别方法实现虹膜识别. 图1 ...

最新文章

  1. linux运维人员必会运维工具
  2. 练习: C#---函数(篮球弹起高度、等腰三角形)
  3. php.ini 米拓_图片无法上传问题“大集结”-米拓建站帮助中心
  4. 【数据分析】Python数据分析学习路线个人总结
  5. [TCP/IP] 三次握手过程中有哪些不安全性
  6. 如何用 Blazor 实现 Ant Design 组件库?
  7. Oracle常用小记
  8. 组合数(nyoj32)
  9. 简单的签到代码_签到功能,用 MySQL 还是 Redis ?
  10. 计算机组成原理mw,计算机组成原理 存储器
  11. 【图像分割】基于matlab粒子群优化T熵图像分割【含Matlab源码 286期】
  12. 救命稻草VirtualBox,失之交臂VMware—— 2者的guest OS对 恒通笔记本并口卡的支持
  13. 【基础知识】~ 建立时间/保持时间
  14. python 实例二:搬家具
  15. 上级目录,同级目录简写【../,./】
  16. 配音赚钱的软件有哪些 ?推荐以下这3个平台
  17. netstat -ano命令失效怎么办
  18. 沐风老师3dsMax手把手教系列:椅子建模(款式001)
  19. linux飞腾cpu,基于飞腾CPU+银河麒麟操作系统编译安装tensorflow
  20. 数据可视化笔记1 数据可视化简介(简史、分类、功能、目标)

热门文章

  1. 如何调用 “WINDOWS 图片和传真查看器”
  2. php毕业论文结论,科学网—如何写好学位论文的摘要和结论 - 王东升的博文
  3. 程序员不能说自己不行啊
  4. 你的选择,决定了你过怎样的生活
  5. oracle查询sql对应用户名,Oracle EBS-SQL (SYS-21):sys_用户名与人员对应关系查询.sql
  6. 计算机平面设计大专学校排名,平面设计学校排名哪些较好?
  7. android扁平化按钮图标,35个扁平化设计(Flat UI)图标UI Kit素材下载
  8. Ubuntu(20.04):设置DNS
  9. html5 vr 制作软件,Object2VR中文免费版
  10. 一套键鼠控制多台电脑操作——Synergy软件(windows环境)