【机器学习】浅谈聚类算法

来源:互联网 发布:淘宝卖家ipad客户端 编辑:程序博客网 时间:2024/05/22 12:30

   聚类是一种非监督式学习算法,聚类不要求源数据集有标签,聚类一般应用于做数据探索性分析,聚类算法的结果是将不同的数据集按照各自的典型特征分成不同类别,不同人对聚类的结果解读可能不同;

   一,聚类算法的相似性判断
1,样本与样本间的距离可以通过如下方法判断:

2,两个类别之间的距离
单连接聚类:Single-linkage clustering一个类的所有成员到另一个类的所有成员之间的最短两点之间的距离
全连接聚类Complete-linkage clustering:两个类中最远的两个点之间的距
平均连接聚类Average-linkage clusterin:两个类中的点两两的距离求平均


二,聚类可以分成层次聚类和划分聚类。
层次聚类:agglomerative(自底向上)和 divisive(自顶向下)  不需要指定类数
算法思想:将每个点都看成一个簇将两个最近的簇合并为一个簇不断重复上述过程,直到只剩下一个簇

划分聚类:需要预先指定至少一个聚类中心。主要包括K-Means、 K-Means++、 Mini Batch K-Means等
1,k-means聚类
算法思想:算法的思想是初始随机给定K个簇中心,按照距离最近原则把待分类的样本点分到各个簇,然后按平均法重新计算各个簇的质心,从而确定新的簇心,迭代计算,直到簇心的移动距离小于某个给定的误差值。使用算法描述语言,只要三个步骤:
a,任意选择K个点作为初始聚类中心;
b,计算每个样本点到聚类中心的距离,将每个样本点划分到离该点最近的聚类中去;
c,计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心。
反复执行b,c,直到聚类中心的移动小于某误差值或者聚类次数达到要求为止。
K-means的缺陷主要有两个:

(1)K值需要预先给定,属于预先知识,很多情况下K值的估计是非常困难的。   

(2)K-Means算法对初始选取的聚类中心点是敏感的,不同的随机种子点得到的聚类结果完全不同。


2,k-means++
对于k-means的两个缺陷,k-means++在一定程度上减小了这个缺陷。K-Means++算法选择初始聚类中心的思想是:初始的聚类中心之间的相互距离要尽可能远。
算法思想:a,随机挑选一个点作为第一个聚类中心;
b,对于每一个点x,计算和其最近的一个聚类中心的距离D(x),将所有距离求和得到Sum(D(x));
c,然后,以正比于D(x)的概率随机选择一个中心点作为新中心点,也就是用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”(其思想是, D(x)较大的点,被选取作为聚类中心的概率较大);
d,重复b和c,直到K个聚类中心被选出来;
e,利用这K个初始聚类中心进行K-Means算法。
“以正比于D(x)的概率随机选择一个数据点作为新中心点”的例子如下:


上述算法思想中,第3步是算法实现是先随机获取一个值小于sum(D(x))的值Random,然后对点集D(x)做循环,让Random随机减去D(x)的值,直到Random的值小于0,此时的D(x)所对应的值x就是该新的种子点。可以知道D(x)比较大的点被Random减去更有机会小于0.
虽然k-means++算法可以确定地初始化聚类中心,但是从可扩展性来看,它存在一个缺点,那就是它内在的有序性特性:下一个中心点的选择依赖于已经选择的中心点。 针对这种缺陷,k-means||算法提供了解决方法。


3,k-means||
  k-means++ 最主要的缺点在于其内在的顺序执行特性,得到 k 个聚类中心
必须遍历数据集 k 次,并且当前聚类中心的计算依赖于前面得到的所有聚类中心,这使得算法无法并行扩展,极大地限制了算法在大规模数据集上的应用。

  k-means||主要思路在于改变每次遍历时的取样策略,并非按照 k-means++ 那样每次遍历只取样一个样本,

而是每次遍历取样 O(k) 个样本,重复该取样过程大约 O(logn) 次,重复取样过后共得到 O(klogn) 个样本点组成的集合,该集合以常数因子近似于最优解,然后再聚类这 O(klogn) 个点成 k 个点,最后将这 k 个点作为初始聚类中心送入Lloyd迭代中,实际实验证明 O(logn) 次重复取样是不需要的,一般5次重复取样就可以得到一个较好的聚类初始中心。


三,学习向量量化
与k-means算法类似,“学习向量量化”(LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。

给定样本集D={(x_1,y_1), (x_2,y_2),…, (x_m,y_m)},每个样本x_j是由n个属性描述的特征向量(x_j1;x_j2,…;x_jn)

, y_i是样本x_j的类别标记。LVQ的目标是学习得到一组n维原型向量{p_1,p_2,…,p_q},每个原型向量代表一个聚类簇,

簇标记t_i属于y。LVQ的算法如下图所示:


第一行先对原型向量进行初始化,例如对第q个簇可以从类别标记为t_q的样本中随机选取一个作为原型向量。
算法的第6-10行是对原型向量进行更新的,使原型向量逐渐向x_j方向靠拢。
下图是聚类算法的运行结果:




主要参考资料:

1,七月在线:十月算法

2,周志华,机器学习



0 0
原创粉丝点击