‘壹’ 聚类(Clustering)
首先我们先来认识一下什么是聚类任务。
聚类是“无监督学习(unsupervised learning)”中重要的一种。其目标是:通过对无标记的训练样本学习,来揭示数据内在的性质以及规律,为进一步的数据分析做基础。聚类的结果是一个个的簇(Cluster)。所以来说,聚类通常作为其他学习算法的先导,比如在分类问题中,常常先做聚类,基于聚类的不同簇来进行分类模型的训练。
我们先来认识空中一下聚类算法涉及到两个基本问题:性能度量 & 距离计算。后面我们再具体讲解聚类的经典算法。
由于聚类算法是无监督式学习,不依赖于样本的真实标记。所以聚类并不能像监督学习例如分类那样,通过计算对错(精确度/错误率)来评价学习器的好坏或者作为学习器的优化目标。一般来说,聚类有两类性能度量指标:外部指标和内部指标
所谓外部,是将聚类结果与某个参考模型的结果进行比较, 以参考模型的输出作为标准,来评价聚类的好坏。 假设聚类给出的结果为 λ,参考模型给出的结果是λ*,则我们将样本进行两两配对,定义:
内部指标不依赖任何外部模型,直接对聚类的结果进行评估。直观来说: 簇内高内聚,簇间低耦合 。定义:
我们从小学的距离都是欧氏距离。这里介绍几种其他的距离度量方法:
这里对于无需属性我们用闵可夫斯基距离就不能做,需要用VDM距离进行计算,对于离散属性滑磨的两个取值a和b,定义:
所以在计算两个样本的距离时候斗让山,将两种距离混合在一起进行计算:
原型聚类即“基于原型的聚类(prototype-based clustering)”,原型指的是样本空间中具有代表性的点(类似于K-Means 选取的中心点)。通常情况下来说,算法现对原型进行初始化,然后对原型进行迭代更新求解。而不同的初始化形式和不同的求解方法,最终会得到不同的算法。常见的 K-Means 便是基于簇中心来实现聚类;混合高斯聚类则是基于簇分布来实现聚类。下面我们具体看一下几种算聚类算法:
K-Means 聚类的思想十分简单, 首先随机指定类中心,根据样本与类中心的远近划分类簇;然后重新计算类中心,迭代直至收敛。 实际上,迭代的过程是通过计算得到的。其根本的优化目标是平方误差函数E:
其中 u_i 是簇 C_i 的均值向量。直观上来看,上式刻画了簇内样本围绕簇均值向量(可以理解为簇中心)的紧密程度,E值越小,则簇内样本的相似度越高。
具体的算法流程如下:
书上还给出了基于具体西瓜样本集的计算过程说明。可以看一下。
LVQ 也是基于原型的聚类算法,与K-Means 不同的是, LVQ使用样本的真实类标记来辅助聚类 。首先,LVQ根据样本的类标记,从各类中分别随机选出一个样本作为该类簇的原型,从而形成了一个 原型特征向量组 ,接着从样本集中随机挑选一个样本,计算其与原型向量组中每个向量的距离,并选取距离最小的向量所在的类簇作为该样本的划分结果,再与真实类标比较:
可以看到,K-Means 和 LVQ 都是以类中心作为原型指导聚类,而高斯混合聚类则采用 高斯分布 来描述原型。现在假设每个类簇中的样本都服从一个多维高斯分布,那么空间中的样本可以看做由K个多维高斯分布混合而成。
多维高斯的概密为:
密度聚类是基于密度的聚类,它从个样本分布的角度来考察样本之间的 可连接性 ,并基于可连接性(密度可达)不断拓展疆域(类簇)。最着名的就是DBSCAN(Density-Based Spatial Clustering of Applications with Noise),首先我们需要明白以下概念:
层次聚类试图在不同层次对数据集进行划分,从而形成属性的聚类结构。
这里介绍一种“自底向上”结合策略的 AGNES(AGglomerative NESting)算法。假设有N个待聚类的样本,AGNES算法的基本步骤如下:
可以看出其中最关键的一步就是 计算两个类簇的相似度 ,这里有几种度量方法:
(1)单链接(singal-linkage):取类间最小距离
‘贰’ 建议收藏!10 种 python 聚类算法完整操作示例
聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。相反,最好探索一系列聚类算法以及每种算法的不同配置。在本教程中,你将发现如何在 python 中安装和使用顶级聚类算法。完成本教程后,你将知道:
聚类分析,即聚类,是一项无监督的机器学习任务。它包括自动发现数据中的自然分组。与监督学习(类似预测建模)不同,聚类算法只解释输入数据,并在特征空间中找到自然组或群集。
群集通常是特征空间中的密度区域,其中来自域的示例(观测或数据行)比其他群集更接近群集。群集可以具有作为样本或点特征空间的中心(质心),并且可以具有边界或范围。
聚类可以作为数据分析活动提供帮助,以便了解更多关于问题域的信息,即所谓的模式发现或知识发现。例如:
聚类还可用作特征工程的类型,其中现有的和新的示例可被映射并标记为属于数据中所标识的群集之一。虽然确实存在许多特定于群集的定量措施,但是对所识别的群集的评估是主观的,并且可能需要领域专家。通常,聚类算法在人工合成数据集上与预先定义的群集进行学术比较,预计算法会发现这些群集。
有许多类型的聚类算法。许多算法在特征空间中的示例之间使用相似度或距离度量,以发现密集的观测区域。因此,在使用聚类算法之前,扩展数据通常是良好的实践。
一些聚类算法要求您指定或猜测数据中要发现的群集的数量,而另一些算法要求指定观测之间的最小距离,其中示例可以被视为“关闭”或“连接”。因此,聚类分析是一个迭代过程,在该过程中,对所识别的群集的主观评估被反馈回算法配置的改变中,直到达到期望的或适当的结果。scikit-learn 库提供了一套不同的聚类算法供选择。下面列出了10种比较流行的算法:
每个算法都提供了一种不同的方法来应对数据中发现自然组的挑战。没有最好的聚类算法,也没有简单的方法来找到最好的算法为您的数据没有使用控制实验。在本教程中,我们将回顾如何使用来自 scikit-learn 库的这10个流行的聚类算法中的每一个。这些示例将为您复制粘贴示例并在自己的数据上测试方法提供基础。我们不会深入研究算法如何工作的理论,也不会直接比较它们。让我们深入研究一下。
在本节中,我们将回顾如何在 scikit-learn 中使用10个流行的聚类算法。这包括一个拟合模型的例子和可视化结果的例子。这些示例用于将粘贴复制到您自己的项目中,并将方法应用于您自己的数据。
1.库安装
首先,让我们安装库。不要跳过此步骤,因为你需要确保安装了最新版本。你可以使用 pip Python 安装程序安装 scikit-learn 存储库,如下所示:
接下来,让我们确认已经安装了库,并且您正在使用一个现代版本。运行以下脚本以输出库版本号。
运行该示例时,您应该看到以下版本号或更高版本。
2.聚类数据集
我们将使用 make _ classification ()函数创建一个测试二分类数据集。数据集将有1000个示例,每个类有两个输入要素和一个群集。这些群集在两个维度上是可见的,因此我们可以用散点图绘制数据,并通过指定的群集对图中的点进行颜色绘制。这将有助于了解,至少在测试问题上,群集的识别能力如何。该测试问题中的群集基于多变量高斯,并非所有聚类算法都能有效地识别这些类型的群集。因此,本教程中的结果不应用作比较一般方法的基础。下面列出了创建和汇总合成聚类数据集的示例。
运行该示例将创建合成的聚类数据集,然后创建输入数据的散点图,其中点由类标签(理想化的群集)着色。我们可以清楚地看到两个不同的数据组在两个维度,并希望一个自动的聚类算法可以检测这些分组。
已知聚类着色点的合成聚类数据集的散点图接下来,我们可以开始查看应用于此数据集的聚类算法的示例。我已经做了一些最小的尝试来调整每个方法到数据集。3.亲和力传播亲和力传播包括找到一组最能概括数据的范例。
它是通过 AffinityPropagation 类实现的,要调整的主要配置是将“ 阻尼 ”设置为0.5到1,甚至可能是“首选项”。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,我无法取得良好的结果。
数据集的散点图,具有使用亲和力传播识别的聚类
4.聚合聚类
聚合聚类涉及合并示例,直到达到所需的群集数量为止。它是层次聚类方法的更广泛类的一部分,通过 AgglomerationClustering 类实现的,主要配置是“ n _ clusters ”集,这是对数据中的群集数量的估计,例如2。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,可以找到一个合理的分组。
使用聚集聚类识别出具有聚类的数据集的散点图
5.BIRCHBIRCH
聚类( BIRCH 是平衡迭代减少的缩写,聚类使用层次结构)包括构造一个树状结构,从中提取聚类质心。
它是通过 Birch 类实现的,主要配置是“ threshold ”和“ n _ clusters ”超参数,后者提供了群集数量的估计。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,可以找到一个很好的分组。
使用BIRCH聚类确定具有聚类的数据集的散点图
6.DBSCANDBSCAN
聚类(其中 DBSCAN 是基于密度的空间聚类的噪声应用程序)涉及在域中寻找高密度区域,并将其周围的特征空间区域扩展为群集。
它是通过 DBSCAN 类实现的,主要配置是“ eps ”和“ min _ samples ”超参数。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,尽管需要更多的调整,但是找到了合理的分组。
使用DBSCAN集群识别出具有集群的数据集的散点图
7.K均值
K-均值聚类可以是最常见的聚类算法,并涉及向群集分配示例,以尽量减少每个群集内的方差。
它是通过 K-均值类实现的,要优化的主要配置是“ n _ clusters ”超参数设置为数据中估计的群集数量。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,可以找到一个合理的分组,尽管每个维度中的不等等方差使得该方法不太适合该数据集。
使用K均值聚类识别出具有聚类的数据集的散点图
8.Mini-Batch
K-均值Mini-Batch K-均值是 K-均值的修改版本,它使用小批量的样本而不是整个数据集对群集质心进行更新,这可以使大数据集的更新速度更快,并且可能对统计噪声更健壮。
它是通过 MiniBatchKMeans 类实现的,要优化的主配置是“ n _ clusters ”超参数,设置为数据中估计的群集数量。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,会找到与标准 K-均值算法相当的结果。
带有最小批次K均值聚类的聚类数据集的散点图
9.均值漂移聚类
均值漂移聚类涉及到根据特征空间中的实例密度来寻找和调整质心。
它是通过 MeanShift 类实现的,主要配置是“带宽”超参数。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,可以在数据中找到一组合理的群集。
具有均值漂移聚类的聚类数据集散点图
10.OPTICSOPTICS
聚类( OPTICS 短于订购点数以标识聚类结构)是上述 DBSCAN 的修改版本。
它是通过 OPTICS 类实现的,主要配置是“ eps ”和“ min _ samples ”超参数。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,我无法在此数据集上获得合理的结果。
使用OPTICS聚类确定具有聚类的数据集的散点图
11.光谱聚类
光谱聚类是一类通用的聚类方法,取自线性线性代数。
它是通过 Spectral 聚类类实现的,而主要的 Spectral 聚类是一个由聚类方法组成的通用类,取自线性线性代数。要优化的是“ n _ clusters ”超参数,用于指定数据中的估计群集数量。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,找到了合理的集群。
使用光谱聚类聚类识别出具有聚类的数据集的散点图
12.高斯混合模型
高斯混合模型总结了一个多变量概率密度函数,顾名思义就是混合了高斯概率分布。它是通过 Gaussian Mixture 类实现的,要优化的主要配置是“ n _ clusters ”超参数,用于指定数据中估计的群集数量。下面列出了完整的示例。
运行该示例符合训练数据集上的模型,并预测数据集中每个示例的群集。然后创建一个散点图,并由其指定的群集着色。在这种情况下,我们可以看到群集被完美地识别。这并不奇怪,因为数据集是作为 Gaussian 的混合生成的。
使用高斯混合聚类识别出具有聚类的数据集的散点图
在本文中,你发现了如何在 python 中安装和使用顶级聚类算法。具体来说,你学到了:
‘叁’ 数据挖掘干货总结(四)--聚类算法
本文共计2680字,预计阅读时长七分钟
聚类算法
一 、 本质
将数据划分到不同的类里,使相似的数据在同一类里,不相似的数据在不同类里
二 、 分类算法用来解决什么问题
文本聚类、图像聚类和商品聚类,便于发现规律,以解决数据稀疏问题
三 、 聚类算法基础知识
1. 层次聚类 vs 非层次聚类
– 不同类之间有无包含关系
2. 硬聚类 vs 软聚类
– 硬聚类:每个对象只属于一个类
– 软聚类:每个对象以某个概率属于每个类
3. 用向量表示对象
– 每个对象用一个向量表示,可以视为高维空间的一个点
– 所有对象形成数据空间(矩阵)
– 相似度计算:Cosine、点积、质心距离
4. 用矩阵列出对象之间的距离、相似度
5. 用字典保存上述矩阵(节省空间)
D={(1,1):0,(1,2):2,(1,3):6...(5,5):0}
6. 评价方法
– 内部评价法(Internal Evalution):
• 没有外部标准,非监督式
• 同类是否相似,跨类是否相异
DB值越小聚类效果越好,反之,越不好
– 外部评价法(External Evalution):
• 准确度(accuracy): (C11+C22) / (C11 + C12 + C21 + C22)
• 精度(Precision): C11 / (C11 + C21 )
• 召回(Recall): C11 / (C11 + C12 )
• F值(F-measure):
β表示对精度P的重视程度,越大越重视,默认设置为1,即变成了F值,F较高时则能说明聚类效果较好。
四 、 有哪些聚类算法
主要分为 层次化聚类算法 , 划分式聚类算法 , 基于密度的聚类算法 , 基于网格的聚类算法 , 基于模型的聚类算法等 。
4.1 层次化聚类算法
又称树聚类算法,透过一种层次架构方式,反复将数据进行分裂或聚合。典型的有BIRCH算法,CURE算法,CHAMELEON算法,Sequence data rough clustering算法,Between groups average算法,Furthest neighbor算法,Neares neighbor算法等。
凝聚型层次聚类 :
先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。
算法流程:
1. 将每个对象看作一类,计算两两之间的最小距离;
2. 将距离最小的两个类合并成一个新类;
3. 重新计算新类与所有类之间的距离;
4. 重复2、3,直到所有类最后合并成一类。
特点:
1. 算法简单
2. 层次用于概念聚类(生成概念、文档层次树)
3. 聚类对象的两种表示法都适用
4. 处理大小不同的簇
5. 簇选取步骤在树状图生成之后
4.2 划分式聚类算法
预先指定聚类数目或聚类中心,反复迭代逐步降低目标函数误差值直至收敛,得到最终结果。K-means,K-modes-Huang,K-means-CP,MDS_CLUSTER, Feature weighted fuzzy clustering,CLARANS等
经典K-means:
算法流程:
1. 随机地选择k个对象,每个对象初始地代表了一个簇的中心;
2. 对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;
3. 重新计算每个簇的平均值,更新为新的簇中心;
4. 不断重复2、3,直到准则函数收敛。
特点:
1.K的选择
2.中心点的选择
– 随机
– 多轮随机:选择最小的WCSS
3.优点
– 算法简单、有效
– 时间复杂度:O(nkt)
4.缺点
– 不适于处理球面数据
– 密度、大小不同的聚类,受K的限制,难于发现自然的聚类
4.3 基于模型的聚类算法
为每簇假定了一个模型,寻找数据对给定模型的最佳拟合,同一”类“的数据属于同一种概率分布,即假设数据是根据潜在的概率分布生成的。主要有基于统计学模型的方法和基于神经网络模型的方法,尤其以基于概率模型的方法居多。一个基于模型的算法可能通过构建反应数据点空间分布的密度函数来定位聚类。基于模型的聚类试图优化给定的数据和某些数据模型之间的适应性。
SOM 神经网络算法 :
该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。
SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。
算法流程:
1. 网络初始化,对输出层每个节点权重赋初值;
2. 将输入样本中随机选取输入向量,找到与输入向量距离最小的权重向量;
3. 定义获胜单元,在获胜单元的邻近区域调整权重使其向输入向量靠拢;
4. 提供新样本、进行训练;
5. 收缩邻域半径、减小学习率、重复,直到小于允许值,输出聚类结果。
4.4 基于密度聚类算法
只要邻近区域的密度(对象或数据点的数目)超过某个阈值,就继续聚类,擅于解决不规则形状的聚类问题,广泛应用于空间信息处理,SGC,GCHL,DBSCAN算法、OPTICS算法、DENCLUE算法。
DBSCAN:
对于集中区域效果较好,为了发现任意形状的簇,这类方法将簇看做是数据空间中被低密度区域分割开的稠密对象区域;一种基于高密度连通区域的基于密度的聚类方法,该算法将具有足够高密度的区域划分为簇,并在具有噪声的空间数据中发现任意形状的簇。
4.5 基于网格的聚类算法
基于网格的方法把对象空间量化为有限数目的单元,形成一个网格结构。所有的聚类操作都在这个网格结构(即量化空间)上进行。这种方法的主要优点是它的处理 速度很快,其处理速度独立于数据对象的数目,只与量化空间中每一维的单元数目有关。但这种算法效率的提高是以聚类结果的精确性为代价的。经常与基于密度的算法结合使用。代表算法有STING算法、CLIQUE算法、WAVE-CLUSTER算法等。
‘肆’ 如何提升自底向上的聚合聚类算法的计算效率
提升自底向上的聚合聚类算法的计算效率的方法:
1、通过计算各类别中数据之间的相似度,最终创建一棵有层次的嵌套聚类树。
2、起核心思想,在不同层次上思考问题。
3、计算数据集的相似矩阵。
4、假设每个样本点为一个簇类。
‘伍’ 聚类算法 - EM
EM(Expectation-Maximum)算法也称期望最大化算法。EM算法是最常见的隐变量估计方法,在机器学习中有极为广泛的用途,例如常被用来学习高斯混合模型(Gaussian mixture model,简称GMM)的参数;隐式马尔科夫算法(HMM)、LDA主题模型的变分推断等等。
极大似然估计,只是一种概率论在统计学的应用誉拦,它是参数估计的方法之一。说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值。极大似然估计是建立在这样的思想上:已知某个参数能使这个样本出现的概率最大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。
极大似然估计的核心关键就是对于一些情况,样本太多,无法得出分布的参数值,可以采样小样本后,利用极大似然估计获取假设中分布的参数值。
由于EM算法目前还未能理解具体的推导过程岁族,因此暂时留下资料,为之后举例算法过程做参考。
这是 文字传送门 ,
这是 视频传送门,这是一个老师讲的课,非常推荐 ,
这是 简易动画展示传送门 。
(1)算法计算结果稳定、准确
(2)EM算法自收敛,既不需要事先设定类别,也不需要数据间的两两比较合并等操作
(1)对初始化数据敏感
(2)EM算法计算复杂,收敛较慢,不适于大规模数据集和高维数据
(3)当所要优化的乎虚弊函数不是凸函数时,EM算法容易给出局部最优解,而不是全局最优解
‘陆’ 层次聚类缺点如何避免
层次聚类是一种常用的聚类算法,但是它也存在一些缺点。其中最主要的缺点是计算复杂度高,时间复杂度为O(n^3),空间复杂度为O(n^2)。这意味着当数据量很大时,层次聚类算法的计算成本会非常高,甚至无法承受。此外,层次聚类算法还容易受到噪声的影响,因为它是一种基于距离的聚类算法,所以如果数据中存在异常值或噪声,就会导致聚类结果不准确。
为了避免层次聚类算法的缺点,可以采取以下措施:
1. 优化算法:可以通过优化算法来降低计算复杂度,例如使用快速聚类算法或基于密度的聚类算法。
2. 数据预处理:在进行聚类之前,可以对数据进行预处理,例如去除异常值或噪声,以提高聚类的准确性。
3. 选择合适的距离度量方法:距离度量方法对聚类结果的影响非常大,因此需要选择合适的距离度量方法,例如备毕谈欧几里得距离、曼哈顿距离或余弦相似度等。
4. 选择合适的聚类方法:除了层次聚类算法,还有很多其他的聚类算法可供选择,例如K-means聚类、DBSCAN聚类等,可以根据具体情况选择合适的聚类算法。
总之,避免层次聚类算仿碰法的缺点需要综合考虑多个因素,包括算法优化、数据预处理、距离度量方法和聚类方法等。只有在选择合适的方法和策略的基础上,才能得到准确、高效的聚类结果数消。
‘柒’ 机组聚类线性化方法
机组聚类线性化方法是一种将多个发电机组进行聚类,并将聚类后的发电机组线性化的方法。这种方法可以用于电力系统的稳定性分析和控制设计。下面是将该方法的步骤简述:
1. 首先,旁誉山使用聚类算法对发电机组进行聚类。聚类算法可以是k-means、层次聚类等。
2. 对每个产生的聚类,使用最小二乘法拟合线性模型。
3. 对每个聚类的线性模型进行合并,得到整个电力系统的线性模型。
4. 使用得到的线性虚毕模型进行分析或控制。
需要注意的是,该方法的有效性和精度受到所使用运中的聚类算法和拟合方法的影响,因此在具体实现中需要进行细致的优化和调整。
‘捌’ 用于数据挖掘的聚类算法有哪些,各有何优势
聚类方法的分类,主要分为层次化聚类算法,划分式聚类算法,基于密度的聚类算法,基于网格的聚类算法,基于模型的聚类算法等。
而衡量聚类算法优劣的标准主要是这几个方面:处理大的数据集的能力;处理任意形状,包括有间隙的嵌套的数据的能力;算法处理的结果与数据输入的顺序是否相关,也就是说算法是否独立于数据输入顺序;处理数据噪声的能力;是否需要预先知道聚类个数,是否需要用户给出领域知识;算法处理有很多属性数据的能力,也就是对数据维数是否敏感。
.聚类算法主要有两种算法,一种是自下而上法(bottom-up),一种是自上而下法(top-down)。这两种路径本质上各有优势,主要看实际应用的时候要根据数据适用于哪一种,Hierarchical methods中比较新的算法有BIRCH主要是在数据体量很大的时候使用;ROCK优势在于异常数据抗干扰性强……
关于数据挖掘的相关学习,推荐CDA数据师的相关课程,课程以项目调动学员数据挖掘实用能力的场景式教学为主,在讲师设计的业务场景下由讲师不断提出业务问题,再由学员循序渐进思考并操作解决问题的过程中,帮助学员掌握真正过硬的解决业务问题的数据挖掘能力。这种教学方式能够引发学员的独立思考及主观能动性,学员掌握的技能知识可以快速转化为自身能够灵活应用的技能,在面对不同场景时能够自由发挥。点击预约免费试听课。
‘玖’ 聚类算法(上)06
这篇文章的整体排版主要是根据个人的博客来哒,如果感兴趣的话可以去我的自己搭建的个人博客看这篇 文章 。
聚类算法很多,所以和讲回归算法一样,分成了上下,上中主要讲了传统的K-Means算法以及其相应的优化算法入K-Means++,K-Means||和Canopy等。下中主要讲了另外两种的思路的聚类算法,即层次聚类和密度聚类。
聚类算就是怼大量未知标注的数据集,按照数据 内部存在的数据特征 将数据集 划分为多个不同的类别 ,使类别内的数据比较相似,类别之间的数据相似度比较小,属于 无监督学习 。
从定义就可以看出,聚类算法的关键在于计算样本之间的 相似度 ,也称为 样本间的距离 。
说到聚类算法,那肯定核心就是计算距离的公式了,目前常用的有以下几种。
闵可夫斯基距离(Minkowski) :公式2.1
KL距离(相对熵) :
思考下条件熵的定义,简单的来说就是在放生一件事情的时候,发生另一件事的概率。公式如下公式2.7.
注:这里书的概率不是实指概率,而是熵表达的含义。这个公式其实就是条件熵的公式。
杰卡德相似系数(Jaccard) :
这个很好理解,它的核心就是使用两个集合的交集和并集的比率来代表两者的相似度,也就是说重合的越多越相似。公式如下,公式2.8.
Pearson相关系数 :
这个就是考研数学中的相关系数,表达就是两者之间的想关系,所以直接拿来用就好了,公式如下公式2.9。
给定一个有M个对象的数据集,构建一个具有k个簇的模型,其中k<=M。满足 以下条件:
基本思想:
对于给定的类别数目k,首先给定初始划分,通过迭代改变样本和簇的隶属关系,使的每次处理后得到的划分方式比上一次的好,即 总的数据集之间的距离和变小了
K-means的核心算法如下:
再循环中的第二步,我们移动了中心点的位置,把中心点移到了隶属于该中心点类别的所有样本的中间,并使用样本的均值作为位置。这样子看似是拍脑袋想的移动策略,其实是可以推导出来的。正如聚类算法思想所指出的,我们要让所有的点到自己的分类的中心点的欧几里得距离最小,所以我们设置目标放称为公式4.1,公式中的1/2是为了之后求导运算方便。我们为了让目标函数尽可能的小,所以使用了之前一直在使用的思考方式,对其使用梯度下降算法,求导后得到公式4.2,之后令其等于0,就得到了公式4.3。
最后这个看似不错的算法,其实有着不小的缺点,那就是 初值敏感 。我们来仔细想一想,如果两个不小心随机生成的初值落到了一个类别中,两者的距离还特别近,这中情况下就很难正确分类了。除此之外,由于移动策略中使用的是均值,也就是说如果集合中含有非常大的误差点的话,这样子会是中心点的设置偏离正确点很远,所以很多时候我们改用 中值来更新中心点 ,这就是我们说的K-Mediods聚类,即K中值聚类。
总结下K-means算法
优点:
由于K-Means对初始中心点非常敏感,我们这里就尝试着通过二分法弱化初始中心点。这种算法的具体步骤如下:
我们在这个算法中提到了SSE,这个可以是簇内所有样本点,到其中心点的距离的总和,代表着簇内的点是不是高度相关。计算公式如下公式4.4。
可以看出在这种算法下,很好的避开了,两个中心点都在一起的情况。
K-Means++做的改善,是直接对初始点的生成位置的选择进行优化的,他的初始点生成策略如下:
Canopy属于一种“粗略地”聚类算法,简单的来说就是,不那么追求自动获得最优解,而是引入了一种人为规定的先验值进行聚类,具体步骤如下:
注:Canopy算法得到的最终结果的值,聚簇之间是可能存在重叠的,但是不会存在 某个对象不属于任何聚簇的情况
显然,这种算法虽然快,但是很难生成满足我们应用的模型,所以通常我们将它作为解决K-Means初值敏感的方案,他们合在一起就是Canopy+K-Means算法。
顺序就是先使用Canopy算法获得K个聚类中心,然后用这K个聚类中心作为K-Means算法。这样子就很好的解决了K-Means初值敏感的问题。
Mini Batch K-Means算法是K-Means算法的一种优化变种,采用小规模的数据子集,来减少计算时间。其中采用小规模的数据子集指的是每次训练使用的数据集是在训练算法的时候随机抽取的数据子集。Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果效果只是略差于标准K-Means算法。
它的算法步骤如下:
聚类算法的衡量标准有很多,包括均一性、完整性、V-measure、调整兰德系数(ARI ,Adjusted Rnd Index)、调整互信息(AMI,Adjusted Mutual Information)以及轮廓系数等等。
均一性:一个簇中只包含一个类别的样本,则满足均一性。其实也可以认为就是正确率,即每个聚簇中正确分类的样本数占该聚簇总样本数的比例和。其公式如下公式5.1。
完整性:同类别样本被归类到相同簇中,则满足完整性。每个聚簇中正确分类的样本数占该类型的总样本数比例的和,通俗的来说就是,我们已分类类别中,分类正确的个数。
其公式如下,公式5.2:
在实际的情况中,均一性和完整性是往往不能兼得的,就好像抓特务时的矛盾一样,到底是保证每个抓的人都是特务,还是宁可错抓也不放过一个特务,之间的取舍很难把握。所以再一次贯彻,鱼和熊掌不可兼得,我们就加权,于是得到的就是V-measure,其公式如下公式5.3:
兰德系数(RI,Rand index) ,我用中文看了不少讲兰德系数的博客,其中的文字说明几乎都是相同的,对个人的理解帮助不是特别大,于是用英文查的。最终理解了这个系数的参数的意思,想看英文说明的,个人觉得还挺好懂的参考 这里 。以下是我个人的讲解。
首先,将原数据集中的元素进行两两配对形成一个新的数据集,我们称之为S数据集。这时候,我们将原数据集,根据两种不同的策略分别划分成r份和s份,并对这两个数据集命名为X和Y。在这里我们可以看出,X和Y的元素是相同的,只是他们的划分方式不同。
接下来我们来思考,S数据集中,每个元素中的两个样本,在X和Y中只有两种可能,就是两个样本都在一个子集中,或者不在一个子集中,那么对于S中的一个元素,只有四种可能性。
接下来引入, 调整兰德系数(ARI,Adjusted Rnd Index) ,ARI取值范围 ,值越大,表示聚类结果和真实情况越吻合。从广义的角度来将,ARI是衡量两个数据分布的吻合程度的,公式5.5如下:
调整互信息,整体的流程很像ARI,AMI则是对MI进行调整。而MI是使用信息熵来描述的。那么互信息表示了什么呢,首先先看下 维基网络的定义 :
之前我们说到的衡量指标都是有标签的,这里的轮廓系数则是不包含标签的评价指标。
‘拾’ K-Means聚类算法
所谓聚类算法是指将一堆没有标签的数据自动划分成几类的方法,属于无监督学习方法,这个方法要保证同一类的数据有相似的特征,如下图所示:
根据样本之间的距离或者说是相似性(亲疏性),把越相似、差异越小的样本聚成一类(簇),最后形成多个簇,使同一个簇内部的样本相似度高,不同簇之间差异性高。
相关概念:
K值 :要得到的簇的个数
质心 :每个簇的均值向量,即向量各维取平均即可
距离量度 :常用欧几里得距离和余弦相似度(先标准化)
算法流程:
1、首先确定一个k值,即我们希望将数据集经过聚类得到k个集合。
2、从数据集中随机选择k个数据点作为质心。
3、对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合。
4、把所有数据归好集合后,一共有k个集合。然后重新计算每个集合的质心。
5、如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),我们可以认为聚类已经达到期望的结果,算法终止。
6、如果新质心和原质心距离变化很大,需要迭代3~5步骤。
K-Means采用的启发式方式很简单,用下面一组图就可以形象的描述:
上图a表达了初始的数据集,假设k=2。在图b中,我们随机选择了两个k类所对应的类别质心,即图中的红色质心和蓝色质心,然后分别求样本中所有点到这两个质心的距离,并标记每个样本的类别为和该样本距离最小的质心的类别,如图c所示,经过计算样本和红色质心和蓝色质心的距离,我们得到了所有样本点的第一轮迭代后的类别。此时我们对我们当前标记为红色和蓝色的点分别求其新的质心,如图d所示,新的红色质心和蓝色质心的位置已经发生了变动。图e和图f重复了我们在图c和图d的过程,即将所有点的类别标记为距离最近的质心的类别并求新的质心。最终我们得到的两个类别如图f。
坐标系中有六个点:
1、我们分两组,令K等于2,我们随机选择两个点:P1和P2
2、通过勾股定理计算剩余点分别到这两个点的距离:
3、第一次分组后结果:
组A:P1
组B:P2、P3、P4、P5、P6
4、分别计算A组和B组的质心:
A组质心还是P1=(0,0)
B组新的质心坐标为:P哥=((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)
5、再次计算每个点到质心的距离:
6、第二次分组结果:
组A:P1、P2、P3
组B:P4、P5、P6
7、再次计算质心:
P哥1=(1.33,1)
P哥2=(9,8.33)
8、再次计算每个点到质心的距离:
9、第三次分组结果:
组A:P1、P2、P3
组B:P4、P5、P6
可以发现,第三次分组结果和第二次分组结果一致,说明已经收敛,聚类结束。
优点:
1、原理比较简单,实现也是很容易,收敛速度快。
2、当结果簇是密集的,而簇与簇之间区别明显时, 它的效果较好。
3、主要需要调参的参数仅仅是簇数k。
缺点:
1、K值需要预先给定,很多情况下K值的估计是非常困难的。
2、K-Means算法对初始选取的质心点是敏感的,不同的随机种子点得到的聚类结果完全不同 ,对结果影响很大。
3、对噪音和异常点比较的敏感。用来检测异常值。
4、采用迭代方法, 可能只能得到局部的最优解,而无法得到全局的最优解 。
1、K值怎么定?
答:分几类主要取决于个人的经验与感觉,通常的做法是多尝试几个K值,看分成几类的结果更好解释,更符合分析目的等。或者可以把各种K值算出的 E 做比较,取最小的 E 的K值。
2、初始的K个质心怎么选?
答:最常用的方法是随机选,初始质心的选取对最终聚类结果有影响,因此算法一定要多执行几次,哪个结果更reasonable,就用哪个结果。 当然也有一些优化的方法,第一种是选择彼此距离最远的点,具体来说就是先选第一个点,然后选离第一个点最远的当第二个点,然后选第三个点,第三个点到第一、第二两点的距离之和最小,以此类推。第二种是先根据其他聚类算法(如层次聚类)得到聚类结果,从结果中每个分类选一个点。
3、关于离群值?
答:离群值就是远离整体的,非常异常、非常特殊的数据点,在聚类之前应该将这些“极大”“极小”之类的离群数据都去掉,否则会对于聚类的结果有影响。但是,离群值往往自身就很有分析的价值,可以把离群值单独作为一类来分析。
4、单位要一致!
答:比如X的单位是米,Y也是米,那么距离算出来的单位还是米,是有意义的。但是如果X是米,Y是吨,用距离公式计算就会出现“米的平方”加上“吨的平方”再开平方,最后算出的东西没有数学意义,这就有问题了。
5、标准化
答:如果数据中X整体都比较小,比如都是1到10之间的数,Y很大,比如都是1000以上的数,那么,在计算距离的时候Y起到的作用就比X大很多,X对于距离的影响几乎可以忽略,这也有问题。因此,如果K-Means聚类中选择欧几里德距离计算距离,数据集又出现了上面所述的情况,就一定要进行数据的标准化(normalization),即将数据按比例缩放,使之落入一个小的特定区间。
参考文章: 聚类、K-Means、例子、细节