MLK,即MachineLearningKnowledge,本专栏整理机器学习的重点知识,方便日后复习。内容主要来源于《百面机器学习》这本书,结合自己的经历和思考的一些总结和总结。本讲的主要内容是机器学习中无监督学习的经典原理和算法,无监督,即没有目标(标签)的算法模型。索引K均值聚类算法高斯混合模型自组织映射神经网络聚类算法评价指标常用聚类算法与常用聚类算法的Python实现比较机器学习存在一个问题,就是模型没有目标。向机器输入大量特征数据,期望机器学习它们之间的共性或结构或关联,而不需要像监督学习那样输出一定的预测值。K-Mean聚类算法K-Mean的基本思想是迭代寻找K个簇(Cluster)的划分方案,使得聚类结果对应的CostFunction最小。一般而言,K-Mean的CostFunction是每个样本与其所属簇中心点的误差平方和,公式为:其中Xi代表第i个样本,Ci为Xi所属簇,μci代表簇对应的中心点,M为样本总数。首先我们来看一下K-Mean算法的具体步骤:1)数据预处理,如归一化、离群值处理;2)随机抽取K个簇(K手动设置);3)定义成本函数:4)不断迭代以下👇CF收敛之前的步骤:对于每个样本Xi,将其分配到最近的簇:对于每个簇,重新计算簇中心:K-Mean的优点1)对于大数据集,该算法相对高效,计算复杂度为O(NKt),其中N为样本数,K为簇数,t为迭代次数;2)一般来说,可以满足集群的需要。K-Mean的缺点1)需要人工确定K值,有时大数据人工预测K值效果不是很好;2)K-Mean容易局部最优,所以一开始效果受初值影响很大;3)容易受离群点和噪声的影响。K-Mean调优思路1)数据归一化和异常值处理。因为K-Mean本质上是一种基于欧式距离度量的数据聚类方法,少数极值会影响聚类效果,不同维度的数据会有不同的效果,所以需要进行预处理。2)合理选择K值。K值不是拍脑袋得到的,需要用科学的方法来确定。一般可以通过多次测试结果来确定,比如使用肘部法:其中横轴为K的值,纵轴为误差平方和定义的LossFunction。可以看出,K值越大,距离之和越小。我们看到当K=3时,曲线出现了一个“拐点”,所以我们一般选择这个点作为我们的K值。另外这里介绍一个GS(GapStatistic)方法,可以参考:https://blog.csdn.net/baidu_1...3)使用核函数。传统的欧几里得距离度量方法使得K-Mean算法在本质上假设每个簇的数据具有相同的先验概率,呈现球形或高维球形分布,但这种分布在现实中并不常见。这个时候我们引入A核K-Mean算法,主要针对非凸数据分布。这种核聚类方法主要是将输入控件中的数据点通过非线性映射映射到高层特征空间,并在新的特征空间进行聚类。非线性映射增加了数据点的线性可分性。概率,从而获得更高精度的聚类结果。下面说一下这两种算法1)K-Mean++算法从名字上看这是K-Mean的改进版,主要表现在初始值的选取上。原始的K-Mean是随机选择初始值,而K-Mean++算法是:第一个聚类中心也是随机的;好的;根据上述思路,选取k个初始聚类中心;初值选定后,后续过程同K-Mean。2)ISODATA算法当K取值不确定时,可采用ISODATA算法,全称迭代自组织数据分析法。ISODATA算法在K-Mean算法的基础上增加了两个操作:分裂操作,对应增加聚类中心数的合并操作,对应减少聚类中心数的合并操作。ISODATA的应用也比较复杂,需要填写的参数也比较多:ExpectedclusteringcenterdataK0:在ISODATA运行过程中可以自动改变聚类中心的个数,K0只是一个参考值;每个类别所需的最小样本数Nmin:如果分裂会导致某个子类别包含的样本数小于阈值,则本次分裂操作将被拒绝;最大方差Sigma:用于控制样本在某一类别中的分散程度,当样本的分散程度超过某个阈值时,分裂满足第一个分裂操作;两个聚类中心之间允许的最小距离Dmin:如果两个聚类非常接近,它们将被合并。高斯混合模型高斯模型对应的是高斯分布,也就是我们通常所说的正态分布。高斯混合模型(GMM)也是一种聚类算法,类似于K-Mean算法。EM算法用于迭代计算。高斯混合模型假设每个簇的数据都符合正态分布,当前数据呈现的分布就是各个正态分布的混合结果。高斯混合模型的核心思想,每个个体子模型都是一个标准的高斯分布模型,它的均值和方差是待估计的参数,还有一个参数π,可以理解为权重(或者概率生成数据),其公式为:是一个生成模型,通过EM算法的框架求解。具体迭代过程如下:首先,初始随机选择每个参数的值(一共3个参数,均值、方差和权重),然后迭代以下2次迭代:Stepuntilconvergence:1)StepE:根据当前参数,计算每个点由子模型产生的概率。2)M步:利用E步的估计概率来改进每个子模型的均值、方差和权重。高斯混合模型和K-Mean算法的相同点:1)都是聚类算法,都需要指定K值;2)都使用EM算法求解;3)他们经常获得局部最优。与K-Mean算法相比,它的优点是还可以用于概率密度估计,可以用来产生新的样本点。生成模型:对联合分布概率p(x,y)建模。常见的生成模型包括:隐马尔可夫模型HMM、朴素贝叶斯模型、高斯混合模型GMM、LDA等判别模型:直接对条件概率p(y|x)建模。常见的判别模型包括:线性回归、决策树、支持向量机SVM、k近邻、神经网络等。自组织映射神经网络自组织映射神经网络(Self-OrganizingMap,SOM)是重要的一类无监督学习方法的研究,可用于聚类、高维可视化、数据压缩、特征提取等,因为作者是TeuvoKohonen教授,所以又叫Kohonen网络。在讲SOM之前,先普及一下生物学研究:1)在人脑的感知通道上,神经元组织有序排列;2)大脑皮层会在特定区域对来自外界的特定信息产生兴奋;3)在生物神经系统中存在侧抑制现象,即一个神经细胞兴奋后,会对周围的其他神经细胞产生抑制作用。对于一些失败,表现为获胜的细胞兴奋,失败的细胞受到抑制。而我们的SOM是针对上述生物神经系统功能的人工神经网络模型。SOM本质上是一个双层神经网络,由输入层和输出层组成。输入层模拟对外界输入信息的感知,输出层模拟相应的大脑皮层。1)在输出层,神经元的个数就是簇的个数;2)培训采用“竞争性学习”的方式。对于每个输入样本,将在输出层中找到最匹配的节点。该节点称为“激活节点”(获胜神经元);3)然后使用随机梯度下降法更新激活节点的参数,同时适当更新激活节点附近的节点(更新的“强度”会根据距离来选择);4)上述的“竞争性学习”可以通过神经元之间的横向抑制连接(负反馈路径)来实现。SOM模型一般有两种常见的网络结构,一维和二维:SOM的自组织学习过程可以概括为以下几个子过程:1)初始化:所有的连接权值都用小的初始化随机值。2)竞争:神经元计算每个输入模式的判别函数值,并宣告判别函数值最小的特定神经元为获胜者,每个神经元j的判别函数为:3)合作:获胜的神经元空间确定被激发神经元的拓扑邻域位置,确定激活节点后,更新相邻节点。4)适应:适当调整相关兴奋神经元的连接权重,使获胜神经元对后续应用相似输入模式的反应增强。5)迭代步骤2-4直到特征图变得稳定。经过最后一次迭代,每个样本激活的神经元就是它对应的类别。SOM与K-Mean算法的区别:1)K-Mean算法需要预先确定K值,而SOM不需要;2)K-Mean算法为每个输入数据寻找最相似的类,只更新该类的参数;而SOM会更新相邻节点,所以K-Mean算法受噪声影响较大,SOM可能不太准确;3)SOM具有良好的可视化和优雅的拓扑图。如何训练参数1)设置输出层的神经元个数:如果不清楚,可以设置尽可能多的节点。2)设计输出节点的排列方式:针对不同的问题,提前选择好模式。3)初始化权重。4)设计拓扑邻域:拓扑邻域的设计原则是使邻域不断缩小,使得输出平面上相邻神经元对应的权向量既不同又具有相当大的相似性,从而保证获胜的节点有某一类神经元。当一个模式产生最大响应时,它的邻居节点也会产生一个大的响应。5)设计学习率:学习率是一个递减函数,可以和拓扑邻域一起考虑。刚开始训练的时候,可以选择一个较大的值,下降的比较快,然后慢慢下降。聚类算法的评价指标聚类算法和监督学习一样没有目标,更多的是没有目标,所以评价指标也不同。下面介绍几个常用的评价指标:1)轮廓系数(SilhouetteCoefficient)轮廓是衡量一个节点和它的簇相对于其他簇的相似度。取值范围为-1到1,值越大,节点越匹配其簇,而不匹配相邻簇。集群匹配。如果大多数节点具有高轮廓值,则聚类是合适的。如果许多点的值较低或为负值,则表示分类过多或过少。轮廓系数的定义结合了凝聚度和分离度,其计算步骤如下:对于第i个物体,计算它到簇内所有其他物体的平均距离,记为ai(表示凝聚程度)。任何包含该物体的簇,记为bi(表示分离程度)第i个物体的轮廓系数为si=(bi-ai)/max(ai,bi)2)Calinski-Harabazindex如果标签为未知,sklearn.metrics.calinski_harabaz_score使用Calinski-Harabaz指数评估模型,其中较高的Calinski-Harabaz分数与具有更好定义的集群的模型相关联。优点:当集群密集且分离良好时,分数更高,这与集群的标准概念有关。分数计算快缺点:凸组的Calinski-Harabaz指数通常高于其他聚类概念,例如DBSCAN得到的基于密度的聚类。3)AdjustedRandindex(调整后的兰德指数)该指标是衡量两个assignment相似度的函数,忽略排列组合的优势:随机(uniform)labelassignment对于ARIscore,n_samples的任意值都接近0.0n_clusters(对于原始的Rand指数或V-metric,情况并非如此)。Boundedrange[-1,1]:负值不好(独立标签),相似簇有正ARI,1.0为完美匹配分数。没有对聚类结构做出任何假设:可用于比较聚类算法的结果,例如假设各向同性斑点形状的k-means与可以找到具有“折叠”形状的聚类的谱聚类算法。缺点:与惯性相反,ARI需要基本真实类别的知识,这在实践中很少可用,或者需要人工注释者手动分配(如在监督学习环境中)。但是,ARI也可以在完全无监督的设置中用作可用于聚类模型选择(TODO)的共识索引的构建块。4)MutualInformationbasedscores(基于互信息的分数)给定与labels_true相同样本的基本真实类分配和我们的聚类算法分配的知识labels_pred,互信息是衡量两个分配一致性的函数,忽略排列。该度量有两个不同的标准化版本,标准化互信息(NMI)和调整互信息(AMI)。NMI经常在文献中使用,最近提出了AMI,归一化为机会:优点:随机(均匀)标签分配,对于n_clusters和n_samples的任何值(这不是互信息或V-measures这样的),AMI分数接近0.0视情况而定)。有界范围[0,1]:接近零的值表示两个主要独立的标签分配,而接近1的值表示显着一致。此外,恰好为0的值表示完全独立的标签分配,恰好为1的AMI表示两个标签分配相等(有或没有排列)。没有对聚类结构做出任何假设:可用于比较聚类算法的结果,例如假设各向同性斑点形状的k-means与可以找到具有“折叠”形状的聚类的谱聚类算法。缺点:与惯性相反,基于MI的测量需要了解真实类别的知识,这在实践中很少可用,或者需要手动分配人工注释者(如在监督学习环境中)。然而,基于MI的度量也可以在纯无监督的环境中使用,作为可用于聚类模型选择的共识指数的构建块。常见聚类算法对比下图介绍了Scikitlearn几种常见聚类算法的对比:请贴出:1)K-Means聚类2)层次聚类(Hierarchicalclustering)3)t-SNE聚类4)DBSCAN聚类5)MiniBatchKMeans6)AffinityPropagation(最近邻传播)参考《百面机器学习》——chapter5
