K-means算法过程示意介绍
- 格式:pdf
- 大小:134.30 KB
- 文档页数:2
1K-means算法原理模型1967年,James MacQueen提出“K-Means”(K均值),是基于距离的聚类算法。
两个对象距离越近,相似度越大,对指定的K个划分,迭代确定每个簇的中心和比较靠近该中心的归属节点,达到平方误差最小的平衡状态。
算法算法的描述如下:1、随机选取k个聚类质心点(cluster centroids)为u1,u2,…,uk∈Rn.2、重复下面过程直到收敛{对于每一个样例i,计算与质心的最小距离,判断其应该属于的类对于每一个类j,重新计算该类的质心,向量的平均值}算法的目标函数如下:J函数表示每个样本点到其质心的距离平方和。
K-means是要将J调整到最小。
固定每类的质心u(j),调整样本的所属类别c(i),让J函数减少。
然后,固定c(i),调整每个类的质心u(j),使J减少。
当J递减到最小时,u和c也同时收敛。
函数J是非凸函数,意味着我们不能保证取得的最小值是全局最小值。
K-means算法体现了EM迭代的思想,E步是估计隐含类别y的期望值,M步调整其他参数使得在给定类别y的情况下,极大似然估计P(x,y)能够达到极大值。
然后在其他参数确定的情况下,重新估计y,周而复始,直至收敛。
用K-means 解释就是开始不知道每个样本对应的隐含变量类别c(i),E步随便定一个c(i)给样本,然后是M步让P(x,c(i))最大(这里是让J最小),求出给定c的情况下,J最小时的质心u(j)(其他参数),质心确定后,重新E步估计样本的更好c(i)(归属到距离小的相似质心分类中,使J最小),c(i)得到重新调整。
重复到c没有调整。
算法是硬指定隐含类别变量给一个样本,而不是对每个类别赋予不同的概率。
总体思想是一个迭代优化过程,有目标函数,也有参数变量,只是多了个隐含变量类别c(i),确定其他参数质心u(j)估计隐含变量,再确定隐含变量估计其他参数,直至目标函数最优。
问题算法的缺点是:类型数目k需要首先较为合理的确定下来,没有在迭代过程中优化;算法会获得局部最优结果,需要好的选择初始的质心算法;小数量类别和孤立点的影响,需要考虑这些点的影响;计算数据相似度的距离算法和向量的特征维度,需要先确定下来。
请简述k-means算法的流程K均值聚类算法(k-means clustering algorithm)是数据挖掘中常用的一种聚类算法之一。
它是一种无监督学习算法,能够将样本数据分成K个不同的簇。
本文将简述K均值聚类算法的流程,包括初始中心点的选择、簇分配和中心点更新等步骤,具体分为以下几个部分进行描述。
一、初始中心点的选择K均值聚类算法的第一步是选择初始中心点。
中心点的选择对聚类结果有一定的影响,因此选择合适的初始中心点十分重要。
最常用的方法是随机选择K个样本作为初始中心点,也可以通过其他方法选择。
二、簇分配初始中心点确定后,下一步是将每个样本分配给最近的中心点所属的簇。
计算样本到每个中心点的距离,然后将样本分配给离它最近的中心点所属的簇。
三、中心点更新所有样本都被分配到了簇后,接下来的步骤是更新每个簇的中心点。
将属于同一簇的所有样本的坐标取平均值,得到该簇的新的中心点。
这个新的中心点将被用于下一次迭代的簇分配。
簇分配和中心点更新这两个步骤会不断重复,直到收敛。
四、收敛条件K均值聚类算法的收敛条件通常是中心点不再发生明显变动,即所有的样本分配到的簇不再发生变化,或者中心点的移动距离小于一个给定的阈值。
五、算法复杂度分析K均值聚类算法的时间复杂度主要取决于簇分配和中心点更新这两个步骤的计算量。
在每次簇分配中,对于每个样本需要计算与K个中心点的距离,因此时间复杂度为O(N*K*d),其中N为样本数目,K为簇的数目,d为样本的维度。
在每次中心点更新中,需要对每个簇中的样本进行平均计算,因此时间复杂度为O(N*d)。
总的时间复杂度为O(T*N*K*d),其中T为迭代次数。
当样本数目较大时,计算量会显著增加。
六、优化方法K均值聚类算法还有一些优化方法,可以提高算法的运行效率和准确性。
其中包括:修改初始中心点的选择方法,使用k-d 树等数据结构来加速簇分配过程,引入加权距离等。
总结而言,K均值聚类算法的流程包括初始中心点的选择、簇分配和中心点更新等步骤。
kmeans聚类算法原理与步骤K-means聚类算法原理与步骤K-means聚类算法是一种常用的无监督学习算法,用于将数据集划分成不同的类别。
该算法的原理和步骤如下:一、算法原理1. 初始化:选择K个初始的聚类中心点,可以是随机选择或者根据领域知识进行选择。
2. 数据分配:根据欧氏距离等度量方式,将每个样本点分配到与其最近的聚类中心点所代表的类别。
3. 聚类中心更新:根据当前分配的聚类结果,重新计算每个类别的聚类中心点。
4. 重复步骤2和步骤3,直到聚类中心点不再发生变化或达到预设的迭代次数。
5. 输出最终的聚类结果。
二、算法步骤1. 选择聚类的数量K:根据问题的具体要求和领域知识,确定聚类的数量K。
2. 初始化聚类中心点:从数据集中随机选择K个样本点作为初始的聚类中心点。
3. 计算样本点到聚类中心点的距离:对于每个样本点,计算其与各个聚类中心点之间的距离,常用的距离度量方式是欧氏距离。
4. 将样本点分配到最近的聚类中心点所代表的类别:将每个样本点分配到与其最近的聚类中心点所代表的类别,形成初始的聚类结果。
5. 更新聚类中心点:根据当前的聚类结果,重新计算每个类别的聚类中心点,通常是计算类别内样本点的均值。
6. 重复步骤3和步骤5,直到聚类中心点不再发生变化或达到预设的迭代次数。
如果聚类中心点不再发生变化,则算法收敛;如果达到预设的迭代次数,但聚类中心点仍在发生变化,则可以考虑增加迭代次数或调整聚类的数量K。
7. 输出聚类结果:将最终的聚类结果输出,每个样本点属于某个类别。
三、算法优缺点1. 优点:- K-means算法简单易实现,计算效率高。
- 对大规模数据集有较好的可扩展性。
- 聚类结果具有较好的可解释性。
2. 缺点:- 对初始聚类中心点的选择敏感,可能会得到不同的聚类结果。
- 对噪声和异常点较为敏感,可能会影响聚类结果的准确性。
- 需要提前确定聚类的数量K,如果选择不当可能会影响聚类结果。
kmeans聚类算法简单例题讲解K-Means聚类算法是目前机器学习中最简单的一种聚类算法,通常用于将样本分到最合适的组中,其从概念上来看就是将相似的样本聚在一起。
K-Means聚类算法假设类内点的方差最小,这一假设称为最小化类内平方和(Within-Cluster Sum of Squares)。
这一算法简单实用,且结果往往受到较少影响,被广泛应用于聚类任务中。
本文将以一个简单的例子来讲解K-Means聚类算法的原理和实现方法,帮助读者更好的理解和使用K-Means聚类算法。
假设有一组包含5个样本的数据,在二维空间(X轴和Y轴)映射出来的结果如下:(2,4)、(3,2)、(1,1)、(0,3)和(5,6)K-Means聚类算法的基本流程为:1.先,我们需要指定类别的个数K,这里我们可以指定K=2,代表将样本分为两类2.下来,我们需要随机初始化每个类的中心点,这里我们分别将中心点定为(2,4)和(5,6),表示类1的中心点为(2,4),类2的中心点为(5,6)3.下来,每个样本将会和每个类的中心点比较,以距离最小的为准,依次划分到类1或类2中4.后,我们计算每个类的平均值,将其作为新的类中心点,重复步骤3,直到类中心点不再发生改变在本次任务中,我们共经历了四次计算:第一次:将样本划分为两个类,第一类的中心点为(2,4),第二类的中心点为(5,6),按照最小距离原则,(2,4)和(3,2)划分到第一类,(1,1)和(0,3)划分到第二类,(5,6)表示第二类的中心点,但也属于第二类:第二次:计算每个类的平均值,第一类为(2.5,3),第二类为(2.5,4),将其作为新的类中心点:第三次:按照最小距离原则,(2,4)、(3,2)划分到第一类,(1,1)、(0,3)和(5,6)划分到第二类:第四次:计算每个类的平均值,第一类为(2.3,3.3),第二类为(2.5,4.5),将其作为新的类中心点:从上述例子可以看出,K-Means聚类算法是一种有效的方法,可以将样本数据划分至最合适的类别中。
K-means聚类算法是一种经典的基于距离的聚类算法,它被广泛应用于数据挖掘、模式识别、图像分割等领域。
K-means算法通过不断迭代更新簇中心来实现数据点的聚类,其算法流程如下:1. 初始化:首先需要确定要将数据分成的簇的个数K,然后随机初始化K个簇中心,可以从数据集中随机选择K个样本作为初始簇中心。
2. 分配数据:对于每个数据点,计算它与各个簇中心的距离,将该数据点分配给距离最近的簇,并更新该数据点所属簇的信息。
3. 更新簇中心:计算每个簇中所有数据点的均值,将该均值作为新的簇中心,更新所有簇中心的位置。
4. 重复迭代:重复步骤2和步骤3,直到簇中心不再发生变化或者达到预定的迭代次数。
5. 输出结果:最终得到K个簇,每个簇包含一组数据点,形成了聚类结果。
K-means算法的优点在于简单易实现,时间复杂度低,适用于大规模数据;但也存在一些缺点,如对初始聚类中心敏感,对噪声和离裙点敏感,需要事先确定聚类个数K等。
K-means聚类算法是一种常用的聚类方法,通过迭代更新簇中心的方式逐步将数据点划分为不同的簇,实现数据的聚类分析。
通过对算法流程的详细了解,可以更好地应用K-means算法解决实际问题。
K-means算法是一种非常经典的聚类算法,它在数据挖掘和机器学习领域有着广泛的应用。
在实际问题中,K-means算法可以帮助我们对数据进行分组和分类,从而更好地理解数据的内在规律,为我们提供更准确的数据分析和预测。
接下来,我们将对K-means聚类算法的一些关键要点进行探讨,包括算法的优化、应用场景、以及与其他聚类算法的比较等方面。
1. 算法的优化:在实际应用中,K-means算法可能会受到初始簇中心的选择和迭代次数的影响,容易收敛到局部最优解。
有一些改进的方法可以用来优化K-means算法,例如K-means++算法通过改进初始簇中心的选择方式,来减少算法收敛到局部最优解的可能性;另外,Batch K-means算法通过批量更新簇中心的方式来加快算法的收敛速度;而Distributed K-means算法则是针对大规模数据集,通过并行计算的方式来提高算法的效率。
K-means聚类算法的实现及应用内容摘要本文在分析和实现经典k-means算法的基础上,针对初始类中心选择问题,结合已有的工作,基于对象距离和密度对算法进行了改进。
在算法实现部分使用vc6.0作为开发环境、sql sever2005作为后台数据库对算法进行了验证,实验表明,改进后的算法可以提高算法稳定性,并减少迭代次数。
关键字 k-means;随机聚类;优化聚类;记录的密度1 引言1.1聚类相关知识介绍聚类分析是直接比较各事物之间性质,将性质相近的归为一类,将性质不同的归为一类,在医学实践中也经常需要做一些分类工作。
如根据病人一系列症状、体征和生化检查的结果,将其划分成某几种方法适合用于甲类病的检查,另几种方法适合用于乙类病的检查,等等。
聚类分析被广泛研究了许多年。
基于聚类分析的工具已经被加入到许多统计分析软件或系统中,入s-plus,spss,以及sas。
大体上,聚类算法可以划分为如下几类:1) 划分方法。
2) 层次方法。
3) 基于密度的算法。
4) 基于网格的方法。
5) 基于模型的方法。
1.2 研究聚类算法的意义在很多情况下,研究的目标之间很难找到直接的联系,很难用理论的途径去解决。
在各目标之间找不到明显的关联,所能得到的只是些模糊的认识,由长期的经验所形成的感知和由测量所积累的数据。
因此,若能用计算机技术对以往的经验、观察、数据进行总结,寻找个目标间的各种联系或目标的优化区域、优化方向,则是对实际问题的解决具有指导意义和应用价值的。
在无监督情况下,我们可以尝试多种方式描述问题,其中之一是将问题陈述为对数分组或聚类的处理。
尽管得到的聚类算法没有明显的理论性,但它确实是模式识别研究中非常有用的一类技术。
聚类是一个将数据集划分为若干聚类的过程,是同一聚类具有较高相似性,不同聚类不具相似性,相似或不相似根据数据的属性值来度量,通常使用基于距离的方法。
通过聚类,可以发现数据密集和稀疏的区域,从而发现数据整体的分布模式,以及数据属性间有意义的关联。
python 时间序列kmeans算法示例及概述说明1. 引言1.1 概述时间序列分析是指对一系列按时间顺序排列的数据进行统计和预测的方法。
时间序列数据在许多领域中都有广泛应用,例如金融市场、气象科学、医疗健康等。
针对时间序列数据的特点,K-means算法是一种常用的聚类分析方法,可以将相似模式的数据点聚合成簇,并对簇进行进一步分析。
本文主要介绍了Python在时间序列K-means算法中的应用,并提供了示例和概述说明。
首先概述了整篇文章结构,接着从引言部分开始逐步详细介绍相关内容。
1.2 文章结构文章将按照以下结构进行展开:引言:介绍本文的背景和目的。
时间序列分析概述:简单介绍时间序列及其在不同领域的应用,并强调Python 在时间序列分析中的优势。
K-means算法简介:阐述K-means算法的原理、步骤解释以及聚类效果评估指标。
Python实现时间序列K-means算法示例:展示如何使用Python实现时间序列K-means算法,包括数据准备与预处理、算法实现步骤详解以及结果分析与可视化展示。
结论与展望:总结本文的研究成果,并提出进一步研究的方向。
1.3 目的本文的主要目的是介绍Python在时间序列K-means算法中的应用,并通过详细的示例和概述说明帮助读者理解该算法在实际问题中的作用。
通过阐述时间序列分析的概念、K-means算法原理以及Python编程实现过程,读者可以学习如何使用Python对时间序列数据进行聚类分析。
接下来,我们将从时间序列分析概述部分开始讲解。
2. 时间序列分析概述2.1 时间序列概念介绍时间序列是按照时间顺序排列的一系列数据点的集合。
它们通常表示随着时间的推移而变化的某种现象,例如股票价格、气温变化、人口增长等。
时间序列的特点在于数据点之间存在相关性和依赖性,因为后一个数据点往往受前一个或多个数据点的影响。
2.2 时间序列分析应用领域时间序列分析在许多领域中都有广泛的应用。
k-means聚类法标准化数值概述及解释说明1. 引言1.1 概述在数据分析和机器学习领域中,聚类算法是一种常用的无监督学习方法,它可以将具有相似特征的数据点划分为不同的组或簇。
其中,k-means聚类法是一种经典且广泛使用的聚类算法。
它通过迭代计算数据点与各个簇中心之间的距离,并将数据点划分到距离最近的簇中心。
k-means聚类法在数据挖掘、图像处理、模式识别等领域有着广泛的应用。
1.2 文章结构本文主要围绕着k-means聚类法以及标准化数值展开讨论。
首先介绍了k-means聚类法的原理和应用场景,详细解释了其算法步骤和常用的聚类质量评估指标。
接下来对标准化数值进行概述,并阐述了常见的标准化方法以及标准化所具有的优缺点。
随后,文章从影响因素分析角度探讨了k-means聚类算法与标准化数值之间的关系,并深入剖析了标准化在k-means中的作用及优势。
最后,通过实例解释和说明,对文中所述的理论和观点进行了验证与分析。
1.3 目的本文旨在向读者介绍k-means聚类法及其在数据分析中的应用,并深入探讨标准化数值在k-means聚类算法中扮演的重要角色。
通过本文的阐述,希望读者能够理解k-means聚类法的基本原理、运行步骤以及质量评估指标,并认识到标准化数值对于提高聚类算法性能以及结果准确性的重要性。
最终,通过结论与展望部分,给出对未来研究方向和应用领域的展望和建议,为相关领域研究者提供参考和启示。
2. k-means聚类法:2.1 原理及应用场景:k-means聚类算法是一种常用的无监督学习方法,主要用于将数据集划分为k 个不同的簇(cluster)。
该算法基于距离度量来确定样本之间的相似性,其中每个样本被划分到距离最近的簇。
它的主要应用场景包括图像分割、文本分类、市场细分等。
2.2 算法步骤:k-means聚类算法具有以下几个步骤:1. 初始化: 选择k个随机点作为初始质心。
2. 分配: 对于每个数据点,计算其与各个质心之间的距离,并将其分配到最近的质心所属的簇中。
kmeans算法实例1. 算法介绍kmeans算法是一种常用的聚类算法,它将数据点根据其特征进行分组,每个分组称为一个簇,使得簇内的数据点相似度尽可能高,而簇间的相似度尽可能低。
kmeans算法通过迭代的方式不断优化簇的分配,最终达到较好的聚类效果。
2. 算法步骤kmeans算法的步骤如下:2.1 初始化1.指定簇的个数k,随机选择k个数据点作为初始聚类中心。
2.2 分配数据点2.对于每个数据点,计算其与各个聚类中心的距离,并将其分配给最近的聚类中心。
2.3 更新聚类中心3.根据每个簇中的数据点,重新计算聚类中心,即取簇内数据点的平均值。
2.4 重复迭代4.重复步骤2和步骤3,直到聚类中心的变化很小或达到设定的迭代次数。
3. 实例演示下面通过一个实例演示kmeans算法的应用过程。
3.1 数据准备我们假设有一组二维数据点,共有6个点,如下所示: |数据点|横坐标|纵坐标| |—|—|—| |A|1|1| |B|1|2| |C|4|5| |D|5|7| |E|6|6| |F|7|9|3.2 初始化假设我们将数据分为3个簇,我们可以随机选择3个数据点作为初始聚类中心,比如选择A、C和F作为初始聚类中心。
3.3 分配数据点计算每个数据点与聚类中心的距离,并将其分配给最近的聚类中心。
根据欧氏距离公式,我们可以计算每个数据点与聚类中心的距离:对于数据点A,与聚类中心的距离依次为:0、4、10对于数据点B,与聚类中心的距离依次为:1、5、11对于数据点C,与聚类中心的距离依次为:0、8、13对于数据点D,与聚类中心的距离依次为:2、8、13对于数据点E,与聚类中心的距离依次为:3、9、14对于数据点F,与聚类中心的距离依次为:4、3、0根据距离的计算结果,我们可以得到每个数据点的最近聚类中心:A - 聚类中心1B - 聚类中心1C - 聚类中心2D - 聚类中心2E - 聚类中心2F - 聚类中心33.4 更新聚类中心根据簇内的数据点,重新计算聚类中心。
k-means公式和步骤
标题,k-means算法,公式和步骤。
公式:
K-means算法是一种基于距离的聚类算法,其核心公式如下:
1. 选择k个初始聚类中心点μ1, μ2, ..., μk.
2. 将每个数据点分配到最近的聚类中心点。
3. 根据分配的数据点重新计算聚类中心点。
4. 重复步骤2和3,直到聚类中心点不再改变或者达到预定的迭代次数。
步骤:
1. 选择k个初始聚类中心点,首先需要确定聚类的个数k,然后随机选择k个数据点作为初始的聚类中心点。
2. 分配数据点到最近的聚类中心点,对于每个数据点,计算其与各个聚类中心点的距离,将其分配到距离最近的聚类中心点所属的类别中。
3. 重新计算聚类中心点,对于每个类别,重新计算其聚类中心点,即取该类别中所有数据点的平均值作为新的聚类中心点。
4. 重复步骤2和3,重复进行数据点的重新分配和聚类中心点的更新,直到满足停止条件,如聚类中心点不再改变或者达到预定的迭代次数。
通过以上公式和步骤,我们可以看出k-means算法的基本原理是通过不断迭代的方式,将数据点进行聚类,使得同一类别内的数据点尽量相似,不同类别之间的数据点尽量不相似。
这使得k-means算法成为了一种常用的聚类算法,被广泛应用于数据挖掘、模式识别和机器学习等领域。
K-means聚类算法基本思想聚类分析以相似性为基础,在一个聚类中的模式之间比不在同一聚类中的模式之间具有更多的相似性。
K-means 也是聚类算法中最简单的一种。
以星团划分为例,,首先随机选取k个宇宙中的点(或者k个星星)作为k个星团的质心,然后第一步对于每一个星星计算其到k个质心中每一个的距离,然后选取距离最近的那个星团作为,这样经过第一步每一个星星都有了所属的星团;第二步对于每一个星团,重新计算它的质心(对里面所有的星星坐标求平均)。
重复迭代第一步和第二步直到质心不变或者变化很小。
K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般。
最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中,那本书比较注重应用。
看了Andrew Ng的这个讲义后才有些明白K-means后面包含的EM 思想。
聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。
而聚类的样本中却没有给定y,只有特征x,比如假设宇宙中的星星可以表示成三维空间中的点集。
聚类的目的是找到每个样本x潜在的类别y,并将同类别y的样本x放在一起。
比如上面的星星,聚类后结果是一个个星团,星团里面的点相互距离比较近,星团间的星星距离就比较远了。
在聚类问题中,给我们的训练样本是,每个,没有了y。
K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:1、随机选取k个聚类质心点(cluster centroids)为。
2、重复下面过程直到收敛{对于每一个样例i,计算其应该属于的类对于每一个类j,重新计算该类的质心}K是我们事先给定的聚类数,代表样例i与k个类中距离最近的那个类,的值是1到k中的一个。
质心代表我们对属于同一个类的样本中心点的猜测,拿星团模型来解释就是要将所有的星星聚成k个星团,首先随机选取k个宇宙中的点(或者k个星星)作为k个星团的质心,然后第一步对于每一个星星计算其到k个质心中每一个的距离,然后选取距离最近的那个星团作为,这样经过第一步每一个星星都有了所属的星团;第二步对于每一个星团,重新计算它的质心(对里面所有的星星坐标求平均)。
python 一维数据的k-means算法概述及解释说明1. 引言1.1 概述本文将介绍K-means算法在处理一维数据上的应用。
K-means算法是一种常用的聚类分析方法,可帮助我们将数据集划分为不同的簇。
聚类分析是一种无监督学习方法,通过找到数据中的相似性来对其进行分类,从而提取出隐藏在数据背后的模式和特征。
1.2 文章结构本文共包含以下几个部分:引言、K-means算法概述、一维数据的K-means 算法解释、示例与实现讲解以及结论与展望。
在引言部分,我们将提供一个简要介绍并概括本文所要讨论的主题。
接下来,在K-means算法概述中,我们将详细解释该算法的原理、步骤说明以及适用的场景。
然后,我们会详细探讨如何在一维数据上应用K-means算法,并对其中涉及到的数据预处理、聚类中心计算与更新以及聚类结果评估与迭代调整进行解释。
紧接着,在示例与实现讲解部分,我们将通过具体示例来演示如何使用Python 编写代码实现一维数据的K-means算法,并给出结果可视化和分析解读。
最后,在结论与展望部分,我们将总结本文的主要观点和发现,并展望未来关于K-means算法在一维数据上的研究方向和应用场景的拓展。
1.3 目的本文的目标是为读者提供对K-means算法在处理一维数据时的全面了解和应用指导。
通过阅读本文,读者将了解K-means算法的基本原理、步骤说明以及适用场景,并能够根据具体需求编写代码实现该算法并进行结果分析和解释。
同时,我们还希望通过本文对一维数据的K-means算法进行详细讲解,加深读者对该算法在实际问题中的应用理解和掌握能力。
2. K-means算法概述:2.1 算法原理:K-means算法是一种基于聚类的机器学习算法,主要用于将一组数据分成k 个不同的簇。
该算法通过计算数据点与各个簇中心之间的距离来确定每个数据点所属的簇,并且不断迭代更新簇中心以优化聚类结果。
其核心思想是最小化数据点到其所属簇中心的欧氏距离平方和。
k-means聚类算法原理简析k-means聚类算法原理简介概要K-means算法是最普及的聚类算法,也是⼀个⽐较简单的聚类算法。
算法接受⼀个未标记的数据集,然后将数据聚类成不同的组,同时,k-means算法也是⼀种⽆监督学习。
算法思想k-means算法的思想⽐较简单,假设我们要把数据分成K个类,⼤概可以分为以下⼏个步骤:1.随机选取k个点,作为聚类中⼼;2.计算每个点分别到k个聚类中⼼的聚类,然后将该点分到最近的聚类中⼼,这样就⾏成了k个簇;3.再重新计算每个簇的质⼼(均值);4.重复以上2~4步,直到质⼼的位置不再发⽣变化或者达到设定的迭代次数。
算法流程图解下⾯我们通过⼀个具体的例⼦来理解这个算法(我这⾥⽤到了Andrew Ng的机器学习教程中的图):假设我们⾸先拿到了这样⼀个数据,要把它分成两类:我们⼈眼当然可以很快的分辨出来,可以在两个聚类间找到⼀条合理的分界线,那么⽤k-means算法来解决这个问题会是怎样的呢?⾸先我们随机选取两个点作为聚类中⼼(因为已经明确是分为两类):接下来就可以开始计算每个点到红点和蓝点的距离了,离红点近就标记为红⾊,离蓝点近就标记为蓝⾊。
结果为下图:很明显,这样完全不是我们想要的结果,接下来我们进⾏第三步,重新计算聚类中⼼的位置。
红X和蓝X都向中间靠拢了⼀点。
我们可以看到,聚类中⼼发⽣改变后,其他点离两个聚类中⼼的距离也跟随着发⽣了变化。
然后我们重复第⼆步,根据每个点到两个聚类中⼼的距离远近来进⾏重新分类,离红X近的归为红类,离蓝X近的归为蓝类。
之前站错了队伍的⼀些点重新进⾏了调整,现在的分类离我们的⽬标越来越近了,但还没有达到最佳的分类效果。
接下来继续重复上⾯的步骤,重新计算聚类中⼼的位置,再重新分类,不断迭代,直⾄聚类中⼼的位置不再变化(变化范围达到设定值)或达到迭代次数为⽌。
这样我们就利⽤k-means算法把这个数据很好的分为两类啦。
我们可以看到,在整个过程中,我们都没有去监督算法,告诉他具体是分错了还是对了,只是在开始的时候告诉他要把这个数据分成多少类,然后后⾯的操作都是由他⾃⼰完成,完全没有⼈为的让他进⾏分类的学习,也没有帮助他纠正错误,所以k-means算法也是⼀种⽆监督学习⽅法。
K-means算法简介
K-means算法是典型的基于距离的聚类算法,采用距离作为相似性的评价指标,两个对象的距离越近,其相似度就越大。
而簇是由距离靠近的对象组成的,因此算法目的是得到紧凑并且独立的簇。
假设要将对象分成k个簇,算法过程如下:
(1) 随机选取任意k个对象作为初始聚类的中心(质心,Centroid),初始代表每一个簇;
(2) 对数据集中剩余的每个对象根据它们与各个簇中心的距离将每个对象重新赋给最近的簇;
(3) 重新计算已经得到的各个簇的质心;
(4) 迭代步骤(2)-(3)直至新的质心与原来的质心相等或小于设定的阈值,算法结束。
随意找几个数据简单模拟(借用当年老师教的方法^_^)算法如下:
,A2,…,A6:
要聚成2类,算法过程如下:
(1) 假设选择A1和A2为初始质心;
(2) 计算A3-A6与A1和A2的距离,这里用欧氏距离公式d = sqrt((x1-x2)2+(y1-
2
距离的比较,A3、A4、A6都离A2近,A5与A1和A2距离相同,假设A5也分到A2这一簇,因此形成新的两簇:
簇1:A1
簇2:A2,A3,A4,A5,A6
(4) 计算新簇的质心
簇1质心:A1
簇2:新质心“C_temp”计算用每个维度的平均值
2簇:
簇1:A1,A2,A3
簇2:A4,A5,A6
新质心1“C_temp1”:((A1.x+A2.x+A3.x)/3 , (A1.y+A2.y+A3.y)/3)=(1.67, 2)
bingoㄟ(◑‿◐ )ㄏ
簇1:A1,A2,A3
簇2:A4,A5,A6
提示:
(1) 在K-means 算法k值通常取决于人的主观经验;
(2) 距离公式常用欧氏距离和余弦相似度公式,前者是根据位置坐标直接计算的,主要体现个体数值特征的差异,而后者更多体现了方向上的差异而不是位置上的,cos θ越接近1个体越相似,可以修正不同度量标准不统一的问题;
(3) K-means算法获得的是局部最优解,在算法中,初始聚类中心常常是随机选择的,一旦初始值选择的不好,可能无法得到有效的聚类结果。