精华内容
下载资源
问答
  • 各种聚类算法的介绍和比较

    万次阅读 多人点赞 2017-11-15 15:25:00
    一、简要介绍1、聚类概念聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的...

    最近项目用到聚类算法,将其系统的总结一下。

    一、简要介绍

    1、聚类概念

    聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同数据尽量分离。

    2、聚类和分类的区别

    聚类技术通常又被称为无监督学习,因为与监督学习不同,在聚类中那些表示数据类别的分类或者分组信息是没有的。
    Clustering (聚类),简单地说就是把相似的东西分到一组,聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起。因此,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了,因此 clustering 通常并不需要使用训练数据进行学习,这在Machine Learning中被称作unsupervised learning (无监督学习)。
    Classification (分类),对于一个classifier,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行“学习”,从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做supervised learning (监督学习)。

    3、衡量聚类算法优劣的标准

    不同聚类算法有不同的优劣和不同的适用条件。大致上从跟数据的属性(是否序列输入、维度),算法模型的预设,模型的处理能力上看。具体如下:
    1、算法的处理能力:处理大的数据集的能力(即算法复杂度);处理数据噪声的能力;处理任意形状,包括有间隙的嵌套的数据的能力;
    2、算法是否需要预设条件:是否需要预先知道聚类个数,是否需要用户给出领域知识;
    3、算法的数据输入属性:算法处理的结果与数据输入的顺序是否相关,也就是说算法是否独立于数据输入顺序;算法处理有很多属性数据的能力,也就是对数据维数是否敏感,对数据的类型有无要求。

    4、聚类算法有哪些类

    脑图

    常用算法特点比较

    二、算法介绍

    1、基于层次的方法(Hierarchical methods)

    1.1基本思想

    层次聚类主要有两种类型:合并的层次聚类和分裂的层次聚类。前者是一种自底向上的层次聚类算法,从最底层开始,每一次通过合并最相似的聚类来形成上一层次中的聚类,整个当全部数据点都合并到一个聚类的时候停止或者达到某个终止条件而结束,大部分层次聚类都是采用这种方法处理。后者是采用自顶向下的方法,从一个包含全部数据点的聚类开始,然后把根节点分裂为一些子聚类,每个子聚类再递归地继续往下分裂,直到出现只包含一个数据点的单节点聚类出现,即每个聚类中仅包含一个数据点。

    1.2算法流程

    以下流程以自下向上为例。
    1. 将每个对象看作一类,计算两两之间的最小距离;
    2. 将距离最小的两个类合并成一个新类;
    3. 重新计算新类与所有类之间的距离;
    4. 重复2、3,直到所有类最后合并成一类

    1.3算法优缺点

    优点:可解释性好(如当需要创建一种分类法时);还有些研究表明这些算法能产生高质量的聚类,也会应用在上面说的先取K比较大的K-means后的合并阶段;还有对于K-means不能解决的非球形族就可以解决了。
    缺点:时间复杂度高啊,o(m3),改进后的算法也有o(m2lgm),m为点的个数;贪心算法的缺点,一步错步步错;同K-means,difficulty handling different sized clusters and convex shapes。

    1.4常见的算法及改进

    该聚类算法因为计算复杂度比较大适用于小数量级,如对中国省会城市聚类。改进的算法有BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)主要是在数据体量很大的时候使用,而且数据类型是numerical。
    Chameleon(A Hierarchical Clustering Algorithm Using Dynamic Modeling)里用到的linkage是kNN(k-nearest-neighbor)算法,并以此构建一个graph,Chameleon的聚类效果被认为非常强大,比BIRCH好用,但运算复杂还是很高,O(n^2)。看个Chameleon的聚类效果图,其中一个颜色代表一类,可以看出来是可以处理非常复杂的形状的。
    这里写图片描述

    2、基于划分的方法(Partition-based methods)

    2.1基本思想

    基于划分的方法:其原理简单来说就是,想象你有一堆散点需要聚类,想要的聚类效果就是“类内的点都足够近,类间的点都足够远”。首先你要确定这堆散点最后聚成几类,然后挑选几个点作为初始中心点,再然后依据预先定好的启发式算法(heuristic algorithms)给数据点做迭代重置(iterative relocation),直到最后到达“类内的点都足够近,类间的点都足够远”的目标效果。也正是根据所谓的“启发式算法”,形成了k-means算法及其变体包括k-medoids、k-modes、k-medians、kernel k-means等算法。

    2.2算法流程

    经典K-means算法流程:
    1. 随机地选择k个对象,每个对象初始地代表了一个簇的中心;
    2. 对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;
    3. 重新计算每个簇的平均值,更新为新的簇中心;
    4. 不断重复2、3,直到准则函数收敛。

    2.3算法优缺点

    优点:对于大型数据集也是简单高效、时间复杂度、空间复杂度低。
    缺点:最重要是数据集大时结果容易局部最优;需要预先设定K值,对最先的K个点选取很敏感;对噪声和离群值非常敏感;只用于numerical类型数据;不能解决非凸(non-convex)数据。

    2.4常见的算法及改进

    k-means对初始值的设置很敏感,所以有了k-means++、intelligent k-means、genetic k-means。
    k-means对噪声和离群值非常敏感,所以有了k-medoids和k-medians。
    k-means只用于numerical类型数据,不适用于categorical类型数据,所以k-modes。
    k-means不能解决非凸(non-convex)数据,所以有了kernel k-means。
    另外,很多教程都告诉我们Partition-based methods聚类多适用于中等体量的数据集,但我们也不知道“中等”到底有多“中”,所以不妨理解成,数据集越大,越有可能陷入局部最小。下图显示的就是面对非凸,k-means和kernel k-means的不同效果。
    这里写图片描述

    3、基于密度的方法(Density-based methods)

    3.1基本思想

    基于密度的方法:k-means解决不了不规则形状的聚类。于是就有了Density-based methods来系统解决这个问题。该方法同时也对噪声数据的处理比较好。其原理简单说画圈儿,其中要定义两个参数,一个是圈儿的最大半径,一个是一个圈儿里最少应容纳几个点。只要邻近区域的密度(对象或数据点的数目)超过某个阈值,就继续聚类,最后在一个圈里的,就是一个类。DBSCAN(Density-Based Spatial Clustering of Applications with Noise)就是其中的典型.

    3.2算法流程

    DBSCAN流程:
    1. 从任一对象点p开始;
    2. 寻找并合并核心p对象直接密度可达(eps)的对象;
    3. 如果p是一个核心点,则找到了一个聚类,如果p是一个边界点(即从p没有密度可达的点)则寻找下一个对象点;
    4. 重复2、3,直到所有点都被处理

    DBSCAN聚类算法原理的基本要点:确定半径eps的值
    ①DBSCAN算法需要选择一种距离度量,对于待聚类的数据集中,任意两个点之间的距离,反映了点之间的密度,说明了点与点是否能够聚到同一类中。由于DBSCAN算法对高维数据定义密度很困难,所以对于二维空间中的点,可以使用欧几里德距离来进行度量。
    ②DBSCAN算法需要用户输入2个参数:一个是半径(Eps),表示以给定点P为中心的圆形邻域的范围;另一个是以点P为中心的邻域内最少点的数量(MinPts)。如果满足:以点P为中心、半径为Eps的邻域内的点的个数不少于MinPts,则称点P为核心点。
    ③DBSCAN聚类使用到一个k-距离的概念,k-距离是指:给定数据集P={p(i);i=0,1,…n},对于任意点P(i),计算点P(i)到集合D的子集S={p(1), p(2), …, p(i-1), p(i+1), …, p(n)}中所有点之间的距离,距离按照从小到大的顺序排序,假设排序后的距离集合为D={d(1), d(2), …, d(k-1), d(k), d(k+1),…,d(n)},则d(k)就被称为k-距离。也就是说,k-距离是点p(i)到所有点(除了p(i)点)之间距离第k近的距离。对待聚类集合中每个点p(i)都计算k-距离,最后得到所有点的k-距离集合E={e(1), e(2), …, e(n)}。
    ④根据经验计算半径Eps:根据得到的所有点的k-距离集合E,对集合E进行升序排序后得到k-距离集合E’,需要拟合一条排序后的E’集合中k-距离的变化曲线图,然后绘出曲线,通过观察,将急剧发生变化的位置所对应的k-距离的值,确定为半径Eps的值。
    ⑤根据经验计算最少点的数量MinPts:确定MinPts的大小,实际上也是确定k-距离中k的值,DBSCAN算法取k=4,则MinPts=4。
    ⑥如果对经验值聚类的结果不满意,可以适当调整Eps和MinPts的值,经过多次迭代计算对比,选择最合适的参数值。可以看出,如果MinPts不变,Eps取得值过大,会导致大多数点都聚到同一个簇中,Eps过小,会导致一个簇的分裂;如果Eps不变,MinPts的值取得过大,会导致同一个簇中点被标记为噪声点,MinPts过小,会导致发现大量的核心点。
    我们需要知道的是,DBSCAN算法,需要输入2个参数,这两个参数的计算都来自经验知识。半径Eps的计算依赖于计算k-距离,DBSCAN取k=4,也就是设置MinPts=4,然后需要根据k-距离曲线,根据经验观察找到合适的半径Eps的值。

    3.3算法优缺点

    优点:对噪声不敏感;能发现任意形状的聚类。
    缺点:聚类的结果与参数有很大的关系;DBSCAN用固定参数识别聚类,但当聚类的稀疏程度不同时,相同的判定标准可能会破坏聚类的自然结构,即较稀的聚类会被划分为多个类或密度较大且离得较近的类会被合并成一个聚类。

    3.4常见的算法及改进

    DBSCAN对这两个参数的设置非常敏感。DBSCAN的扩展叫OPTICS(Ordering Points To Identify Clustering Structure)通过优先对高密度(high density)进行搜索,然后根据高密度的特点设置参数,改善了DBSCAN的不足。下图就是表现了DBSCAN对参数设置的敏感,你们可以感受下。
    这里写图片描述

    4、基于网络的方法(Grid-based methods)

    4.1基本思想

    基于网络的方法:这类方法的原理就是将数据空间划分为网格单元,将数据对象集映射到网格单元中,并计算每个单元的密度。根据预设的阈值判断每个网格单元是否为高密度单元,由邻近的稠密单元组形成”类“。

    4.2算法流程

    这些算法用不同的网格划分方法,将数据空间划分成为有限个单元(cell)的网格结构,并对网格数据结构进行了不同的处理,但核心步骤是相同的:
    1、 划分网格
    2、 使用网格单元内数据的统计信息对数据进行压缩表达
    3、 基于这些统计信息判断高密度网格单元
    4、 最后将相连的高密度网格单元识别为簇

    4.3算法优缺点

    优点:速度很快,因为其速度与数据对象的个数无关,而只依赖于数据空间中每个维上单元的个数。
    缺点:参数敏感、无法处理不规则分布的数据、维数灾难等;这种算法效率的提高是以聚类结果的精确性为代价的。经常与基于密度的算法结合使用。

    4.4常见的算法及改进

    STING(STatistical INformation Grid)算法、WAVE-CLUSTER算法和CLIQUE(CLustering In QUEst)是该类方法中的代表性算法。下图是CLIQUE的一个例子:
    这里写图片描述

    5、基于模型的方法(Model-based methods)

    5.1基本思想

    基于模型的方法:为每簇假定了一个模型,寻找数据对给定模型的最佳拟合,这一类方法主要是指基于概率模型的方法和基于神经网络模型的方法,尤其以基于概率模型的方法居多。这里的概率模型主要指概率生成模型(generative Model),同一”类“的数据属于同一种概率分布,即假设数据是根据潜在的概率分布生成的。其中最典型、也最常用的方法就是高斯混合模型(GMM,Gaussian Mixture Models)。基于神经网络模型的方法主要就是指SOM(Self Organized Maps)了,也是我所知的唯一一个非监督学习的神经网络了。下图表现的就是GMM的一个demo,里面用到EM算法来做最大似然估计。
    这里写图片描述

    5.2算法流程

    【以SOM为例】SOM神经网络是由芬兰神经网络专家Kohonen教授提出的,该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。
    SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。
    算法流程:
    1、 网络初始化,对输出层每个节点权重赋初值;
    2、 将输入样本中随机选取输入向量,找到与输入向量距离最小的权重向量;
    3、定义获胜单元,在获胜单元的邻近区域调整权重使其向输入向量靠拢;
    4、 提供新样本、进行训练;
    5、收缩邻域半径、减小学习率、重复,直到小于允许值,输出聚类结果。

    5.3算法优缺点

    优点:对”类“的划分不那么”坚硬“,而是以概率形式表现,每一类的特征也可以用参数来表达。
    缺点:执行效率不高,特别是分布数量很多并且数据量很少的时候。

    5.4常见的算法及改进

    基于概率模型的最典型、也最常用的方法就是高斯混合模型(GMM,Gaussian Mixture Models)。基于神经网络模型的方法主要就是指SOM(Self Organized Maps)了,也是我所知的唯一一个非监督学习的神经网络了。

    6、基于模糊的聚类(FCM模糊聚类)

    6.1基本思想

    1965年美国加州大学柏克莱分校的扎德教授第一次提出了‘集合’的概念。经过十多年的发展,模糊集合理论渐渐被应用到各个实际应用方面。为克服非此即彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析。用模糊数学的方法进行聚类分析,就是模糊聚类分析。
    基于模糊集理论的聚类方法,样本以一定的概率属于某个类。比较典型的有基于目标函数的模糊聚类方法、基于相似性关系和模糊关系的方法、基于模糊等价关系的传递闭包方法、基于模 糊图论的最小支撑树方法,以及基于数据集的凸分解、动态规划和难以辨别关系等方法。FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。该聚类算法是传统硬聚类算法的一种改进。

    6.2算法流程

    FCM模糊聚类算法流程:
    1、 标准化数据矩阵;
    2、 建立模糊相似矩阵,初始化隶属矩阵;
    3、 算法开始迭代,直到目标函数收敛到极小值;
    4、 根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后的聚类结果。
    FCM算法需要两个参数一个是聚类数目C,另一个是参数m。一般来讲C要远远小于聚类样本的总个数,同时要保证C>1。对于m,它是一个控制算法的柔性的参数,如果m过大,则聚类效果会很次,而如果m过小则算法会接近HCM聚类算法。
    算法的输出是C个聚类中心点向量和C*N的一个模糊划分矩阵,这个矩阵表示的是每个样本点属于每个类的隶属度。根据这个划分矩阵按照模糊集合中的最大隶属原则就能够确定每个样本点归为哪个类。聚类中心表示的是每个类的平均特征,可以认为是这个类的代表点。

    6.3算法优缺点

    优点:从算法的推导过程中我们不难看出,算法对于满足正态分布的数据聚类效果会很好,另外,算法对孤立点是敏感的。
    缺点:由于不能确保FCM收敛于一个最优解。算法的性能依赖于初始聚类中心。因此,我们要么用另外的快速算法确定初始聚类中心,要么每次用不同的初始聚类中心启动该算法,多次运行FCM。

    6.4常见的算法及改进

    模糊C均值(简称FCM)聚类算法是HCM聚类算法的改进。

    7、其他聚类

    除此以外还有一些其他新的发展方法,在此只简要介绍。

    7.1基于约束的方法

    真实世界中的聚类问题往往是具备多种约束条件的 , 然而由于在处理过程中不能准确表达相应的约束条件、不能很好地利用约束知识进行推理以及不能有效利用动态的约束条件 , 使得这一方法无法得到广泛的推广和应用。这里的约束可以是对个体对象的约束 , 也可以是对聚类参数的约束 , 它们均来自相关领域的经验知识。该方法的一个重要应用在于对存在障碍数据的二维空间数据进行聚类。 COD (Clustering with Ob2structed Distance) 就是处理这类问题的典型算法 , 其主要思想是用两点之间的障碍距离取代了一般的欧氏距离来计算其间的最小距离。

    7.2量子聚类:

    受物理学中量子机理和特性启发,可以用量子理论解决聚类记过依赖于初值和需要指定类别数的问题。一个很好的例子就是基于相关点的 Pott 自旋和统计机理提出的量子聚类模型。它把聚类问题看做一个物理系统。并且许多算例表明,对于传统聚类算法无能为力的几种聚类问题,该算法都得到了比较满意的结果。

    7.3核聚类

    核聚类方法增加了对样本特征的优化过程,利用 Mercer 核 把输入空间的样本映射到高维特征空间,并在特征空间中进行聚类。核聚类方法是普适的,并在性能上优于经典的聚类算法,它通过非线性映射能够较好地分辨、提 取并放大有用的特征,从而实现更为准确的聚类;同时,算法的收敛速度也较快。在经典聚类算法失效的情况下,核聚类算法仍能够得到正确的聚类。代表算法有SVDD算法,SVC算法。

    7.4谱聚类

    首先根据给定的样本数据集定义一个描述成对数据点相似度的亲合矩阵,并计算矩阵的特征值和特征向量,然后选择合适的特征向量聚类不同的数据点。谱聚类算法最初用于计算机视觉、VLSI设计等领域,最近才开始用于机器学习中,并迅速成为国际上机器学习领域的研究热点。
    谱聚类算法建立在图论中的谱图理论基础上,其本质是将聚类问题转化为图的最优划分问题,是一种点对聚类算法。
    这里写图片描述

    三、方法扩展

    1、数据简化方法

    其实上面提到的很多算法就是对数据做了简化,才得以具备处理大规模数据的能力,比如BIRCH。但其实你可以任意组合,所以理论上把数据简化的方法和上面提到的十几种聚类算法结合使用,可以有上百个算法了。
    (1)变换(Data Transformation):离散傅里叶变换(Discrete Fourier Transformation)可以提取数据的频域(frequency domain)信息,离散小波变换(Discrete Wavelet Transformation)除了频域之外,还可以提取到时域(temporal domain)信息。
    (2)降维(Dimensionality Reduction):在降维的方法中,PCA(Principle Component Analysis)和SVD(Singular Value Decomposition)作为线性方法,受到最广泛的应用。还有像MDS(Multi-Dimensional Scaling)什么的,不过只是作为PCA的一个扩展,给我的感觉是中看不中用。这几个方法局限肯定是无法处理非线性特征明显的数据。处理非线性降维的算法主要是流形学习(Manifold Learning),这又是一大块内容,里面集中常见的算法包括ISOMAP、LLE(Locally Linear Embedding)、MVU(Maximum variance unfolding)、Laplacian eigenmaps、Hessian eigenmaps、Kernel PCA、Probabilistic PCA等等。流形学习还是挺有趣的,而且一直在发展。关于降维在聚类中的应用,最著名的应该就是谱聚类(Spectral Clustering),就是先用Laplacian eigenmaps对数据降维(简单地说,就是先将数据转换成邻接矩阵或相似性矩阵,再转换成Laplacian矩阵,再对Laplacian矩阵进行特征分解,把最小的K个特征向量排列在一起),然后再使用k-means完成聚类。谱聚类是个很好的方法,效果通常比k-means好,计算复杂度还低,这都要归功于降维的作用。
    (3)抽样(Sampling):最常用的就是随机抽样(Random Sampling)咯,如果你的数据集特别大,随机抽样就越能显示出它的低复杂性所带来的好处。比如CLARA(Clustering LARge Applications)就是因为k-medoids应对不了大规模的数据集,所以采用sampling的方法。一般抽样法采用的不多。

    2、相似性衡量

    前面提到聚类其实就是比较相似性的。(其实,本部分可能放到前面第一部分会好些。)
    相似性衡量又可以细分为直接法和间接法(答主自己取的名字,求轻拍):直接法是直接求取input data的相似性,间接法是求取data中提取出的features的相似性。但无论是求data还是feature的相似性,方法都是这么几种:
    (1)距离。距离主要就是指Minkovski距离。这个名字虽然听起来陌生,但其算法就是Lp norm的算法,如果是L1 norm,那就是绝对值/曼哈顿距离(Manhattan distance);如果是L2 norm,那就是著名的欧式距离(Euclidean distance)了,也是应用最广泛的;如果L无穷范式,supremum距离,好像也有叫切比雪夫距离的,但就很少有人用了。另外,还有Mahalanobis距离,目前来看主要应用于Gaussian Mixture Model(GMM),还有Lance&Williams距离等等,但几乎没见过求距离的时候会专门用这个的。
    (2)相似系数。主要有夹角余弦和相关系数。相关系数的应用也非常广泛,其主要优势是它不受原线性变换的影响,而且可以轻松地转换为距离,但其运算速度要比距离法慢得多,当维数很高的时候。
    (3)核函数K(x,y)。定义在RdXRdR^d X R^{d}RdXRd上的二元函数,本质上也是反映x和y的距离。核函数的功能就是把数据从低维空间投影(project)到高维空间去。
    (4)DTW(dynamic time warping)。这是一种非常特殊的距离算法,它可以计算两个不同长度的向量的距离,也可以对两对向量中不同时间段内的数据做匹配。DTW主要用在时间序列的部分场合里。

    四、参考资料

    知乎
    https://www.zhihu.com/question/34554321
    四种聚类方法比较
    http://blog.csdn.net/zhoubl668/article/details/7881313
    基于网格的聚类算法https://www.qcloud.com/community/article/539270
    FCM聚类算法
    http://blog.csdn.net/sin_geek/article/details/22896197
    https://www.cnblogs.com/sddai/p/6259553.html

    展开全文
  • 前言:聚类分析是一种非监督的机器学习算法,可以建立在无给定划分类别的情况下,根据数据相似程度进行样本分组的方法。它的入参是一组未被标记的样本,根据样本数据的距离或相似度划分为若干组,划分的原则是组内...

    前言:

    聚类分析是一种非监督的机器学习算法,可以建立在无给定划分类别的情况下,根据数据相似程度进行样本分组的方法。它的入参是一组未被标记的样本,根据样本数据的距离或相似度划分为若干组,划分的原则是组内距离最小化,组外间距最大化。

    聚类分析的算法有多种,本文只为大家介绍K-Means 算法的应用和简单的原理。

    下文将分4个模块为大家介绍聚类分析:

    1. 聚类分析的应用场景

    2. 聚类分析的K-Means 算法原理

    3. 聚类分析代码-输出聚类中心

    4. 聚类分析代码-可视化

    5. 如何得到一个好的聚类分析结果

    一、聚类分析的应用场景:

    聚类分析的优势在于可以在无标签的情况下,将客户根据数据之间的相关性划分成几类,常见的应用场景如下:

    • 客户画像:可以基于众多数据,给客户进行分层分类,以便对目前运营的产品有完善的了解,如客户的性别、年龄、地区、职业、收入等;

    • 精准营销:利用贷前、贷中数据,挖掘真正有价值的客户,并找到其需求所在,精准推送,一网打尽;

    • 反欺诈:清洗欺诈特征(如首逾)进行数据挖掘,找到明细有欺诈倾向客户和正常客户的差异。

    二、K-Means 算法原理:

    K-Means 算法又称为快速聚类法,是基于最小误差法的原则将数据划分为预定的类别K。这种算法原理简单且计算高效。

    算法过程如下:

    8c1762ac184760663a50652d217178b2.png

    Scikit-learn 中的 K-Means算法使用欧式距离去度量样本到聚类中心的距离,并把误差平方和SSE作为度量聚类效果的目标函数,选取误差平方和最小的分类结果作为最终的聚类结果。

    欧式距离函数:

    9e9582aad66c49b815dc08ea54eaaefa.png

    三、聚类分析代码-输出聚类中心

    3.1.  定义聚类分析所需要的包

    import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport mglearnfrom sklearn.preprocessing import LabelEncoderimport warningswarnings.filterwarnings('ignore')import seaborn as snsfrom sklearn.datasets import make_blobsfrom matplotlib import pyplotplt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

    3.2.  生成测试聚类分析代码需要的随机数据

    # 生成随机数data,target=make_blobs(n_samples=100000,n_features=10,centers=10)# 给随机数定义列名a = []for i in range(10):    a.append('X'+str(i))data = pd.DataFrame(data)data.columns = a# 在二维图中绘制样本,每个样本颜色不同# 每次只能选取2个特征绘图(二维图像)pyplot.scatter(data[:,1],data[:,0],c=target);pyplot.show()

    b9e0cd6d91356aa4ec95811c5450a38f.png

    3.3.  输出聚类中心

    from sklearn.cluster import KMeansk = 4 # 定义聚类的类别中心个数,即聚成4类iteration = 500 # 计算聚类中心的最大循环次数model = KMeans(n_clusters = k,n_jobs = 4,max_iter = iteration)model.fit(data)r1 = pd.Series(model.labels_).value_counts()r2 = pd.DataFrame(model.cluster_centers_)r = pd.concat([r2,r1],axis=1)r.columns = list(data.columns)+[u'所属类别数目']r

    聚类分析的结果输出如下:

    b30511df7c5d6b806187156cf92a6307.png

    3.4.  给每行数据标记所属类别

    r = pd.concat([data,pd.Series(model.labels_,index=data.index)],axis=1)r.columns = list(data.columns)+[u'所属类别数目']

    07311526fd9a04f3fda9d23ff8d089d7.png

    四、聚类分析代码-可视化

    上述已经输出了聚类中心并给每个客户都打好聚类标签了,接下来就需要使用2种可视化工具进行聚类结果的观测:

    • 聚类分析可视化工具-TSNE(观测聚类效果)

    • 特征间的二维分布散点图(观测聚类效果)

    • 单个特征的概率密度函数(观测聚类结果是否具有业务意义)

    4.1.  聚类分析可视化工具-TSNE

    TSNE可以对高维数据进行降维,让其可以在2维或3维空间中进行聚类结果的展示,通过TSNE图像可以大致看出是不是通过聚类分析把样本数据明细的分类出来了,即观测聚类效果。

    from sklearn.manifold import TSNEtsne = TSNE()tsne.fit_transform(data)tsne = pd.DataFrame(tsne.embedding_,index=data.index)c = ['go','r.','b*','y.']   # 定义每个分类的颜色for i in range(k):          # k为分类的个数    v = tsne[r[u'类别数目'] == i]    plt.plot(v[0],v[1],c[i])

    aad0c7528992d7314e68e2c8c44ff24c.png

    4.2.  特征间的二维分布散点图

    TSNE有个缺点,处理大量数据(10万+),会非常慢,考验工程师的耐心,这时也可以使用两两特征的散点图。我们可以根据业务经验选取散点图的特征,比如高学历伴随高收入,我们可以选取学历和收入来看其散点图是否有明显的聚类效果,如果觉得1-2组不够有代表性,可以多选几组。

    # 查看两两特征的二维分布fig,axes = plt.subplots(1,2,figsize=(10,5))mglearn.discrete_scatter(data['X0'],data['X1'],model.labels_,ax=axes[0])mglearn.discrete_scatter(data['X1'],data['X2'],model.labels_,ax=axes[1])

    84111524de08daa0d7f64414744b41e4.png

    4.3.  单个特征的概率密度函数

    在聚类完成后,我们可以通过查看每个聚类的分布情况,判断聚类出来的结果是否具有业务意义。

    通过下面的代码,我们将对每个聚类标签下的特征都画出一张概率密度函数图像(即如果有4个聚类中心,将有4张特征为X1的分布图)。

    def density_plot(data,col):      # data: 数据集    # col: 作图的特征名称    plt.figure(dpi=80)    p = data[col].plot(kind='kde',linewidth=2,subplots=True,sharex=False,figsize=(5,5))    plt.legend()    return plt    for i in range(k):   # k为聚类个数    density_plot(data[r[u'类别数目']==i],'X1')

    2376964940bfda94a6e0136802f9fdd0.png

    这时候,就需要多个特征辅助判断聚类结果是否有业务意义。如下例:

    22888f658fe3267c6c52366209cfc561.png

    从上表中可以明显观察到月使用次数越多,客户活跃程度越高,说明此结果在业务层面的解释下非常好。

    五、如何得到一个好聚类分析结果

    在做聚类分析的时候,我们通常会遇到以下几个问题

    • 到底该聚成几类?

    • 样本特征过多,怎么降维?

    • 怎样才是一个好的聚类结果?

    1. 到底该聚成几类?

    首先,我们应该明确自己的业务目标初步制定下初始分类个数,即需要将客户划分为几类。比如我们做欺诈聚类,那么可以把客户分为2类:有欺诈倾向/无欺诈倾向;我们做营销数据分析,可以把客户分为优质/良好/一般/较差等。

    其次,我们可以围绕初始类别个数进行上下浮动,并挑选几组极具有业务含义的特征进行散点图和概率密度分布图的观测,从中选取业务意义最好的分类个数。

    2. 样本特征过多,怎么降维?

    目前,针对无监督学习的数据降维主要有主成分分析和相关性分析


    个人不推荐在聚类分析之前使用主成分分析,原因在于:学过线性代数的朋友们应该都知道,主成分分析是通过正交变化将一组相关性的特征转换为非线性相关的特征,转换后的变量叫主成分,也是特征值对应的特征向量。

    一方面,主成分分析会损失很多原始数据信息;另一方面,通过主成分分析保留下来的主成分也很难有解释性,因为数据已经被正交变换了。

    如果样本特征过多,且相似特征非常多,可以使用相关性分析,删去极相关的特征(如相关系数>=0.8)。这样做的好处:

    一方面,降低了聚类分析循环计算量,实现便捷高效;另一方面,保留了样本大部分的信息。

    3. 怎样才是一个好的聚类结果?

    算法是死的,业务是活的,任何算法结果都要符合业务场景。在分析聚类结果的时候,我们只需要关注以下3点:

    1.  聚类分析可视化工具-TSNE上观测聚类效果,样本数据有明显的分层;

    2.  在特征间的二维分布散点图和单个特征的概率密度函数上,和几组特征的业务意义相吻合;

    2.  分类出来的结果有业务价值。

    ----------------------------------END--------------------------------------

    0

    eb10446edc79fade04f4fecb6f7b0c62.gif73e0701763d0fad91c118eb58dcebf87.gifeb10446edc79fade04f4fecb6f7b0c62.gif

    热爱生活,热爱学习。

    永远年轻,永远热忱

    知乎:金融建模

    微信号:cutewendan

    公众号:风控汪的数据分析之路

    8e5aefb7cc121492e1785203fbf72940.pnga015989d89508dd5b05fe2795d5f26b3.png97e79268148d891a5c7a0ea22d7c2bae.png
    展开全文
  • 三大聚类K-means、dbscan以及agnes的简单原理介绍以及简单实现

    数据集
    提取码:hgsr

    1.K-means聚类

    这个前面已经做过了,具体见:机器学习之K_means(附简单手写代码)
    代码:

    import numpy as np
    import matplotlib.pyplot as plt
    
    #np.random.seed(300)
    x=np.random.rand(200)*15    #产生要聚类的数据点,(0,15)之间
    y=np.random.rand(200)*15
    
    center_x=[]    #存放聚类中心坐标
    center_y=[]
    result_x=[]    #存放每次迭代后每一小类的坐标
    result_y=[]
    
    number_cluster=4   #簇数
    time=50   #迭代次数
    
    color=['red','blue','black','orange']
    
    for i in range(number_cluster):  # 随机生成中心
        result_x.append([])      #顺便初始化存放聚类结果的列表
        result_y.append([])
        x1 = np.random.choice(x)  #为了避免出现聚类后有的簇一个点也没有,
        y1 = np.random.choice(y)  #干脆就以某一个数据点为中心
        if x1 not in center_x and y1 not in center_y:
            center_x.append(x1)
            center_y.append(y1)
    
    plt.scatter(x,y)  #画出数据图
    plt.title('init plot')
    plt.show()
    
    def K_means():
        for t in range(time):
            for i in range(len(x)):
                distance = []   #存放每个点到各中心的距离
                for j in range(len(center_x)):
                    k = (center_x[j] - x[i]) ** 2 + (center_y[j] - y[i]) ** 2  #距离
                    distance.append([k])
                result_x[distance.index(min(distance))].append(x[i])  #聚类
                result_y[distance.index(min(distance))].append(y[i])
            plt.title('iterations:'+str(t+1))
            for i in range(number_cluster):
                plt.scatter(result_x[i], result_y[i], c=color[i])
            plt.show()
    
            # 更新位置
            center_x.clear()
            center_y.clear()
            for i in range(number_cluster):
                ave_x = np.mean(result_x[i])
                ave_y = np.mean(result_y[i])
                center_x.append(ave_x)
                center_y.append(ave_y)
    
    
    if __name__=='__main__':
        K_means()
    
    

    在这里插入图片描述

    2.dbscan聚类

    初始设定两个值:minPts以及半径r
    一些基本概念:

    • 核心对象:若一个点的r邻域内点的个数大于等于minPts,我们就称该点为一个核心对象
    • ε\varepsilon-领域的距离阈值:r
    • 直接密度可达:若某点p在核心点q的邻域内,则称p-q直接可达
    • 密度可达:若有一个点序列:q0,q1,q2,…,qk,对序列里任意两个相邻的点都是直接可达的,则称从q0到qk密度可达

    基本流程:

    1. 任意选择一个未被访问的点p,并将该点标记为已访问
    2. 如果p的邻域内点的个数大于mminPts(核心对象),则初始化一个簇C,将p以及p领域内的点加入到C中
    3. 遍历C中每个点,如果有未被访问的,将其标记为已访问。如果该点也是核心对象,则同样将该点邻域内的点加入到C中
    4. 重复步骤3直到C中不再存在没被访问的核心对象,将簇C加入到一个集合final中
    5. 重复步骤1234直到没有核心点未被标记,剩余的点标记为噪声点。
    6. 输出final与噪声点

    代码:

    import matplotlib.pyplot as plt
    
    minPts = 5   #最小个数
    epsilon = 1.0  #半径
    
    color = ['red', 'black', 'blue', 'orange']
    visited = []
    C = []  #保存最终的聚类结果
    noise = []  #噪声点
    
    x = []
    y = []
    data = open('聚类数据集/dataset.txt')
    for line in data.readlines():
        x.append(float(line.strip().split('\t')[0]))
        y.append(float(line.strip().split('\t')[1]))
    
    for i in range(len(x)):    #初始化标记数组
        visited.append(False)
    
    def judge():         #判断是否还存在核心点未被标记
        for i in range(len(x)):
            if visited[i]:
                continue
            cnt, lis = countObject(x, y, i)
            if cnt >= minPts:
                return True
        return False
    
    def select():    #选择一个没被标记的点
        for i in range(len(visited)):
            if not visited[i]:
                return i
        return -1
    
    def countObject(x, y, p):   #计算点p邻域的内点的个数
        cnt = 0
        lis = []
        for i in range(len(x)):
            if i == p:
                continue
            if (x[i] - x[p]) ** 2 +(y[i] - y[p]) ** 2 <= epsilon ** 2:
                cnt += 1
                lis.append(i)
        return cnt, lis
    
    def check(c):
        for i in c:
            if visited[i]:
                continue
            cnt, lis = countObject(x,y , i)
            if cnt >= minPts:
                return True
        return False
    
    def dbscan():
        while judge():     #判断是否还存在核心点未被标记
            p = select()  #选择一个没被访问的点
            visited[p] = True
            cnt, lis = countObject(x, y, p)
            if cnt >= minPts:
                c = []
                c.append(p)
                for i in lis:
                    c.append(i)
                while(check(c)):   #至少有一个点没被访问且该点领域内至少minPts个点
                    for i in c:
                        if not visited[i]:
                            visited[i] = True
                            cnt1, lis1 = countObject(x, y, i)
                            if cnt >= minPts:
                                for j in lis1:
                                    c.append(j)
                C.append(c)
        for i in range(len(visited)):
            if not visited[i]:
                noise.append(i)
    
        return C
    
    
    if __name__ == '__main__':
        cluster = dbscan()
        X = []
        Y = []
        for i in noise:
            X.append(x[i])
            Y.append(y[i])
        plt.scatter(X, Y, c='m', marker='D')  # 噪声点
        plt.legend(['noise'])
    
        for i in range(len(cluster)):
            X = []
            Y = []
            for j in cluster[i]:
                X.append(x[j])
                Y.append(y[j])
            plt.scatter(X, Y, c=color[i], alpha=1, s=50)
            plt.title('dbscan')
            
        plt.show()
    

    在这里插入图片描述

    3.agnes

    agnes是一种采用自底向上聚合策略的层次聚类算法。思路也很简单:

    1. 最开始每一个点都是一个单独的簇
    2. 算出所有簇之间的两两距离,选择距离最短的两个簇进行合并
    3. 重复步骤2直到簇的个数减小到我们指定的数目

    一个问题:怎么计算两个簇之间的距离?其实就是计算两个簇之间所有点的两两距离,最后取平均值。
    代码:

    import matplotlib.pyplot as plt
    import numpy as np
    
    cluster_Num = 4
    color = ['red', 'black', 'blue', 'orange']
    C = []
    x = []
    y = []
    data = open('聚类数据集/dataset.txt')
    for line in data.readlines():
        x.append(float(line.strip().split('\t')[0]))
        y.append(float(line.strip().split('\t')[1]))
    
    for i in range(len(x)):
        C.append([i])
    
    
    
    def distance(Ci, Cj):    #计算两个簇之间的距离
        dis = []
        for i in Ci:
            for j in Cj:
                dis.append(np.sqrt((x[i] - x[j]) ** 2 + (y[i] - y[j]) ** 2))
        dis = list(set(dis))
        return np.mean(dis)   #平均距离
    
    def find_Two_cluster():
        temp = []
        for i in range(len(C)):
            for j in range(i+1, len(C)):
                dis = distance(C[i], C[j])
                temp.append([i, j, dis])
    
        temp = sorted(temp, key=lambda x:x[2])
        return temp[0][0], temp[0][1]
    
    
    def agnes():
        global C
        while len(C) > cluster_Num:
            i, j =find_Two_cluster()
            merge = C[i] + C[j]
            C = [C[t] for t in range(len(C)) if t != i and t != j]
            C.append(merge)
    
        for i in range(len(C)):
            X = []
            Y = []
            for j in range(len(C[i])):
                X.append(x[C[i][j]])
                Y.append(y[C[i][j]])
            plt.scatter(X, Y, c=color[i])
    
        plt.legend(['C1', 'C2', 'C3', 'C4'])
        plt.title('agnes')
    
        plt.show()
    
    
    if __name__ == '__main__':
        agnes()
    
    
    
    
    

    在这里插入图片描述

    展开全文
  • 点击蓝字关注我们Lunchbox作为Grasshopper的一个插件,主要用于曲面细分嵌板、创建特定函数曲面以及数据读取和管理等方面。除此之外,还有曲面分形、形态扰动和机器学习组件。Nathan Miller是其主要创建者,官网介绍...
    83bf5185ac553623b4af8266c08a1203.png

    点击蓝字关注我们

    Lunchbox作为Grasshopper的一个插件,主要用于曲面细分嵌板、创建特定函数曲面以及数据读取和管理等方面。除此之外,还有曲面分形、形态扰动和机器学习组件。Nathan Miller是其主要创建者,官网介绍如下。

    2cdcf5cf2733cffd9ce4bfd60b885f4b.png

    (https://provingground.io/tools/lunchbox/)

    其中在Lunchbox的MachineLearning(ML)的组件内,主要可分为三部分功能:1、回归拟合,包括简单线性回归,多重线性回归、曲线拟合和逻辑斯蒂克回归分析。2、聚类分析,包括K-means聚类和高斯混合聚类。3、概率分类器,包括朴素贝叶斯分类和隐马尔可夫模型。4、神经网络和受限玻尔兹曼机(RBM)。如下图所示。本文主要结合苏州古典宅园空间的类型划分问题,探索K-means聚类和神经网络这两个运算器的应用。

    1795fd38837054a9a392d480a2c5284b.png

    No.1

    问题提出

    对于江南地区的私家古典宅园空间而言,一般呈宅园并列或彼此融合的格局。宅第部分多厅堂楼阁,体量较大;沿轴线布置,体现礼法秩序。而园林部分多以水体为中心,亭廊轩榭环立,建筑体量较小且形态差异较大。宅园最初建造时通常不止一个出入口,便于通行。现如今古典园林作为景区,功能发生改变后其出入口也多有扩建或是易位的现象,出入口附近多辅助用房,如卫生间和办公室等。

    基于以上认识,选取网师园、耦园、艺圃和留园四座古典园林的平面图作为研究对象,对其主要建筑空间进行聚类分析,找出各类型的共同点。平面图示意如下:

    855e9f7df0e8f4b780209916d638e628.png

    网师园平面图

    No.2

    特征构建

    对宅园建筑空间进行聚类分析,需要主观构建聚类依据。由于缺乏建筑高度、色彩、风格等信息,仅能从平面特征分析。

    首先是建筑单体特征,有建筑面积(建筑大小)、建筑周长面积比(体现建筑是狭长还是方正)、建筑平面边数(四边形的厅堂或是六边形的亭子)、建筑朝向等因素。

    建筑关系及外部环境特征方面,有建筑到水体的距离(近水特征)、建筑与其他所有建筑间的平均距离(可体现建筑位置的中心性)、建筑到外部道路的距离等因素。

    基于主观选取,本文从建筑面积、建筑周长面积比、建筑到水体的距离,建筑与其他所有建筑的平均距离等四个指标对建筑空间进行聚类。电池图如下:

    6ca2c910682d5b5984394cec763a2eca.png

    选定聚类指标后,由于各指标的数量级不同,数量级大的指标其权重越大,在聚类时起到主要影响。因此需要进行归一化处理,将四类数据全部缩放至[0,1]的区间内。进行数据合并然后转置数据,使得四类指标归入一组数据结构。

    ae92a936067456f0ba53bc82dad4a4fb.png

    当然,如果认为某一类指标权重应该大些,可在Remap电池的Target输入端输入大于1的数字,默认为[0,1]。

    No.3

    分类与标注

    将整理好的数据组接入K-means Clustering运算器,将聚类数目设置为3。由于Kmeans聚类的结果不是唯一解,因此可用随机种子调节聚类结果。聚类完成后对不同类型进行着色。

    3311d5fa4a3ab3857205c2a3c8335c11.png

    结果如下:

    b7f218f29054c2b739f5402b1ebfc3ce.png

    由于在特征选取时就已经考虑建筑是否近水、建筑的大小、建筑的形状、建筑位置的中心性等这些问题,导致聚类的结果会趋近先验设想。因此可将聚类结果分为近水空间、入口/角落空间、厅堂空间三个类型。文字标注如下:

    90378cd32a436162a469958c6768c579.png

    分类结果如下:

    e2a66c2eda515ddae1fd77939466770b.png

    网师园

    10b693c90900da56dd1ac3b749aaff72.png

    耦园

    796a752fa4b50bda837181d9ae9fe32f.png

    留园

    f331e0de2008173df0bdfeca81001dab.png

    艺圃

    No.4

    神经网络预测

    基于上述聚类特征(input)和聚类标签(output),选取网师园、耦园和留园作为训练集,以艺圃作为测试集进行园林空间的类型预测。当然,如果能够更精细地手动进行类型标注(而不是基于聚类结果),并且当训练集足够大时,神经网络的预测结果会更加精准。

    神经网络运算器的输入端如下所示,其中Traing Inputs和Test Data要求树状数据,即是将特征值(0~1区间)成组输入。Labels要求数值型数据,需要将原有文字标签转换为数字输入。HiddenNeurons为神经网络隐含层数,默认为5层。Alpha值默认为2,即是Sigmod激活函数的取值范围(-1~1)。Iterations为迭代次数,默认为10 。建议增大,直至Result不再发生变化时为止(意味着损失函数不再变化,预测结果收敛)。

    09341f33e9fb308b8113f59ec84f8515.png

    之后对预测结果打上标签

    d32fcda9ec227666af39eb2515133c6e.png

    No.5

    对比分析

    以下为聚类分析和神经网络预测的结果对比,可看出神经网络预测得到的分类结果相对更准确些。

    本例中神经网络基于的训练数据来源于聚类分析, 然而二者在方法上有着很大的区别。聚类一般依据欧氏距离或是余弦相似度等进行类型划分,属于启发式迭代求最优解。使得组内差距最小而组间差距最大。神经网络则是依据大量的训练数据,构建神经网络模型,再对测试集进行判定。

    此外,聚类不同于分类。分类指定了分类标准,属于监督学习方法。聚类属于无监督学习。事先并无类型标准,聚类簇(cluster)的个数是可以更改的,而且聚类结果随机。

    049e2b8589a7a22f0584566a9c4367d4.png9f7aa731fe83fcbc73b3a3f90257cd34.pngb05ca7df38e18af9010fb567eaa9664d.pnge559cb28decaf99bda046207c1bc5307.png

    以上我们看出先验导向和特征体系的构建决定了后续结果的可能性,而聚类分析和神经网络预测的结果只是在确定的导向下逼近一个最优解,或者一个易解释的结果。

    我们还看到,LunchboxML组件中工具有限,能够行使的功能也较为有限。

    33465b635bfe46a024f7b776d4d96ea2.png

    展开全文
  • 1.sklearn中digits手写字体数据集介绍: https://blog.csdn.net/Asun0204/article/details/75607948 2.AffinityPropagation( )聚类算法主要参数的使用: https://blog.csdn.net/manjhOK/article/details/79586791 ...
  • 1、介绍 2、样本聚类距离 3、常见聚类方法 –3.1.层次聚类 –3.2.K-means聚类 –3.3.DBSCAN聚类 4、评价指标 –4.1 样本实际类别信息已知 –4.2 样本实际类别信息未知 1、介绍 无监督学习:无监督学习是...
  • 各种聚类算法介绍

    2018-08-08 12:08:52
    聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,...
  • 数据挖掘--聚类介绍

    千次阅读 2015-01-31 16:44:26
    划分法(partitioning methods),给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K (1) 每一个分组至少包含一个数据纪录; (2)每一个数据纪录属于且仅属于一个分组(注意...
  • 通过在UCI开源网站上下载Car Evaluation数据集,对其使用机器学习算法进行分析,分别使用了分类算法,回归算法,聚类算法,文件中附数据集以及代码,代码使用jupyter运行即可,代码中介绍比较详细,通熟易懂,...
  • 本文在数据集上展示了如何使用dendextend R软件包来增强Hierarchical Cluster Analysis(更好的可视化和灵敏度分析)。 背景 鸢尾花数据集 我们可以看到,Setosa物种与Versicolor和Virginica明显不同(它们具有...
  • K-means算法,是一种使用广泛的最基础的聚类算法,一般作为掌握聚类算法的第一个算法,是无监督的聚类算法,算法简单,聚类效果好,即使是在巨大的数据集上也 非常容易部署实施。正因为如此,它在很多领域都得到的...
  • 文本聚类算法介绍分类和聚类都...在分类算法中,训练集为已经标注好的数据集,但是微博文本具有的大数据特性及不确定性决定了标注数据的难度,因此本文选择聚类算法对大量且随机的微博文本进行处理。大量文本建模后...
  • FCM聚类算法介绍

    千次阅读 2018-03-23 17:06:29
    FCM聚类算法介绍FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,...
  • 各种聚类算法介绍和比较

    万次阅读 多人点赞 2018-09-04 16:42:49
    聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,...
  • 鸢尾花数据集是非常经典的数据集,常被用来数据挖掘初学者进行数据探索,本文基于鸢尾花数据集分别进行K-均值聚类、层次聚类、DBSCAN(密度聚类),比较这三类算法的区别。 一、K-均值聚类 关于K-均值聚类算法的...
  • 介绍了窄角扇束工业CT的局部扫描方法,通过源与探测器的平移加旋转实现扫描;研究了CT多次扫描的局部重建算法,从粗略扫描重建的低分辨率图像中圈定感兴趣区域,再进行小步距扫描,重建出高分辨率的图像;提高了检测...
  • 文本聚类算法介绍分类和聚类都...在分类算法中,训练集为已经标注好的数据集,但是微博文本具有的大数据特性及不确定性决定了标注数据的难度,因此本文选择聚类算法对大量且随机的微博文本进行处理。大量文本建模后...
  • 聚类

    2017-06-01 10:16:00
    聚类就是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小,他是无监督的。 2.相似度/距离计算方法总结 闵可夫斯基距离Minkowski/欧式距离:...
  • k-modes聚类算法介绍

    万次阅读 2017-10-04 17:05:29
    为什么要用k-modes算法k-means算法是一种简单且实用的聚类算法,但是传统的k-means算法只适用于连续属性的数据集,而对于离散属性的数据集,计算簇的均值以及点之间的欧式距离就变得不合适了。k-modes作为k-means的...
  • 六种常用的文本聚类算法介绍

    千次阅读 2020-05-17 23:21:34
    在分类算法中,训练集为已经标注好的数据集,但是微博文本具有的大数据特性及不确定性决定了标注数据的难度,因此本文选择聚类算法对大量且随机的微博文本进行处理。 大量文本建模后还需要对主题分布进行聚类以得到...
  • 其主要思想是通过迭代过程将数据集划分为不同类别,使评价聚类性能的准则函数达到最优,使生成的每个聚类类内紧凑,类间独立。   本文介绍并实践了一种无监督的聚类算法——K-Means聚类,结合“簇内离差平方和
  • 各种聚类算法的系统介绍和比较

    万次阅读 2018-04-16 22:15:42
    一、简要介绍1、聚类概念聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 596
精华内容 238
关键字:

聚类数据集介绍