我又挖坑了,明明上一篇的问题还没说完 - -!
随便总结一下聚类算法的基本思想
假设对矩阵X聚类,X有m个样本,n维, 聚成k类
K-means
- 随机生成k个点(n维)
- 计算每一个样本到k个点的距离
- 样本i数据离他最近的一个点的那个类
- 计算这k个类的样本中心,成为新的k个点;
- repeat step 2 到 step 4 直至达到迭代次数或者新的点基本不动了
Hierachical clustering
- 计算所有样本之间的距离;
- 合并两个距离近的, 成为一个新的样本(组)
- 重新计算n-1个样本距离*,重复2,直到达到k个组
*计算组与组,或者组与样本的距离时,有如下选项
- average linkage:计算组均值与样本(或者另一组的均值)的距离
- single linkage:计算两个组最近的点的距离
- complete linkage: 计算两个组最远的点的距离
- ward.D:计算合并之后的ESS 和 没合并之前两组的ESS 之和 的差值;ESS就是计算组内每个点到中点的距离之和,也就是说越大组越散;
Mean-shift
这个方法是一个类一个类的迭代;
1、在未被标记的数据点中随机选择一个点作为中心center;
2,以center为中心r为半径画一个圆,圆内的样本属于这个类的概率加1;
3,计算center到每个样本的的向量,将向量相加,得到一个向量shift
4,center往shift方向移动;
5,重复2,到4,一直到shift很小
6,如果收敛时当前簇c的center与其它已经存在的簇c2中心的距离小于阈值,那么把c2和c合并。否则,把c作为新的聚类,增加1类。
7、重复1至 6直到所有的点都被标记访问。
8、分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类。
SOM: 自组织映射
感觉这与其说是聚类方法,不如说是降维方法.因为它用一个网状的二维神经元节点来‘拟合’高维样本数据的结构
所以SOM与其他ANN的不同之处在于它使用一个邻近函数来保持输入空间的拓扑性质
算法:
-
假设我们先建立一个C*D的神经元网;每个神经节点的权重(n维)都被初始化。
-
从数据集中随机选择一个样本向量。 计算每个神经节点与这个样本的距离,距离最近的神经元作为获胜节点 (BMU)。
-
然后更新获胜神经元的权重,以及其邻域神经节点的权重。获胜的权重会变得更像样本向量。邻居也变得更像样本向量。节点离 BMU越近,它的权重改变得越多。这里邻域的定义是用二维空间神经节点之间的距离。根据邻域加权时(权重T),有一个随着时间增大而减少的参数σ
-
重复步骤 2 进行 N 次迭代。直到特征映射趋于稳定。
-
聚类的话,样本被分到获胜的神经元那里?
这么看来,
- 神经节点的权重向量其实就是二维空间到高维空间的映射
- SOM上的神经节点,是在高维空间被扭曲以更接近样本,而投射到低维空间就是个二维矩阵;
- SOM只是用二维神经的拓扑结构来模拟高维数据的空间结构,但是每个类可以分的并不准确,因为有的神经元可能是空的。
瞎胡想:感觉这个拓扑结构可以用cspline去优化??
DBSCAN
不需要定义聚类数,但需要两个参数,半径r和最小点数minpts
这个方法有几个定义,对每个样本以r为半径画圆:
1)core point:如果半径内有至少minpts个点,这个样本就是core point;
2)directly reachable point: 如果半径内少于minpts个点,但是和core point 相连;
3)reachable point:半径内少于minpts个点,但是和directly reachable point相连;
4)outlier: 什么也不连
根据这个定义,样本就被自动划分为若干个组,每个组至少有一个core point;
- 这个方法会找到各种形状的类,所以类不一定是凸的
- 这个方法会产生outlier
REFERENCE
https://medium.com/@abhinavr8/self-organizing-maps-ff5853a118d4
https://en.wikipedia.org/wiki/Self-organizing_map