机器学习笔记E7.0--聚类
缺一节
机器学习笔记E6--支持向量机
留坑,免得乱了顺序
一、聚类
前面讲到,根据训练数据是否拥有标记信息,机器学习的学习任务可大致分为两大类: 监督学习(supervised learning) 和 无监督学习(unsupervised learning) ,分类和回归是监督学习的代表,而聚类则是无监督学习的代表。
”物以类聚,人以群分”,在实际生活中,存在着大量的分类问题。之前讲到的逻辑回归、分类树等等分类算法都可以找到适当的分类边界。但值得注意的是,我们在使用这些分类算法时,用到的带标记的数据集比起不带标记的,往往意味着更大的收集成本。所以实际上,出于节约成本或者碍于没有条件为数据集增加标记,我们面对的不带标记的成本占有很大的比例。
聚类就是针对大量未标注的数据集,按数据集的内在相似性讲数据集划分为多个类别,使得 类别内的数据相似度最大 而 类别间的数据相似度最小 。这两点也是聚类的 划分原则 。
聚类与分类的不同在于,聚类所要求划分的类是未知的。需要我们将一系列无标签的训练数据,输入到一个算法中,这个算法将寻找这个数据的内在结构。
二、常见的聚类算法
1、K-means
K-means算法 ,也被称为 k-平均 或 k-均值 ,是一种得到最广泛使用的聚类算法,或者成为其他聚类算法的基础。
算法首先随机的选择k个对象,每个对象代表着一个簇的中心(平均值或质心)。对剩余的其他对象,根据其与选定的各个簇中心的距离,将之划分到最近的簇。然后对经过一次划分形成的簇重新计算其簇中心(平均值)。这个过程不断重复,直到准则函数收敛。而K-means所使用的准则函数常常是我们熟悉的 均方误差 MSE (也叫最小平方误差)。
我们来看对于只有两类时候K-means的处理过程。
经过多次迭代后,可以看到,很明显的对红色和蓝色进行了划分。
而在对于有多个类别时,不凑巧,我们选择的初始簇中心有两个比较靠近,那么可能就会出现如下的这种情况:这个时候准则函数依然收敛了,但是,是不是和我们心里预期的四个簇不太一样。这说明了 K-means可以保证收敛,但不保证达到全局最优。 同时,不同的初始簇中心的选取可能会让聚类的结果产生一定差异。即 K-means对初始值很敏感 。
K-means初值敏感那这种问题怎么解决呢?
常见方法有两种:
- 仔细寻找初始值,它不是初值敏感嘛,那我们就在源头上下功夫:
- 随机确定第一个簇的中心,其他簇中心的位置尽量远离已有类的中心;
- Scikit learn中K-means实现中参数
(init='k-means++')
将初始化centroids(质心)彼此远离,得到比随机初始化更好的效果。
- 此外,还可以在结果上做文章,将K-means训练重复多次,每次训练初始值都随机选取,最后选择使目标函数最小的结果。
K-means的优化目标
在了解了K-means的思想后,我们再来看K-means的具体实现。
(Unfinished)需要再推一边补全。
最后再来总结一下。
K-means聚类算法的优缺点
- 优点
- 简单、快速,是解决聚类问题的一种经典算法。
- 对处理大数据集,该算法保持可伸缩性和高效率
- 当结果簇是密集的,它的效果会较好。
- 缺点
- 必须事先给出k值,指定要生成簇的数量,这样会因为人为选择而损失掉数据内在的隐藏联系。
- 对初值敏感,对于不同的初始值,结果会有差异。
- 对噪声和孤立数据敏感。这一点很致命,会让在计算均值生成簇中心时,使簇中心朝噪声偏离,从而使其他的对象在划分归属的簇时产生错分。
- 不适合于发现非凸形状的簇(球状簇)或大小差异较大的簇
- 在簇的平均值可被定义的情况下才能使用,所以对于一些应用可能会不适合
这些是最表面的优缺点总结。关于更加专业的优缺点分析和改进方法需要进一步学习和阅读来了解。
2、层级聚类
对于K-means对初值敏感的问题,虽然我们介绍了两种解决方法,但仍然有很大几率使得结果很糟糕。而 层次聚类 是一种不需要指定随机的中心点,就可以有效的对数据集进行聚类的算法。
层次聚类 (Hierarchical clustering, 也称系统聚类法 ) 是最经典和常用的聚类方法之一,能找到任意形状的类,而且不需指定别数 K 需要 度量样本点之间的 距离以及类 与距离以及类 与之间的联接 之间的联接 (linkage) 程度。
层次聚类聚合-分裂图解.几种常见的相似度/距离计算方法
相似度/距离计算方法总结类间联系程度度量
在合并两个相近的类别时,需要度量两个类别之间的距离。距离度量可选: