聚类这一模块我只停留在表面上的认识,我也没有真正的去敲过代码,理论知识还算行,主要的笔记也就是理论以及做法的一个理解。
K-means聚类:
最常被搞数据的人挂在嘴边,也是比较常用的一种聚类方法,具体做法是:
1:原始数据想要聚成N类,那么选择N个类的重心(一般选择认为必然属于此类的点作为此类初始中心,当然重心表现越好,聚类结果也会越好)
2:计算样本点到N个中心的距离,将样本点归入离它最近的重心所属的类别,完成一次聚类。
3:均值法也好中位值发也罢,从新计算N个类别的重心(虚拟样本),与原重心相比,若两者距离大于设置的阈值α,重复步骤2、3,不断迭代计算,直到新重心与原重心距离小于阈值,聚类结束。
点评:最初选择的点至关重要,并且选择不同的初始点对结果影响较大,波动性太强。Sklearn
库中引入了K-mean++的方法改进这一点。使用方法使用参数:init='k-means++'(替换就行了)。
Mini Batch K-Means聚类
它是Kmeans的一种变形,使用mini-batches去降低了计算时间,具体做法是在每一次迭代训练过程都随机的选取样本(随即样本某种程度上能够代替整体样本)。相比于其他的降低Kmeans收敛时间的算法,Mini Batch K-Means也仅仅是比标准算法差一些。
迭代步骤:
1:在训练样本总随机的分出B个样本
2:与K均值算法相比,数据的更新是在每一个小的样本集上。对于每一个小批量,通过计算平均值得到更新质心,并把小批量里的数据分配给该质心,随着迭代次数的增加,这些质心的变化是逐渐减小的,直到质心稳定或者达到指定的迭代次数,停止计算
Mini Batch K-Means比K-Means有更快的 收敛速度,但同时也降低了聚类的效果,但是在实际项目中却表现得不明显。
体会不到这其中的妙处!!!
Hierarchical clustering (分层聚类)
这种聚类方式是通过 合并或切分来 构建嵌套集群,可以用树的形式表示,树根就是包含所有样本的数据集合,每个样本就是一个叶子节点。
步骤:
1:设置一个能接受样本间距的阈值,循环计算样本之间的间距,若是间距小于阈值,将量样本归入一类,否则将样本分入另外一类。
2:重复上个步骤,直到所有样本都分入一个类别,这些类别的间距已然大于阈值,则我们认为聚类完成,可以退出类别。
注意,类之间间距计算方式多种多样,一下这几张常见的计算方式:
1:取两个类别距离最近两点间距,最近间距小于阈值,归位一类
2:取两个类别距离最远点间距,最远间距小于阈值,归位一类
3:取类别件间距均值作为衡量手段。小于阈值则归位一类
3:去类别间间距中位值,小于阈值则记录为一个类别
1、2两方法过于绝对,最后可能聚成一个稀疏类,3、4两种方法比较折中,一般情况取二法。
聚类方法的测评方式:
既不是评判一个类别当中的正确分类个数,已不是一句召回率来评判,相反,只需要评判,此类别与一个真实分类类别相似,并且与其他类别差别很大(这个差别是个一用距离等因素衡量的),类内样本间距远大类外间距。