机器学习(五) -- 无监督学习(1) --聚类1

系列文章目录及链接

上篇:机器学习(五) -- 监督学习(7) --SVM2
下篇:机器学习(五) -- 无监督学习(1) --聚类2


前言

tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看的,可自行跳过。文章内容被“文章内容”删除线标记的,也可以自行跳过。“!!!”一般需要特别注意或者容易出错的地方。

本系列文章是作者边学习边总结的,内容有不对的地方还请多多指正,同时本系列文章会不断完善,每篇文章不定时会有修改。

由于作者时间不算富裕,有些内容的《算法实现》部分暂未完善,以后有时间再来补充。见谅!

文中为方便理解,会将接口在用到的时候才导入,实际中应在文件开始统一导入。


一、通俗理解及定义

1、什么叫聚类(What)

聚类(clustering):数据没有标签,将相似的样本自动分为一类(子集,簇,cluster)。

有监督VS无监督

 

 

2、聚类的目的(Why)

通过迭代的方式,将数据划分为K个不同的簇,并使得每个数据点与其所属簇的质心(聚类中心、中心点、均值点)之间的距离之和最小。

聚类方法:

基于划分(距离):K-means

基于层次:BIRCH  (Balanced Iterative Reducing and Clustering using Hierarchies)

基于密度:DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

基于网格:Statistical Information Grid(STING)算法

基于模型:统计和神经网络方法

3、怎么做(How)

K-means:

首先要知道将数据划分成多少类别 

  1. 随机设置K个特征空间内的点作为初始的聚类中心
  2. 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
  3. 接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
  4. 如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程
     

 聚类的结果是簇,评价方式是簇(类)内距离和簇(类)间距离,簇内距离越小越好,簇间距离越大越好

二、原理理解及公式

1、基本概念

聚类任务:根据某种相似性,把一组数据划分成若干个簇的过程。

问题:

  1. 相似性怎么定义!-------二、1.3、相似性度量
  2. 可能存在的划分!-------二、1.4、第二类Stirling数
  3. 若干个簇=有多少个簇?------(其中之一:二、2.3.1、“肘”方法 (Elbow method) — K值确定)

1.1、簇

簇:分组后每个组称为一个簇,每个簇的样本对应一个潜在的类别。样本没有类别标签,因此是聚类一种典型的无监督学习方法。

簇的条件:相同簇的样本之间距离较近;不同簇的样本之间距离较远。

明显分离的簇:每个点到同簇中任意点的距离比到不同簇中所有点的距离更近。

基于中心的簇:每个点到其簇中心的距离比到任何其他簇中心的距离更近。

基于邻近的簇:每个点到该簇中至少一个点的距离比到不同簇中任意点的距离更近。

基于密度的簇:簇是被低密度区域分开的高密度区域。

概念簇:簇中的点具有由整个点集导出的某种一般共同性质。(在两个环相交处的点属于两个环)

1.2、质心

机器学习中“质心”:所有数据的均值u通常被称为这个簇的“质心”(x求均值,y求均值,得到的这个点)

1.3、相似性度量

1.3.1、距离

距离度量具体可看:机器学习(五) -- 监督学习(1) -- k近邻

欧式距离,公式:

曼哈顿距离,,公式: 

1.3.2、余弦相似性

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。

1.3.3、Jaccord相似性

Jaccard系数主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具 体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。

eg:

1.4、第二类Stirling数

聚类问题:可能的划分

假设我们要把 n = 4个不同的数据点放入不相同 的 k = 2 个无差别的盒子里,有几种方案?

集合的一个划分,表示将n 个不同的元素拆 个集合的方案数, 记为S(n,k)

随着集合元素𝒏和子集个数𝒌的增加,方案数𝑆(𝑛,𝑘)呈爆炸式增长!!!

2、K-meas

2.1、理解

K-means 是我们最常用的基于距离的聚类算法,其认为两个目标的距离越近,相似度越大。

目标:最小化类内间距

K-means算法针对聚类所得簇划分最小化平方误差,平方误差刻画了簇内样本围绕均值向量的紧密程度,平方误差值越小则簇内样本相似度越高。

2.2、步骤

  1. 随机设置K个特征空间内的点作为初始的聚类中心
  2. 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
  3. 接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
  4. 如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程

 2.3、公式

对于给定数据x,以及簇的个数k:

c_i:第 i 个簇

m_i:第 i 个簇的中心

 SSE随着聚类迭代,其值会越来越小,直到最后趋于稳定

(如果质心的初始值选择不好,SSE只会达到一个不怎么好的局部最优解。)

2.3.1、“肘”方法 (Elbow method) — K值确定

  1.  对于n个点的数据集,迭代计算 k from 1 to n,每次聚类完成后计算每个点到其所属的簇中心的距离的平方和;
  2. 平方和是会逐渐变小的,直到k==n时平方和为0,因为每个点都是它所在的簇中心本身。
  3. 在这个平方和变化过程中,会出现一个拐点也即“肘”点,下降率突然变缓时即认为是最佳的k值。

在决定什么时候停止训练时,肘形判据同样有效,数据通常有更多的噪音,在增加分类无法带来更多回报时,我们停止增加类别。

2.3.2、轮廓系数法(Silhouette Coefficient)

 K-means性能指标评估--轮廓系数【机器学习(四) -- 模型评估(4)】

公式:S的范围在[-1,1],越大越好

a:样本 i 到同一簇内其他点不相似程度的平均值

b:样本 i 到其他簇的平均不相似程度的最小值

对于每一个样本
1、计算蓝1到自身类别的点距离的平均值a
2、计算蓝1分别到红色类别,绿色类别所有的点的距离,求出平均值b1, b2,取其中最小的值当做b
b>>a: 1完美
a>>b:-1最差

如果s小于0,说明a 的平均距离大于最近的其他簇。聚类效果不好
如果s越大,说明a的平均距离小于最近的其他簇。聚类效果好
轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优

超过0.1,说明聚类效果很好

轮廓系数API

sklearn.metrics.silhouette_score导入:
from sklearn.metrics import silhouette_score语法:
silhouette_score(X, labels)X:特征值labels:被聚类标记的目标值

2.4、eg:

step1:随机设置3个初始聚类中心

step2:每一个点根据到每个聚类中心的距离分类

step3:重新计算每个新的聚类中心

 step4:重复2、3步(如下3个点被重新分配),直到,聚类中心不在变化

2.5、K-means++

2.5.1、理解

K-means算法得到的聚类结果严重依赖与初始簇中心的选择,如果初始簇中心选择不好,就会陷入局部最优解,因此提出了K-means++算法,它改进了K-means算法初始中心点的选取。

核心思想是:再选择一个新的聚类中心时,距离已有聚类中心越远的点,被选取作为聚类中心的概率越大。

2.5.2、步骤
  1. 从数据集中随机选择第一个质心。
  2. 对于每个数据点x,计算其到已选择的所有质心的最短距离D(x)。
  3. 选择一个新的数据点作为下一个质心,选择的概率与D(x)成正比,即概率P(x) = D(x) / ΣD(x)。
  4. 重复步骤2和3,直到选择了K个质心。

这种选择策略确保了质心之间的分散性,从而提高了聚类效果。

2.5.3、eg:

 

3、K-Medoids(k-中心)

3.1、理解

        k-中心和k-均值很像,不同的是形心的更新选择,k-均值是通过求得均值进行更新形心的,而k-中心是随机选择k个对象作为初始的k个簇的代表点,反复用非代表点来代替代表点,直到找到误差平方和最小的那个点来作为数据中心点。这样划分方法是基于最小化所有对象与其参照点之间的相异度之和的原则来执行的,这是 k-medoids 方法的基础。

3.2、步骤

  1. 随机选择 k 个数据点作为初始聚类中心
  2. 将每个剩余的数据点分配在临近的聚类中心的类中当中去
  3. 每个类中计算每个数据点为聚类中心时的代价函数的值,选取最小值成为新的聚类中心
  4. 重复2、3过程,直到所有的聚类中心不再发生变化,或达到设定的最大迭代次数

4、层次聚类

4.1、理解

把每一个单个的观测都视为一个类,而后计算各类之间的距离,选取最相近的两个类,将它们合并为一个类。新的这些类再继续计算距离,合并到最近的两个类。如此往复,最后就只有一个类。然后用树状图记录这个过程,这个树状图就包含了我们所需要的信息。

4.2、方法:

  1. 凝聚的层次聚类:AGNES算法 (AGglomerative NESting)
     
  2. 分裂的层次聚类:DIANA算法 (DIvisive ANALysis)
     
  3. 层次聚类优化算法:CF-Tree(Cluster Feature Tree)、BIRCH算法 (平衡迭代削减聚类法)、CURE算法(使用代表点的聚类法)
 4.2.1、AGNES

采用自底向上的策略。

凝聚型层次聚类有多种变体,这些变体主要基于不同的距离度量方法和链结标准来定义。以下是一些常见的变体:(AGNES算法中簇间距离:)

最近邻链结(SL聚类)
        两个聚簇中最近的两个样本之间的距离(single-linkage聚类法);
        最终得到模型容易形成链式结构。

最远邻链结(CL聚类)
        两个聚簇中最远的两个样本的距离(complete-linkage聚类法);
        如果存在异常值,那么构建可能不太稳定。

平均链结(AL聚类)
        两个聚簇中样本间两两距离的平均值(average-linkage聚类法);
        两个聚簇中样本间两两距离的中值(median-linkage聚类法);

Ward链结(WL聚类)

        两个聚簇中样本合并后产生的方差增加值被用作这两个聚类之间的距离。

4.3、eg:

一组数据D={a,b,c,d,e},它们之间的距离矩阵为:

step1:每个样本都是一个类

step2:将最近的两个类合并为一个新的类,并重新计算类之间的距离然后更新距离矩阵:

step3:重复:选择距离最近的两个类合并为新的类:

step4:不断重复上述两个步骤,最终只剩下一个类的时候,停止:

5、密度聚类

5.1、理解

密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。

通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。

核心思想是:在数据空间中找到分散开的密集区域,简单来说就是画圈,其中要定义两个参数,一个是圈的最大半径,一个是一个圈里面最少应该容纳多少个点。

5.2、方法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)

5.3、eg:

step1:设定参数密度阈值N=3,也就是每个圈里必须满足3个点,才能称为一个簇,首先我们随机选取一些候选的核心点:

灰色点核心点的候选:

step2:以这些候选的核心点为圆心按照设定的半径画圆圈:

step3:如果圈内满足三个点,那就是一个簇,簇内点候选的核心点就是核心点:这些红色的点就是核心点,而灰色的点因为其圈内点数不满足阈值,所以不是核心点:

step4:合并重合的簇:

6、网格聚类

6.1、理解

将数据空间划分为网格单元,将数据对象映射到网格单元中,并计算每个单元的密度。根据预设阈值来判断每个网格单元是不是高密度单元,由邻近的稠密单元组成“类”。

6.2、方法

  1. CLIQUE (Clustering in QUEst)
     
  2. STING (Statistical Information Grid 统计信息网格)
     
  3. MAFIA (Merging of adaptive interval approach to spatial datamining 空间数据挖掘的自适应区间方法的合并)
     
  4. Wave Cluster (小波聚类)
     
  5. O-CLUSTER (orthogonal partitioning CLUSTERing 正交分区聚类)
     
  6. Axis Shifted Grid ClusteringAlgorithm(轴移动网格聚类算法)
     
  7. Adaptive Mesh Refinement (自适应网格细化)

6.3、步骤

  1. 将数据空间划分为有限数量的单元格;
  2. 随机选择一个单元格“𝑐”,𝑐不应该事先遍历;
  3. 计算“𝑐”的密度;
  4. 如果“𝑐”的密度大于阈值的密度:
    1. 将单元格“c”标记为新的聚类(cluster);
    2. 计算“c”所有邻居的密度;
    3. 如果相邻单元的密度大于阈值密度,将其添加到集群中,并且重复步骤4.2和4.3直到没有相邻单元的密度大于阈值密度
  5. 重复步骤2,3,4,直到遍历所有单元格

6.4、eg:

step1:选择一定宽度的格子来分割数据空间

step2:设置阈值为2,将相邻稠密的格子合并形成一个“类”

7、优缺点

7.1、K-means优缺点

7.1.1、优点:
  1. 属于无监督学习,无须准备训练集
  2. 原理简单,实现起来较为容易
  3. 结果可解释性较好
7.1.2、缺点:
  1. 需手动设置k值。 在算法开始预测之前,我们需要手动设置k值,即估计数据大概的类别个数,不合理的k值会使结果缺乏解释性
  2. 可能收敛到局部最小值, 在大规模数据集上收敛较慢
  3. 对于异常点、离群点敏感
  4. 非凸形状无法聚类

7.2、K-means++优点

  1. 减少局部最优解的风险:更大概率选择相距较远的初始质心,提高聚类质量。
  2. 理论保证:K-means++能够给出接近最优解的界。
  3. 效率:虽然初始化复杂度有所增加,但整体算法依然保持高效,尤其是对于大规模数据集。

7.3、K-Medoids优缺点

7.3.1、优势:
  1. 噪声鲁棒性比较好。(当存在噪音和孤立点时,比K-means效果好)

7.3.2、缺点:
  1. 运行速度较慢,计算质心的步骤时间复杂度是O(n^2)
  2. K-medoids 对于小数据集工作得很好, 但不能很好地用于大数据集

7.4、层次聚类优缺点

7.4.1、优点:
  1. 距离和规则的相似度容易定义,限制少
  2. 不需要预先制定聚类数
  3. 可以发现类的层次关系
7.4.2、缺点:
  1. 计算复杂度太高;
  2. 异常值也能产生很大影响;
  3. 算法很可能聚类成链状

7.5、密度聚类优缺点

7.5.1、优点:
  1. 不需要指定簇的个数;
  2. 可以对任意形状的稠密数据集进行聚类。相对的,K-Means之类的聚类算法一般只适用于凸数据集;
  3. 擅长找到离群点(检测任务);
  4. 只有两个参数𝜀和MinPts
  5. 聚类结果没有偏倚。K-Means之类的聚类算法初始值对聚类结果有很大影响。
7.5.2、缺点:
  1. 高维数据有些困难;
  2. Sklearn中效率很慢(数据削减策略);
  3. 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,用DBSCAN聚类一般不适合;
  4. 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值𝜀,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

7.6、网格聚类优缺点

7.6.1、优点:
  1. 网格聚类算法相对简单,易于实现和理解;
  2. 网格聚类算法可以有效地处理大规模数据,因为它可以通过网格结构将数据划分为多个小区域,从而减少计算量;
  3. 网格聚类算法可以自适应地调整簇的数量和大小,从而更好地适应不同的数据分布;
7.6.2、缺点:
  1. 网格聚类算法对于数据的形状和密度比较敏感,如果数据分布比较复杂或者存在噪声,可能会导致聚类效果不佳;
  2. 网格聚类算法需要手动设置一些参数,如网格大小、邻域半径等,这些参数的选择可能会影响聚类效果;
  3. 网格聚类算法可能会产生重叠的簇,这些簇的边界可能比较模糊,难以解释;

旧梦可以重温,且看:机器学习(五) -- 监督学习(7) --SVM2
欲知后事如何,且看:机器学习(五) -- 无监督学习(1) --聚类2

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

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

相关文章

Python酷库之旅-第三方库Pandas(048)

目录 一、用法精讲 171、pandas.Series.nlargest方法 171-1、语法 171-2、参数 171-3、功能 171-4、返回值 171-5、说明 171-6、用法 171-6-1、数据准备 171-6-2、代码示例 171-6-3、结果输出 172、pandas.Series.nsmallest方法 172-1、语法 172-2、参数 172-3、…

驾驭代码的无形疆界:动态内存管理揭秘

目录 1.:为什么要有动态内存分配 2.malloc和free 2.1:malloc 2.2:free 3.calloc和realloc 3.1:calloc 3.1.1:代码1(malloc) 3.1.2:代码2(calloc) 3.2:realloc 3.2.1:原地扩容 3.2.2:异地扩容 3.2.3:代码1(原地扩容) 3.2.3:代码2(异地扩容) 4:常见的动态内存的错误…

【算法】傅里叶变换

一、引言 傅里叶变换是一种在信号处理、图像处理、通信等领域中广泛应用的数学工具。它可以将信号从时域转换到频域,从而揭示信号的频率成分。 二、算法原理 傅里叶变换的基本思想是将一个时域信号分解为多个不同频率的正弦和余弦波的叠加。对于连续信号&#xff0c…

【轻量化神经网络的MCU部署/边缘计算:基于GD32H7】开源GD32AI-ModelZoo工具的完善与详细使用说明

本文档将对gd32ai-modelzoo中的使用方法进行更加细致的介绍。并对原博主提供的gd32ai-modelzoo部分代码进行了修改,使其可以更加顺利地运行。 原开源工程地址:https://github.com/HomiKetalys/gd32ai-modelzoo 原作者博客:https://mbb.eet-ch…

Springboot项目的行为验证码AJ-Captcha(源码解读)

目录 前言1. 复用验证码2. 源码解读2.1 先走DefaultCaptchaServiceImpl类2.2 核心ClickWordCaptchaServiceImpl类 3. 具体使用 前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目…

vue3前端架构---打包配置

最近看到几篇vue3配置项的文章,转载记录一下 Vue3.2 vue/cli-service 打包 chunk-vendors.js 文件过大导致页面加载缓慢解决方案-CSDN博客文章浏览阅读2k次,点赞8次,收藏9次。Vue3.2 vue/cli-service 打包 chunk-vendors.js 文件过大导致页…

java高级——Exception异常类基本解读

java高级——Exception异常类基本解读 前情提要文章介绍继承结构异常详解1. 异常的定义2. 异常的分类3.3 异常的处理机制3.3.1 try catch finally语句3.3.2 throw关键字3.3.3 throws关键字 4. 浅谈如何有效的避免异常的发生5. 自定义异常6. 常见的RuntimeException 总结 前情提…

我为何撰写有关人工智能和数据科学的文章

撰写人工智能文章的 6 大好处 「AI秘籍」系列课程: 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识AI 进阶:企业项目实战 可直接在橱窗里购买,或者到文末领取优惠后购买: 自…

C++ //练习 15.30 编写你自己的Basket类,用它计算上一个练习中交易记录的总价格。

C Primer(第5版) 练习 15.30 练习 15.30 编写你自己的Basket类,用它计算上一个练习中交易记录的总价格。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块: /********************…

数据结构 - 红黑树

文章目录 前言一、红黑树介绍1、红黑树的概念2、红黑树的性质 二、实现红黑树1、基本框架2、插入3、删除4、查找5、测试红黑树6、红黑树代码 三、红黑树性能四、AVL树和红黑树的差别 前言 红黑树是一种二叉搜索树,所以学习前需要学会基本的二叉搜索树,并…

X-AnyLabeling标注软件使用方法

第一步 下载 官方X-AnyLabeling下载地址 github:X-AnyLabeling 第二步 配置环境 使用conda创建新的虚拟环境 conda create -n xanylabel python3.8进入环境 conda activate xanylabel进入X-AnyLabeling文件夹内,运行下面内容 依赖文件系统环境运行环…

昇思MindSpore 应用学习-CycleGAN图像风格迁移互换

日期 心得 昇思MindSpore 应用学习-CycleGAN图像风格迁移互换(AI代码学习) CycleGAN图像风格迁移互换 模型介绍 模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络,来自论文 Unpaired Image-to-Image Trans…

数据中台 | 3分钟带你读懂数据中台的由来

1.数据中台产生的原因 数据中台的概念起源于中国阿里巴巴集团提出的“大中台,小前台”战略。这一理念的核心在于通过构建强大的中台体系,为前端的快速创新和个性化业务需求提供强有力的支持。具体到数据中台,其设计初衷是为了应对企业内部数…

如何解决Windows系统目录权限问题

目录 前言1. 为什么会出现权限问题2. 修改文件权限的步骤2.1 确定目标文件2.2 右键属性设置2.3 更改所有者2.4 修改权限2.5 确认修改 3. 替换文件3.1 拷贝新的文件3.2 验证替换结果 结语 前言 在Windows系统中,时常需要往C盘系统目录下拷贝或者替换文件。然而&…

Java面试还看传统八股文?快来看看这个场景题合集吧【附PDF】

以下就是这份面试场景文档↓ 这里有什么? ↓↓ 1.针对 2024 年面试行情的变化设计的面试场景题以及回答思路 2. 如何快速通过面试的详细攻略 3. 简历优化技巧 1.知己知彼才能百战百胜,如何做好面试前的准备工作 场景题答案以及更多场景题八股文一线大…

Spring Security学习笔记(二)Spring Security认证和鉴权

前言:本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 上一篇博客介绍了Spring Security的整体架构,本篇博客要讲的是Spring Security的认证和鉴权两个重要的机制。 UsernamePasswordAuthenticationFilter和BasicAuthenticationFilter是…

docker 安装单机版redis

把这三个放上去 修改成自己的 按照自己需求来 照图片做 vim redis.conf vim startRedis.sh mv startRedis.sh deployRedis.sh sh deployRedis.sh docker run --privilegedtrue \ --name dev.redis --restartalways \ --network dev-net \ -v ./config/redis.conf:/etc/r…

编译原理期末复习-按考点

编译原理期末复习-按考点 Ocean University of China 第一章 引论 翻译器、编译器、解释器 翻译器:把一种语言变成另外一种语言(语义等价) 编译器:翻译器的一种 解释器:不产生目标代码,解释执行源程序&a…

24年第三届钉钉杯大学生大数据挑战赛浅析

需要完整资料,请关注WX:“小何数模”! 本次钉钉杯大数据挑战赛的赛题已正式出炉,无论是赛题难度还是认可度,该比赛都是仅次于数模国赛的独一档,可以用于国赛前的练手训练。考虑到大家解题实属不易&#xf…

CentOS 7.x 的 YUM 仓库问题

背景 CentOS Linux 7 的生命周期(EOL)已经于 2024 年 6 月 30 日终止这意味着 CentOS 7.x 的官方镜像站点将不再提供服务,导致在使用 yum 安装或更新程序时可能会遇到 错误。本文将介绍如何解决这一问题,使得你可以继续在 CentOS…