聚类算法知识点整理

聚类分析能够解决的问题
数据集可以分为几类、每个类别有多少样本量、不同类别中各个变量的强弱关系如何、不同类别的典型特征是什么、基于类别划分的其他应用(如图片压缩)

知识点1:Kmeans流程,时间复杂度,优缺点,影响因素,改进方法
知识点2:KNN训练边界、KNN流程、K值选择方法、应用场景
知识点3:聚类应用场景,分类,原理,评价指标
知识点4:相似性度量、距离度量
聚类
1. K-means聚类
目标:最小化平方误差E=i=1kxCi||xμi||22 (在sklearn中inertia_参数为均方差值,越小表示k越好)
对于已有的未标记的样本,同时给定结果聚类的个数k;目标是把比较接近的样本归为一类,总共得到k个cluster。
Kmeans中初始化k个中心点(Kmeans对中心点的选取比较敏感)(随机选择或指定k个样本点),然后计算每个样本到k个选定的样本中心点的距离,再比较待聚类样本到初始样本点的距离,将待聚类的样本指定为距离较近的各个类别,重新计算聚类中心;重复迭代以上过程。
收敛条件:
(1)聚类中心不再发生变化
(2)每个样本到对应聚类中心的距离之和不再有很大的变化
优缺点:
(1)对初始样本点的选取敏感;对异常点免疫效果不佳;对团状数据点效果较好,对带状效果不好
Kmeans和Kmeans++:前者随机选点,后者选最远的K个点作为初始点
(2)线性增长的聚类算法,不适用于海量数据
改进方法:MiniBatchKMeans: 计算过程中不必使用所有的数据样本,而是从不同类别的样本中抽取一部分样本(而非全部样本)作为代表参与聚类算法过程。
数据异常对结果的影响
(1)数据的异常值。需要做异常点的检测和处理
(2)数据的异常量纲。变量归一化或者标准化处理
2. LVQ 学习向量量化
过程:初始化原型向量;随机选取一个有标记的训练样本,找出与其距离最近的原型向量,并根据两者的类别标记是否一直来对原型向量进行相应的更新
停止条件:
(1)达到最大迭代轮数
(2)原型向量更新很小或者不再更新
LVQ是SOM基于监督信息的扩展
【挖个坑,等补充了神经网络来更新下SOM】
3. DBSCAN密度聚类
简单来说,就是初始选择一个点,找它所有在邻域参数内的样本点(核心对象),任选一个核心对象,找出其密度可达(即存在一条路径使路径上的相邻的样本点都在邻域上)的样本,直到找不到为止,则生成第一个样本。
可以类比成传销= =
DBSCAN算法的出发点是基于密度寻找被低密度区域分离的高密度空间。
与Kmeans的比较
对原始数据的分布规律没有明显要求
无需指定聚类数量,对结果的先验要求不高
DBSCAN可区分核心对象、边界点和噪音点,因此对噪声的规律效果好,能有效应对数据噪点
缺点
对于高维问题,基于Eps(半径)和MinPts(密度)的定义是个很大的问题
当簇的密度变化太大时,聚类结果较差
当数据量增大时,要求较大的内存支持,I/O消耗也很大
4. GMM高斯混合模型
简单地说,k-means 的结果是每个数据点被 assign 到其中某一个 cluster 了,而 GMM 则给出这些数据点被 assign 到每个 cluster 的概率,又称作 soft assignment 。
初始参数:样本点属于各个高斯函数的概率,以及每个高斯函数的均值和方差(参数随机给定)
求解过程:
EM算法
E-step: 由已知的均值和方差估算在该参数下的样本点的分布
M-step:由样本点的分布再求均值和方差
优缺点:
优点:多个分布的组合,EM求解,速度快,最大似然概率
缺点:对初始化值敏感,容易陷入局部最优,需要指定k个高斯分布;对非凸分布数据集效果不好
5. 距离的度量
* 幂距离。针对不同的属性给予不同的权重值,决定其属于那个簇
distmk(xi,xj)=(u=1n|xiuxju|p)1r
当r=p时,退化为闵可夫斯基距离。
* 闵可夫斯基距离
distmk(xi,xj)=(u=1n|xiuxju|p)1p
* 曼哈顿距离:P=1的闵可夫斯基距离。曼哈顿距离取消了欧式距离的平方,因此使得离群点的影响减弱
* 欧氏距离:P=2的闵可夫斯基距离。欧式距离通常采用的是原始数据,而并非规划化后的数据,优势在于新增对象不会影响到任意两个对象之间的距离。然而,如果对象属性的度量标准不一样,对结果影响较大。
* 切比雪夫距离
dist(xi,xj)=Maxu=1n(xiuxju)
* 余弦相似度。空间中两个对象的属性所构成的向量之间的夹角大小
* Pearson相似度。可以描述为不同对象偏离拟合的中心线程度,可以进一步的理解为,许多对象的属性拟合成一条直线或者曲线,计算每个对象相对于这条线的各属性偏离程度。只能衡量线性相关性。
* Jaccard相似度
* 汉明距离。将同等长度的字符串由其中一个变换到另一个的最小替换次数。
* 相关距离。随机变量的相似度
ρXY=Cov(X,Y)D(X)D(Y)=E((XEX)(YEY))D(X)D(Y)
6. 在k-means或kNN,我们常用欧氏距离来计算最近的邻居之间的距离,有时也用曼哈顿距离,请对比下这两种距离的差别。
欧式距离 是直线距离
曼哈顿距离是在欧几里得空间的固定直角座标系上两点所形成的线段对轴产生的投影的距离总和,所以也叫街区距离,就是拐来拐去的距离= =
7. 谱聚类
谱聚类
主要思想:把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的
聚类过程:
(1) 构建相似矩阵S
(2) 根据S构建邻接矩阵W,构建度矩阵D
[构建邻接矩阵三种方法\eplison 邻近,k 邻近,全连接(引入核函数通常是RBF)]
(3) 计算出拉普拉斯矩阵L并标准化D1/2LD1/2
(4) 计算最小k1 个特征值所各自对应的特征向量f
(5) 将各自对应的特征向量f 组成的矩阵按行标准化,最终组成n×k1 维的特征矩阵F
(6) 对F 中的每一行作为一个k1 维的样本,共n 个样本,用输入的聚类方法进行聚类,聚类维数为k2
(7) 得到簇划分C(c1,c2,..,ck2)
谱聚类算法的主要优点有:
1)谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到
2)由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。
谱聚类算法的主要缺点有:
1)如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。
2) 聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。


知识点梳理:
知识点1:Kmeans
(1)介绍Kmeans的流程

随机选取k个点作为初始质心
repeat
————–将n个样本点指派到最近的质心
————–更新质心
until 超过迭代次数或者质心不再变化

(2)Kmeans的时间复杂度
O(kTmn) k 是指定的质心个数,T 是迭代次数,m 是样本维度,n 是样本数

(3)Kmeans的优缺点
优点:易于实现,时间复杂度低
缺点:对初始质心的选择敏感、对k选取敏感、只能处理数值形数据、对异常点免疫效果不太好,对非团状数据点聚类效果不好、因为采用迭代的方法和初始点选择容易陷入局部最优解、对样本输入顺序敏感

(4)Kmeans的改进方法
对k选取敏感,以均方差和为度量,根据inertia_来选取k的值;
容易陷入局部最优解: 尝试不同质心、调整迭代次数、找到合适的k
对初始质心选择敏感:Kmeans++
优化Kmeans:使用kd树
将所有的观测实例构建成一颗kd树,之前每个聚类中心都是需要和每个观测点做依次距离计算,现在这些聚类中心根据kd树只需要计算附近的一个局部区域即可。

(5)简要叙述Kmeans++
k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。
从输入的数据点集合中随机选择一个点作为第一个聚类中心
对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
重复2和3直到k个聚类中心被选出来
利用这k个初始的聚类中心来运行标准的k-means算法
从上面的算法描述上可以看到,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下:
先从我们的数据库随机挑个随机点当“种子点”
对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。
然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。
重复2和3直到k个聚类中心被选出来
利用这k个初始的聚类中心来运行标准的k-means算法

(6)Kmeans的影响因素
A.样本输入顺序;
B.模式相似性测度;
C.初始类中心的选取


知识点2: KNN
(1)KNN的流程
a. 计算训练样本和测试样本中每个样本点的距离;
b. 对上面所有的距离值进行排序;
c. 选前k个最小距离的样本;
d. 根据这k个样本的标签进行投票,得到最后的分类类别;

(2)KNN中K的选取
a.如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;(断路)
b.如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。(短路)
c.K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。
在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。

(3)KNN的训练边界是坑坑洼洼的,它适用于样本较多但典型性不好的情况

(4)KNN和Kmeans比较
KNN和Kmeans


知识点3:聚类
(1)聚类原理:相似度度量

(2)聚类评价指标:
分为内部评价和外部评价,其中内部评价(无真实聚类结果作为参照)的要求是类内样本尽可能相似,类间样本尽可能不同
* 群体内所有变量的综合标准差(RMSSTD)
* 群体间差异指标(R-Square)
* 损失的群体内相似性比例(SPR)
* 群体间的距离

(3)聚类的分类:
1. 基于划分的聚类:K-means,k-medoids,CLARANS。
2. 基于层次的聚类:AGNES(自底向上),DIANA(自上向下)。
3. 基于密度的聚类:DBSACN,OPTICS,BIRCH(CF-Tree),CURE。
4. 基于网格的方法:STING,WaveCluster。
5. 基于模型的聚类:EM,SOM,COBWEB。

(4)应用场景
查看异常值
目标用户的群体分类
不同产品间的价值组合
变量聚类还可以处理变量共线性的问题

(5)影响聚类算法结果的主要因素
a.分类准则
b.特征选取
c.模式相似性测度

(6)聚类方法选择
如果数据集是高维的,那么选择谱聚类,它是子空间划分的一种
如果数据量为中小规模,例如100w条以内,那么K均值将是比较好的选择;如果超过100w,可以考虑Mini Batch KMeans
如果数据集中有离群点(噪点),DBSCAN
如果追求更高的分类准确度,谱聚类优于KMeans


知识点4:相似性度量
(1)欧式距离、曼哈顿距离、余弦距离
一个是直线距离,另外一个是街区距离,还有一个为余弦相似度得到。
最常用的是欧式距离。
曼哈顿距离在某些情况下具有更高的稳定性,但是如果数据集中某些特征值很大,用曼哈顿距离的话,这些特征会掩盖其他特征间的邻近关系,这种距离在城市道路导航中会用到。
余弦距离,它适用于特征向量很多的情况,但是它丢弃了向量长度所包含的在某些场景下可能会很有用的一些信息。

(2)协方差和相关性的区别
相关性是协方差的标准化格式。协方差本身很难做比较。例如:如果我们计算工资($)和年龄(岁)的协方差,因为这两个变量有不同的度量,所以我们会得到不能做比较的不同的协方差。为了解决这个问题,我们计算相关性来得到一个介于-1和1之间的值,就可以忽略它们各自不同的度量。

(3)马氏距离和欧式距离
马氏距离是基于卡方分布的,度量多元outlier离群点的统计方法,包括座标旋转和数据压缩
座标旋转的目标:使旋转后的各个维度之间线性无关,所以该旋转过程就是主成分分析的过程。
数据压缩的目标:所以将不同的维度上的数据压缩成为方差都是1的的数据集。
DM(x)=(xμ)TS1(xμ)
其中μ 为均值,S 为协方差矩阵

欧式距离和马式距离都具有平移不变性和旋转不变性
但是马氏距离多了尺度缩放不变性和不受量纲影响的特性(因为都被均一化了),还考虑了样本的分布情况

发布了196 篇原创文章 · 获赞 73 · 访问量 12万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章