EM(Expectation-Maximum)算法也称期望最大化算法。EM算法是最常见的隐变量估计方法,在机器学习中有极为广泛的用途,例如常被用来学习高斯混合模型(Gaussian mixture model,简称GMM)的参数;隐式马尔科夫算法(HMM)、LDA主题模型的变分推断等等。
极大似然估计,只是一种概率论在统计学的应用,它是参数估计的方法之一。说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值。极大似然估计是建立在这样的思想上:已知某个参数能使这个样本出现的概率最大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。
极大似然估计的核心关键就是对于一些情况,样本太多,无法得出分布的参数值,可以采样小样本后,利用极大似然估计获取假设中分布的参数值。
由于EM算法目前还未能理解具体的推导过程,因此暂时留下资料,为之后举例算法过程做参考。
这是 文字传送门 ,
这是 视频传送门,这是一个老师讲的课,非常推荐 ,
这是 简易动画展示传送门 。
(1)算法计算结果稳定、准确
(2)EM算法自收敛,既不需要事先设定类别,也不需要数据间的两两比较合并等操作
(1)对初始化数据敏感
(2)EM算法计算复杂,收敛较慢,不适于大规模数据集和高维数据
(3)当所要优化的函数不是凸函数时,EM算法容易给出局部最优解,而不是全局最优解
题主直接在百度上搜索“多元正态分布 最大似然估计”就可以找到一些讲推导的网页;但大部分都是用矩阵代数的办法做的,即用一些矩阵的知识来求矩阵的微分等等,对矩阵知识要求相对高一点;
另一条思路是注意到协方差矩阵 Σ 是一个实对称矩阵,可以进行正交相似对角化,由此可以把复杂的含矩阵的(对数)似然函数简化成相对简单的和式,从而可以手动求微分。这一思路的过程可见于下述文献:
Maximum Likelihood Estimation of μ and Σ from a Multivariate Normal Distribution
(by J C W Rayner)
作者 | Josh Thompson
来源 | 数据派THU
Choosing the Right Clustering Algorithm for your Dataset - KDnuggets
聚类算法十分容易上手,但是选择恰当的聚类算法并不是一件容易的事。
数据聚类是搭建一个正确数据模型的重要步骤。数据分析应当根据数据的共同点整理信息。然而主要问题是,什么通用性参数可以给出最佳结果,以及什么才能称为“最佳”。
本文适用于菜鸟数据科学家或想提升聚类算法能力的专家。下文包括最广泛使用的聚类算法及其概况。根据每种方法的特殊性,本文针对其应用提出了建议。
四种基本算法以及如何选择
聚类模型可以分为四种常见的算法类别。尽管零零散散的聚类算法不少于100种,但是其中大部分的流行程度以及应用领域相对有限。
基于整个数据集对象间距离计算的聚类方法,称为基于连通性的聚类(connectivity-based)或层次聚类。根据算法的“方向”,它可以组合或反过来分解信息——聚集和分解的名称正是源于这种方向的区别。最流行和合理的类型是聚集型,你可以从输入所有数据开始,然后将这些数据点组合成越来越大的簇,直到达到极限。
层次聚类的一个典型案例是植物的分类。数据集的“树”从具体物种开始,以一些植物王国结束,每个植物王国都由更小的簇组成(门、类、阶等)。
层次聚类算法将返回树状图数据,该树状图展示了信息的结构,而不是集群上的具体分类。这样的特点既有好处,也有一些问题:算法会变得很复杂,且不适用于几乎没有层次的数据集。这种算法的性能也较差:由于存在大量的迭代,因此整个处理过程浪费了很多不必要的时间。最重要的是,这种分层算法并不能得到精确的结构。
同时,从预设的类别一直分解到所有的数据点,类别的个数不会对最终结果产生实质性影响,也不会影响预设的距离度量,该距离度量粗略测量和近似估计得到的。
根据我的经验,由于简单易操作,基于质心的聚类(Centroid-based)是最常出现的模型。 该模型旨在将数据集的每个对象划分为特定的类别。 簇数(k)是随机选择的,这可能是该方法的最大问题。 由于与k最近邻居(kNN)相似,该k均值算法在机器学习中特别受欢迎。
计算过程包括多个步骤。首先,输入数据集的目标类别数。聚类的中心应当尽可能分散,这有助于提高结果的准确性。
其次,该算法找到数据集的每个对象与每个聚类中心之间的距离。最小坐标距离(若使用图形表示)确定了将对象移动到哪个群集。
之后,将根据类别中所有点的坐标平均值重新计算聚类的中心。重复算法的上一步,但是计算中要使用簇的新中心点。除非达到某些条件,否则此类迭代将继续。例如,当簇的中心距上次迭代没有移动或移动不明显时,聚类将结束。
尽管数学和代码都很简单,但k均值仍有一些缺点,因此我们无法在所有情景中使用它。缺点包括:
因为优先级设置在集群的中心,而不是边界,所以每个集群的边界容易被疏忽。 无法创建数据集结构,其对象可以按等量的方式分类到多个群集中。 需要猜测最佳类别数(k),或者需要进行初步计算以指定此量规。相比之下,期望最大化算法可以避免那些复杂情况,同时提供更高的准确性。简而言之,它计算每个数据集点与我们指定的所有聚类的关联概率。用于该聚类模型的主要工具是高斯混合模型(GMM)–假设数据集的点服从高斯分布。
k-means算法可以算是EM原理的简化版本。它们都需要手动输入簇数,这是此类方法要面对的主要问题。除此之外,计算原理(对于GMM或k均值)很简单:簇的近似范围是在每次新迭代中逐渐更新的。
与基于质心的模型不同,EM算法允许对两个或多个聚类的点进行分类-它仅展示每个事件的可能性,你可以使用该事件进行进一步的分析。更重要的是,每个聚类的边界组成了不同度量的椭球体。这与k均值聚类不同,k均值聚类方法用圆形表示。但是,该算法对于不服从高斯分布的数据集根本不起作用。这也是该方法的主要缺点:它更适用于理论问题,而不是实际的测量或观察。
最后,基于数据密度的聚类成为数据科学家心中的最爱。
这个名字已经包括了模型的要点——将数据集划分为聚类,计数器会输入ε参数,即“邻居”距离。因此,如果目标点位于半径为ε的圆(球)内,则它属于该集群。
具有噪声的基于密度的聚类方法(DBSCAN)将逐步检查每个对象,将其状态更改为“已查看”,将其划分到具体的类别或噪声中,直到最终处理整个数据集。用DBSCAN确定的簇可以具有任意形状,因此非常精确。此外,该算法无需人为地设定簇数 —— 算法可以自动决定。
尽管如此,DBSCAN也有一些缺点。如果数据集由可变密度簇组成,则该方法的结果较差;如果对象的位置太近,并且无法轻易估算出ε参数,那么这也不是一个很好的选择。
总而言之,我们并不能说选择了错误的算法,只能说其中有些算法会更适合特定的数据集结构。为了采用最佳的(看起来更恰当的)算法,你需要全面了解它们的优缺点。
例如,如果某些算法不符合数据集规范,则可以从一开始就将其排除在外。为避免繁琐的工作,你可以花一些时间来记住这些信息,而无需反复试验并从自己的错误中学习。
我们希望本文能帮助你在初始阶段选择最好的算法。继续这了不起的工作吧!
无监督学习(Unsupervised learning) :训练样本的标记信息是未知的,目标是为了揭露训练样本的内在属性,结构和信息,为进一步的数据挖掘提供基础。
· 聚类(clustering)
· 降维(dimensionality reduction)
· 异常检测(outlier detection)
· 推荐系统(recommendation system)
监督学习(supervised learning) :训练样本带有信息标记,利用已有的训练样本信息学习数据的规律预测未知的新样本标签
· 回归分析(regression)
· 分类(classification)
聚类 :物以类聚。按照某一个特定的标准(比如距离),把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不再同一个簇内的数据对象的差异性也尽可能的大。
簇 (或类cluster):子集合。最大化簇内的相似性;最小化簇与簇之间的相似性。
聚类可以作为一个单独过程,用于寻找数据内在分布结构,也可以作为其他学习任务前驱过程。
聚类和分类的区别:聚类是无监督学习任务,不知道真实的样本标记,只把相似度搞得样本聚合在一起;分类是监督学习任务,利用已知的样本标记训练学习器预测未知样本的类别。
聚类相似度度量: 几何距离
几种距离度量方法:
· 欧式距离(Euclidean distance):p=2的Minkowski距离,
· Minkowoski距离:
· 曼哈顿距离 (Manhattan distance):p=1的Minkowski距离
· 夹角余弦 :
` 相关系数 (Pearson correlation coefficient): ,等式右面的x其实是 (x方向的均值),y其实是 (y方向的均值),对于这个表达式很不友好,所以在此说明一下。
聚类类别:
· 基于划分的聚类(partitioning based clustering):k均值(K-means), Mean shift
· 层次聚类(hierarchical clustering):Agglomerative clustering, BIRCH
· 密度聚类(density based clustering):DBSCAN
· 基于模型的聚类(model based clustering):高斯混合模型(GMM)
· Affinity propagation
· Spectral clustering
聚类原理:
划分聚类(partition based clustering):给定包含N个点的数据集,划分法将构造K个分组;每个分组代表一个聚类,这里每个分组至少包含一个数据点,每个数据点属于且只属于一个分组;对于给定的K值,算法先给出一个初始化的分组方法,然后通过反复迭代的的方法改变分组,知道准则函数收敛。
K均值算法(Kmeans):
` 给定样本集:D={ , }, k均值算法针对聚类所得簇:C={ , }
` 最小化平方差: ,其中: 簇 的质心,上面的2代表平方,下面的2代表范数2
具体的K均值算法过程 :
1 随机选择K个对子女给,每个对象出事地代表了一个簇的质心,即选择K个初始质心;2 对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;3 重新计算每个簇的平均值。这个过程不断重复,直到准则函数(误差的平方和SSE作为全局的目标函数)收敛,直到质心不发生明显的变化。
初始质心优化:Kmeans++:
输入:样本集D={ , } 聚类簇的数量K
选取初始质心的过程:
1 随机从m个样本点中选择一个样本作为第一个簇的质心C1;2 计算所有的样本点到质心C1的距离: ;3 从每个点的概率分布 中随机选取一个点作为第二个质心C2。离C1越远的点,被选择的概率越大;4 重新计算所有样本点到质心的距离;5 重复上述过程,直到初始的K个质心被选择完成 ;按照Kmeans的算法步骤完成聚类。
输出:C= { , }
K均值算法(Kmean)的优缺点 :
优点:1 简单直观,抑郁理解实现;2 复杂度相对比较低,在K不是很大的情况下,Kmeans的计算时间相对很短;3 Kmean会产生紧密度比较高的簇,反映了簇内样本围绕质心的紧密程度的一种算法。
缺点:1 很难预测到准确的簇的数目;2 对初始值设置很敏感(Kmeans++);3 Kmeans主要发现圆形或者球形簇,对不同形状和密度的簇效果不好;4 Kmeans对噪声和离群值非常敏感(Kmeadians对噪声和离群值不敏感)
层次聚类(hierarchical clustering) :
· 主要在不同层次对数据集进行逐层分解,直到满足某种条件为止;
· 先计算样本之间的距离。每次将距离最近的点合并到同一个类,然后再计算类与类之间的距离,将距离最近的类合并为一个大类。不停的合并,直到合成一个类。
· 自底向上(bottom-up)和自顶向下(top-down)两种方法:
top-down: 一开始每个个体都是一个初始的类,然后根据类与类之间的链接(linkage)寻找同类,最后形成一个最终的簇
bottom-up:一开始所有样本都属于一个大类,然后根据类与类之间的链接排除异己,打到聚类的目的。
类与类距离的计算方法 :
最短距离法,最长距离法,中间距离法,平均距离法
最小距离:
最大距离:
平均距离:
单链接(single-linkage):根据最小距离算法
全连接(complete-linkage):根据最大距离算法
均链接(average-linkage):根据平均距离算法
凝聚层次聚类具体算法流程:
1 给定样本集,决定聚类簇距离度量函数以及聚类簇数目k;2 将每个样本看作一类,计算两两之间的距离;3 将距离最小的两个类合并成一个心类;4重新计算心类与所有类之间的距离;5 重复(3-4),知道达到所需要的簇的数目
层次聚类的优缺点:
优点:1可以得到任意形状的簇,没有Kmeans对形状上的限制;2 可以发现类之间的层次关系;3不要制定簇的数目
缺点:1 通常来说,计算复杂度高(很多merge/split);2噪声对层次聚类也会产生很大影响;3不适合打样本的聚类
密度聚类(density based clustering) :
` 基于密度的 方法的特点是不依赖于距离,而是依赖于密度,从而客服k均值只能发现“球形”聚簇的缺点
· 核心思想:只要一个区域中点的密度大于某个阈值,就把它加到与之相近的聚类中去
· 密度算法从样本密度的角度来考察样本的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果
· 对噪声和离群值的处理有效
· 经典算法:DBSCAN(density based spatial clutering of applications with noise)
DBSCAN 基于近邻域(neighborhood)参数( )刻画样本分布的 紧密程度的一种算法。
基本概念:
· 样本集: D={ }
` 阈值:
· :对样本点 的 包括样本集中与 距离不大于 的样本
· 核心对象(core object):如果 的 至少包含MinPts个样本,那么 就是一个核心对象 ,
假设MinPts=3,虚线标识为
·密度直达(directly density-reachable):如果 位于 的 中,并且 是和新对象,那么 由 密度直达
· 密度可达(density-reachable):对 ,如果存在一串样本点p1,p2pn = ,pn = ,且 由
` 密度直达,则称 由 密度可达
· 密度相连:存在样本集合中一点o,如果 和 均由O密度可达,那么 和 密度相连
上图中: 是核心对象,那么从 出发, 由 密度直达; 由 密度可达; 与 密度相连。
DBSCAN算法的过程:
1 首先根据邻域参数( )确定样本集合D中所有的核心对象,存在集合P中。加入集合P的条件为 有不少于MinPts的样本数。
2 然后从核心对象集合P中任意选取一个核心对象作为初始点,找出其密度可达的样本生成聚类簇,构成第一个聚类簇C1。
3 将C1内多有核心对象从P中去除,再从更新后的核心对象集合任意选取下一个种子样本。
4 重复(2-3),直到核心对象被全部选择完,也就是P为空集。
聚类算法总结:
基于划分的聚类:K均值(kmeans),kmeans++
层次聚类:Agglomerative聚类
密度聚类:DBSCAN
基于模型 的聚类:高斯混合模型(GMM),这篇博客里咩有介绍
虽然稀里糊涂,但是先跟下来再说吧:
降维
什么是降维?
试想一下现在有n个对象a1,a2,……,an,每个对象有多个属性x1,x2,……,xm。当我们用矩阵表示这些对象时,便是一个An×m的矩阵。举个实例:假设我们有5只猫,每只猫的毛色、体型、身高、体重、年龄、性别等特征各不相同。这里的猫就是我们的对象;“猫”这个称呼是这个对象的标签;毛色、体型、体重等特征就是我们所说的对象的属性。在实际的图像识别过程中,我们可能有大批数量的猫、狗的,所需的对象的属性也是多个,这些属性的个数就是我们所说的维数。维数越多,信息量数据量越大,占用的磁盘空间和内存较多。实际上我们在实际中有时候并用不到这么多的信息,所以就需要降维。
降维是试图压缩维度,并尽可能地保留分布信息。我们可以将其视为数据压缩,或者特征选择。
在实际生活中,我们对样本做数据处理,图像处理等操作时,希望模型的精度比较高,或者说泛化误差率较小,那么我们希样本的采样密度足够大(密采样)。首先我们要明白的是,维数越高,样本在空间上分布得越稀疏(若不明白,请看图:二维降到一维时,样本点的密度增加。可见更高维度的样本点之间密度更稀疏)。
降维在图像处理中叫图像压缩、特征提取。重在最优分区(可分离性);
降维在模式识别中叫做特征选择。重在最有描述(保真性)。
为什么要降维?
(1)维数越多,信息量越大,数据冗余,为了得到我们想要的信息,或者方便数据处理等操作,我们就需要进行降维。
(2)数据维度高,我们将无法借助自己领域的知识无法构建有效特征。
(3)维度超过三维时,人便无法肉眼观察特征。降维后,我们便可以在低维(一维、二维或三维)空间中可视化高维数据。
(4)克服维数灾难。通过某种数据变换,将原始高维属性空间转变为一个低维“子空间”,在这个子空间中,样本密度大幅度提高,距离计算(也是样本间相似度计算,欧几里得距离等来刻画相似度)也将变得容易;降维要保持原始空间中样本之间的距离在低维空间中得以保持,且在低维子空间中更容易学习。
PS:维数灾难
维数灾难是在给定精度下,准确的对某些变量的函数进行估计,所需的样本数量会随着样本的位数的增加而成指数增长。
高维情况下出现的样本稀疏、距离计算困难等问题,就是机器学习中面临的严重障碍——“维数灾难”。
降维的方法
(1)线性降维方法
PCA主成分分析
LDA判别分析
MDS多尺度分析
(2)非线性降维方法
流形学习
ISOMAP等距特征映射
LLE局部线性嵌入
聚类
什么是聚类
聚类尝试在没有训练的条件下,对一些没有标签的数据进行归纳分类。根据相似性对数据进行分组,以便对数据进行概括。没有标签是指我们事先不知道任何样本的类别标号,希望通过某种算法把这一组位置类别的样本划分成若干类别,聚类的时候,并不关心某一类是什么,实现的只是将相似的东西聚在一起。
总的来说,聚类就是对大量未知标注的数据集,按数据内在的相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。是无监督的分类方式。
聚类的目标
同一类中,类内对象是相似的(或是相关的);不同类中的对象是不同的(不相关的)。
聚类方法好坏的判定:
(1)产生高质量的聚类结果——簇。簇内有高相似性,簇间有低的相似性。
(2)取决于聚类方法采用的相似性评估方法以及该方法的具体实现。
(3)取决于聚类方法能否发现某些/所有的隐含模式。
常见的聚类算法
(1)划分聚类:K-means算法、K-medoids算法、K-pototypes算法、CLARANS算法;
(2)层次聚类:BIRCH算法、CURE算法;
(3)密度聚类:DBSCAN算法、OPTICS算法、DENCLUE算法
(4)网格聚类:STING算法、CLIQUE算法、WAVE-CLUSTER算法
(5)混合聚类:高斯混合模型、CLIQUE(综合密度和网格的算法)
划分方法 :K-MEANS(K均值)、K-MEDOIDS(K中心点)、CLARANS算法(基于选择的算法)
层次分析方法 :BIRCH算法(平衡迭代规约和聚类)、CURE算法(代表点聚类)、CHAMELEON算法(动态模型)
基于密度的算法 :DBSCAN算法(基于高密度连续区域)、DENCLUE算法(密度分布函数)、OPTICS算法(对象排序识别)
基于网格的方法 :STING算法(统计信息网络)、CLIOUE算法(聚类高维空间)、WAVE-CLUSTER算法(小波变换)
基于模型的方法 :统计学方法、神经网络方法
K-Means聚类也叫快速聚类法,在最小化误差函数的基础上将数据划分为预定的类数K。原理简单,便于处理大量数据。
K-Medoids聚类算法不采用簇中对象的平均值作为簇中心,而选用簇中离平均值最近的对象作为簇中心。
①从N个样本数据中随机选取K个对象作为初始的聚类中心;
②分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中;
③所有对象分配完成后,重新计算K个聚类的中心;
④与前一次计算的K个聚类中心比较,如果聚类中心发生变化,转第②步,否则转第⑤步。
⑤当质心不发生变化时停止并输出聚类结果。
连续属性:首先对各属性值进行零-均值规范( zscore ),在进行距离计算。距离计算常用的有:
· 欧几里得距离
· 曼哈顿距离
· 闵可夫斯基距离
文档数据:先将文档数据整理成 文档-词矩阵 格式,再用 余弦相似性 度量。
连续属性的SSE
文档数据的SSE
组内相似性越大,组件差别越大,聚类效果越好。常用的评价方法有:
· purity评价法
· RI评价法
· F值评价法
层次聚类树:Z = linkage(x,method,metric)
层次聚类或者高斯混合分布聚类模型:T = cluster(Z,’maxclust’,n) 或者 T = cluster(Z,’cutoff’,c)
其中,Z是使用linkage函数构建的层次聚类数,是一个(m-1)×3维矩阵,其中m是观察的样本数;当参数为’maxclust’时,n为聚类的类别;当参数为’cutoff’时,c表示剪枝的阈值。
k均值聚类模型:[IDX,C,sumd,D] = kmeans(x,k,param1,val1,param2,val2,)
其中,IDX返回每个样本数据的类别;C返回k个类别的中心向量;sumd返回每个类别样本到中心向量的距离和;D返回每个样本到中心的距离。
模糊聚类模型:[center,U,obj_fcn] = fcm(data,cluster_n)
其中,U返回最终模糊分区矩阵;obj_fcn为循环过程中目标函数的值。
自组织神经网络聚类模型:net = selforgmap(dimensions,coverSteps,initNeighbor,topologyFcn,distanceFcn)
聚类分析是无监督分类,就是只有自变量(指标)数据,没有(表示类别的)因变量数据,就可以根据指标数据的距离或相似性进行归类,而且归为多少类也是不确定的,取决于数据本身和分类效果的度量指标。常见的聚类分析算法有层次聚类,K均值聚类,高斯混合聚类,还有基于密度的DBSCAN聚类。
判别分析是有监督分类,就是既有自变量(指标)数据,又有(表示类别的)因变量数据,根据已知类别的样本所提供的信息,总结出分类的规律性,并建立好判别公式和判别准则,这样有了新样本,就能据此判断其所属类别。除了通常的距离判别(相当于KNN),贝叶斯判别(朴素贝叶斯),Fisher判别,其它机器学习中的分类算法,比如决策树,支持向量机,神经网络等也都是判别分析算法。
展示如何使用MATLAB进行聚类分析
分别运用分层聚类、K均值聚类以及高斯混合模型来进行分析,然后比较三者的结果
生成随机二维分布图形,三个中心
% 使用高斯分布(正态分布)
% 随机生成3个中心以及标准差
s = rng(5,'v5normal');
mu = round((rand(3,2)-05)19)+1;
sigma = round(rand(3,2)40)/10+1;
X = [mvnrnd(mu(1,:),sigma(1,:),200);
mvnrnd(mu(2,:),sigma(2,:),300);
mvnrnd(mu(3,:),sigma(3,:),400)];
% 作图
P1 = figure;clf;
scatter(X(:,1),X(:,2),10,'ro');
title('研究样本散点分布图')
K均值聚类
% 距离用传统欧式距离,分成两类
[cidx2,cmeans2,sumd2,D2] = kmeans(X,2,'dist','sqEuclidean');
P2 = figure;clf;
[silh2,h2] = silhouette(X,cidx2,'sqeuclidean');
从轮廓图上面看,第二类结果比较好,但是第一类有部分数据表现不佳。有相当部分的点落在08以下。
分层聚类
eucD = pdist(X,'euclidean');
clustTreeEuc = linkage(eucD,'average');
cophenet(clustTreeEuc,eucD);
P3 = figure;clf;
[h,nodes] = dendrogram(clustTreeEuc,20);
set(gca,'TickDir','out','TickLength',[002 0],'XTickLabel',[]);
可以选择dendrogram显示的结点数目,这里选择20 。结果显示可能可以分成三类
重新调用K均值法
改为分成三类
[cidx3,cmeans3,sumd3,D3] = kmeans(X,3,'dist','sqEuclidean');
P4 = figure;clf;
[silh3,h3] = silhouette(X,cidx3,'sqeuclidean');
图上看,比前面的结果略有改善。
将分类的结果展示出来
P5 = figure;clf
ptsymb = {'bo','ro','go',',mo','c+'};
MarkFace = {[0 0 1],[8 0 0],[0 5 0]};
hold on
for i =1:3
clust = find(cidx3 == i);
plot(X(clust,1),X(clust,2),ptsymb{i},'MarkerSize',3,'MarkerFace',MarkFace{i},'MarkerEdgeColor','black');
plot(cmeans3(i,1),cmeans3(i,2),ptsymb{i},'MarkerSize',10,'MarkerFace',MarkFace{i});
end
hold off
运用高斯混合分布模型进行聚类分析
分别用分布图、热能图和概率图展示结果 等高线
% 等高线
options = statset('Display','off');
gm = gmdistributionfit(X,3,'Options',options);
P6 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezcontour(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
P7 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezsurf(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
view(33,24)
热能图
cluster1 = (cidx3 == 1);
cluster3 = (cidx3 == 2);
% 通过观察,K均值方法的第二类是gm的第三类
cluster2 = (cidx3 == 3);
% 计算分类概率
P = posterior(gm,X);
P8 = figure;clf
plot3(X(cluster1,1),X(cluster1,2),P(cluster1,1),'r')
grid on;hold on
plot3(X(cluster2,1),X(cluster2,2),P(cluster2,2),'bo')
plot3(X(cluster3,1),X(cluster3,2),P(cluster3,3),'g')
legend('第 1 类','第 2 类','第 3 类','Location','NW')
clrmap = jet(80); colormap(clrmap(9:72,:))
ylabel(colorbar,'Component 1 Posterior Probability')
view(-45,20);
% 第三类点部分概率值较低,可能需要其他数据来进行分析。
% 概率图
P9 = figure;clf
[~,order] = sort(P(:,1));
plot(1:size(X,1),P(order,1),'r-',1:size(X,1),P(order,2),'b-',1:size(X,1),P(order,3),'y-');
legend({'Cluster 1 Score' 'Cluster 2 Score' 'Cluster 3 Score'},'location','NW');
ylabel('Cluster Membership Score');
xlabel('Point Ranking');
通过AIC准则寻找最优的分类数
高斯混合模型法的最大好处是给出分类好坏的标准
AIC = zeros(1,4);
NlogL = AIC;
GM = cell(1,4);
for k = 1:4
GM{k} = gmdistributionfit(X,k);
AIC(k)= GM{k}AIC;
NlogL(k) = GM{k}NlogL;
end
[minAIC,numComponents] = min(AIC);
按AIC准则给出的最优分类数为: 3 对应的AIC值为: 864763
后记
(1)pluskid指出K均值算法的初值对结果很重要,但是在运行时还没有发现类似的结果。也许Mathworks对该算法进行过优化。有时间会仔细研究下代码,将结果放上来。
分享:
56
喜欢
4
赠金笔
阅读(21209)┊ 评论 (4)┊ 收藏(1) ┊转载原文 ┊ 喜欢▼ ┊打印┊举报
前一篇:[转载]拉普拉斯矩阵
后一篇:[转载]用matlab做聚类分析
欢迎分享,转载请注明来源:品搜搜测评网