| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> K-Mean聚类算法 -> 正文阅读 |
|
[人工智能]K-Mean聚类算法 |
文章目录0.前置基础0.1聚类简介 [3] [5]**Clustering (聚类)**是常见的unsupervised learning (无监督学习)方法,简单地说就是把相似的对象通过静态分类的方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都有相似的一些属性,常见的包括在坐标系中更加短的空间距离等。聚类的过程,我们并不清楚某一类是什么(通常无标签信息),需要实现的目标只是把相似的样本聚到一起,即只是利用样本数据本身的分布规律。 聚类算法可以大致分为传统聚类算法以及深度聚类算法:
0.2 聚类与分类的区别[4]聚类与分类算法的最大区别在于, 分类的目标类别已知, 而聚类的目标类别是未知的.[5] 分类:类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。属于监督学习。 聚类:事先不知道数据会分为几类,通过聚类分析将数据聚合成几个群体。聚类不需要对数据进行训练和学习。属于无监督学习。 1.K-Means算法思想
简述:k-means即是把 n个点划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。[5] 算法思想是: (版本一)我们需要随机选择K个对象作为初始的聚类中心,然后计算每个对象和各个聚类中心之间的距离,然后将每个对象分配给距离它最近的聚类中心。聚类中心及分配给它们的对象就代表着一个聚类。每分配一个样本,聚类的中心会根据聚类中现有的对象被重新计算。此过程将不断重复,直至满足设置的终止条件。[1] (版本二)先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是以下任何一个:
得到相互分离的球状聚类,在这些聚类中,均值点趋向收敛于聚类中心。 一般会希望得到的聚类大小大致相当,这样把每个观测都分配到离它最近的聚类中心(即均值点)就是比较正确的分配方案。[5] 2.K-Means算法原理及步骤2.1k-means聚类原理[3]k-means聚类可以说是聚类算法中最为常见的,它是基于划分方法聚类的,原理是先初始化k个簇类中心,基于计算样本与中心点的距离归纳各簇类下的所属样本,迭代实现样本与其归属的簇类中心的距离为最小的目标。 已知观测集 ( x 1 , x 2 , … , x n ) (x_1,x_2,…,x_n) (x1?,x2?,…,xn?),其中每个观测都是一个 d-维实向量,k-平均聚类要把这 n个观测划分到k个集合中(k≤n),使得组内平方和最小。换句话说,它的目标是找到使得下式满足的聚类 S i S_i Si?, 其中 μ i μ_i μi? 是 S i S_i Si? 中所有点的均值。[5] K-means 聚类的迭代算法实际上是 EM 算法,EM 算法解决的是在概率模型中含有无法观测的隐含变量情况下的参数估计问题。 在 K-means 中的隐变量是每个类别所属类别。K-means 算法迭代步骤中的 每次确认中心点以后重新进行标记 对应 EM 算法中的 E 步 求当前参数条件下的 Expectation 。而 根据标记重新求中心点 对应 EM 算法中的 M 步 求似然函数最大化时(损失函数最小时)对应的参数 。EM 算法的缺点是容易陷入局部极小值,这也是 K-means 有时会得到局部最优解的原因。[3] 2.2 k-means计算步骤[1]
2.3 k-means术语[5]
2.4 k-means开发流程[5]
2.5 k-means评价标准[5]k-means算法因为手动选取k值和初始化随机质心的缘故,每一次的结果不会完全一样,而且由于手动选取k值,我们需要知道我们选取的k值是否合理,聚类效果好不好,那么如何来评价某一次的聚类效果呢?也许将它们画在图上直接观察是最好的办法,但现实是,我们的数据不会仅仅只有两个特征,一般来说都有十几个特征,而观察十几维的空间对我们来说是一个无法完成的任务。 因此,我们需要一个公式来帮助我们判断聚类的性能,这个公式就是SSE (Sum of Squared Error, 误差平方和 ),它其实就是每一个点到其簇内质心的距离的平方值的总和,这个数值对应k-means函数中clusterAssment矩阵的第一列之和。 SSE值越小表示数据点越接近于它们的质心,聚类效果也越好。 因为对误差取了平方,因此更加重视那些远离中心的点。一种肯定可以降低SSE值的方法是增加簇的个数,但这违背了聚类的目标。聚类的目标是在保持簇数目不变的情况下提高簇的质量。 2.6 k-means应用场景[5]k-means,用于数据集内种类属性不明晰,希望能够通过数据挖掘出或自动归类出有相似特点的对象的场景。其商业界的应用场景一般为挖掘出具有相似特点的潜在客户群体以便公司能够重点研究、对症下药。
3.计算要点3.1 k值选择[1] [3]k值决定了我们将数据划分成多少个簇类。k个初始化的质心的位置选择对最后的聚类结果和整个大代码的运行时间都有非常大的影响。因此需要选择合适的k个质心 一般k值是通过先验知识或交叉验证来选取的。K值的确定常用:先验法、手肘法等方法。
手肘法的缺点在于需要人为判断不够自动化,还有些其他方法如:
3.2 距离问题1、两个集合之间的 x i , x j x_i,x_j xi?,xj?的 L p L_p Lp?距离定义为: 2、当p=1则表示为曼哈顿距离: 3、当p=2则表示为我们常用的欧式距离: 4、当p趋于无穷时,表示为切比雪夫距离,它是各个坐标距离的最大值: 在 4.K-Means优缺点优点
缺点
5.python实现K-means[1]
6.调用机器学习库sklearn实现k-means 聚类[5]
7.延展学习传统的 7.1、K-Means++(初始化优化)针对K-Means算法中随机初始化质心的方法进行了优化。 优化的思路是:各个簇类中心应该互相离得越远越好。基于各点到已有中心点的距离分量,依次随机选取到k个元素作为中心点。离已确定的簇中心点的距离越远,越有可能(可能性正比与距离的平方)被选择作为另一个簇的中心点。 过程:[6] ? a) 从输入的数据点集合中随机选择一个点作为第一个聚类中心μ1μ1 c) 选择一个新的数据点作为新的聚类中心,选择的原则是:
D
(
x
)
D(x)
D(x)较大的点,被选取作为聚类中心的概率较大 如下代码。[3]
7.2、elkan K-Means(距离优化)在传统的
? 第一种规律是对于一个样本点 x x x和两个质心 μ j 1 , μ j 2 μ_{j1},μ_{j2} μj1?,μj2?。如果我们预先计算出了这两个质心之间的距离 D ( j 1 , j 2 ) D(j_1,j_2) D(j1?,j2?),则如果计算发现 2 D ( x , j 1 ) ≤ D ( j 1 , j 2 ) 2D(x,j_1)≤D(j_1,j_2) 2D(x,j1?)≤D(j1?,j2?),我们立即就可以知道 D ( x , j 1 ) ≤ D ( x , j 2 ) D(x,j_1)≤D(x,j_2) D(x,j1?)≤D(x,j2?)。此时我们不需要再计算 D ( x , j 2 ) D(x,j_2) D(x,j2?),也就是说省了一步距离计算。[6] 第二种规律是对于一个样本点xx和两个质心 μ j 1 , μ j 2 μ_{j1},μ_{j2} μj1?,μj2?。我们可以得到 D ( x , j 2 ) ≥ m a x 0 , D ( x , j 1 ) ? D ( j 1 , j 2 ) D(x,j_2)≥max{0,D(x,j_1)?D(j_1,j_2)} D(x,j2?)≥max0,D(x,j1?)?D(j1?,j2?)。这个从三角形的性质也很容易得到。[6] 利用上边的两个规律,elkan K-Means比起传统的K-Means迭代速度有很大的提高。但是如果我们的样本的特征是稀疏的,有缺失值的话,这个方法就不使用了,此时某些距离无法计算,则不能使用该算法。[6] 7.3、Mini Batch K-Means算法(大样本优化)在传统的
为了增加算法的准确性,我们一般会多跑几次 7.4、核K-means [3]基于欧式距离的 K-means 假设了了各个数据簇的数据具有一样的的先验概率并呈现球形分布,但这种分布在实际生活中并不常见。面对非凸的数据分布形状时我们可以引入核函数来优化,这时算法又称为核 K-means 算法,是核聚类方法的一种。核聚类方法的主要思想是通过一个非线性映射,将输入空间中的数据点映射到高位的特征空间中,并在新的特征空间中进行聚类。非线性映射增加了数据点线性可分的概率,从而在经典的聚类算法失效的情况下,通过引入核函数可以达到更为准确的聚类结果。 8.参考文档主要参考:[1] 图解K-Means算法 补充参考: [3] 【机器学习】全面解析Kmeans聚类算法(Python) [6] [K-Means聚类算法原理 ] |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:52:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |