机器学习(五) -- 无监督学习(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://www.mzph.cn/news/876110.shtml

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

相关文章

Python 教程(四):Python运算符合集

目录 专栏列表前言1. 算术运算符2. 比较运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 成员运算符7. 身份运算符总结 在前三篇教程中,我们学习了 Python 的基本语法和数据结构以及字符串的特性。本篇教程,我们将深入探讨 Python 中的运算符合集。 专栏…

transformers进行学习率调整lr_scheduler(warmup)

一、get_scheduler实现warmup 1、warmup基本思想 Warmup(预热)是深度学习训练中的一种技巧,旨在逐步增加学习率以稳定训练过程,特别是在训练的早期阶段。它主要用于防止在训练初期因学习率过大导致的模型参数剧烈波动或不稳定。…

搜维尔科技:Patchwork 3D-提高汽车设计的效率和创造力

提高汽车设计的效率和创造力 我们很高兴地宣布推出专为雷诺3DCommerce设计的突破性Blender插件。这款创新工具简化了将车辆配置从Patchwork 3D直接导入领先的免费 3D 建模软件Blender的过程。这款插件彰显了我们致力于提供定制解决方案以满足业务需求的承诺。 主要优点&#x…

使用图数据库Nebula Graph快速上手史上最大规模的中文知识图谱ownthink_v2教程(没写完,明天再写)

一、前言 本教程主要参考官方教程:使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink (nebula-graph.com.cn) 来带着大家一步一步复现实验内容。 本教程主要使用到的数据集: ownthink/KnowledgeGraphData: 史上最大规模1.4亿中文知识图谱…

photoshop学习笔记——选区3 快速选择工具

快速选择工具 W shift W 在3种快速选择工具之间切换 对象选择工具 photoshop CC中没有这个工具,利用AI,将款选中的对象快速的提取选区,测试了一下,选区制作的非常nice快速选择工具 跟磁性套索类似,自动识别颜色相似…

ClkLog:开源用户行为分析框架,让数据分析更轻松

ClkLog:开源用户行为分析框架,让数据分析更轻松 在数据驱动的时代,找到一个好用的用户行为分析工具真是难上加难。但是今天你有福了,开源免费的 ClkLog 就是你的不二选择!本文将为你详细介绍 ClkLog 的功能特点、技术架…

Spark RPC框架详解

文章目录 前言Spark RPC模型概述RpcEndpointRpcEndpointRefRpcEnv 基于Netty的RPC实现NettyRpcEndpointRefNettyRpcEnv消息的发送消息的接收RpcEndpointRef的构造方式直接通过RpcEndpoint构造RpcEndpointRef通过消息发送RpcEndpointRef Endpoint的注册Dispatcher消息的投递消息…

聚焦民生服务 助力企业发展 区块链应用加速落地

聚焦民生服务,助力企业发展,区块链应用正在加速落地。这一趋势体现了区块链技术在多个领域的广泛应用和深远影响。以下是对这一主题的详细分析: 一、区块链在民生服务中的应用 政务服务 数据共享与打通:区块链技术利用其分布式账…

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、…

自动化测试 - selenium 环境搭建

在进行自动化测试时,Selenium 是一个非常强大的工具,在使用前需要做一些环境准备。 1. 配置 Chromedriver 访问 Chrome 浏览器的官方网站(https://www.google.cn/chrome/),下载并安装 Chrome 浏览器。 接下来&#x…

html必知必会-html内嵌JavaScript和文件路径

文章目录 HTML JavaScriptHTML <script> 标签JavaScript 的简单示例HTML <noscript> 标签HTML 文件路径绝对文件路径相对文件路径总结 HTML JavaScript JavaScript 使 HTML 页面更具动态性和交互性。 示例 <!DOCTYPE html> <html> <body><…

自训练和增量训练word2vec模型

1、自己准备训练语料文件 根据自己的业务场景准备训练数据&#xff0c;比如用户在商城上的同购行为序列或同浏览行为序列。 我们希望通过自己训练业务相关的语料word2vec模型来获得词嵌入、词相关性查询等。 1.1 准备语料库文件 # 示例&#xff1a;准备自己的一个大规模的语…

RDMA通信4:MR(Memory Region, 内存区域)基本概念和作用

MR简介 RDMA通信中MR(Memory Region)指的是由RDMA软件层在内存中规划出的一片区域&#xff0c;用于存放收发的数据。IB协议中&#xff0c;用户在申请完用于存放数据的内存区域之后&#xff0c;都需要通过调用IB框架提供的API注册MR&#xff0c;才能让RDMA网卡访问这片内存区域…

2.1、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、前言 在 MATLAB 中进行绘图是一种非常常见且实用的操作&#xff0c;可以用来可视化数据、结果展示、分析趋势等。通过 MATLAB 的绘图功能&#xff0c;用户可以创建各种类型的图形&#xff0c;包括线图、散点图、柱状图、曲线图等&#xff0c;以及三维图形、动画等复杂的可视…

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

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

springboot在加了mapper之后报错

springboot在加了mapper之后报错 最后发现是spring boot版本不兼容&#xff0c;spring-boot-starter-parent换成3.0.5之后可以了

计算机基础-IO

一、裸机中的IO 我们先看下计算机的组成部分&#xff1a; 从图中我们很清楚的看到Input/Output 即为 IO&#xff0c;也就是计算机主机和外部设备进行信息的交换。 这种交换可能是磁盘IO也有可能是网络IO。 二、操作系统中的IO 操作系统分为内核态和用户态&#xff0c;且默认…

活动预告|8月3日 Streaming Lakehouse Meetup · Online 与你相约!

随着大数据分析技术的发展&#xff0c;越来越多的企业采用了数据湖架构。基于 Lakehouse 的架构优势&#xff0c;结合 Flink 的 Streaming 实时流处理能力&#xff0c;Flink 推出了新一代的“Streaming Lakehouse”技术。这一技术旨在能够让数据在湖上自由流动&#xff0c;为用…

js 习题 3

文章目录 绪论12345678910 求最长公共后缀111213 最大公约数1415结语 绪论 『虽有遗憾&#xff0c;绝不后悔。』—— 「古剑奇谭」 1 let buf"";process.stdin.on("readable",function(){let chunkprocess.stdin.read();if(chunk){bufchunk.toString();} …