机器学习---kmeans

一、简介

K均值算法是一种聚类算法。 K均值聚类算法是发现给定数据集k个簇的算法。

聚类是一种无监督的学习,将相似的对象归到同一个簇中。聚类与分类的最大不同在于分类的目标事先已知,而聚类则不知道。

机器学习---kmeans_第1张图片

二、算法

1.步骤

1)随机在图中取K个种子点,或称为质心。(这里K=2)

2)然后对图中的所有点求到这K个种子点的距离,假如点Pi离种子点Si最近,那么Pi属于Si点群。(下图中,我们可以看到A,B属于上面的种子点,C,D,E属于下面中部的种子点)

3)接下来,我们要移动种子点到属于他的“点群”的中心。(见图上的第三步)

4)然后重复第2和第3步,直到种子点没有移动(我们可以看到图中的第四步上面的种子点聚合了A,B,C,下面的种子点聚合了D,E)。

机器学习---kmeans_第2张图片

2.k值选择:参考集群方案的平方值之和确定K值  

 K均值算法每个集群有自己的质心。一个集群内的质心和各数据点之间距离的平方和形成了这个集群的平方值之和。同时,当所有集群的平方值之和加起来的时候,就组成了集群方案的平方值之和。

当集群数量增加时,距离的平方总和快速减少。到某个值 k 之后,减少的速度就大大下降了。可以以此为参考找到集群数量的最优值。

三、优缺点

优点

K均值聚类算法是一种被广泛应用的聚类算法,其特点是高效,实现简单。

K均值擅长处理球状分布的数据,当结果聚类是密集的,而且类和类之间的区别比较明显时,K均值的效果比较好。对于处理大数据集,这个算法是相对可伸缩的和高效的,它的复杂度是O(nkt),n是对象的个数,k是簇的数目,t是迭代的次数。

缺点          

1)算法初始中心点选择影响算法的运行效率          

  随机选取中心点有可能导致迭代次数很大或者限于某个局部最优状态;通常k<

2)k的取值没有可借鉴性

K均值的最大问题是要求用户必须事先给出k的个数,k的选择一般都基于一些经验值和多次试验的结果,对于不同的数据集,k的取值没有可借鉴性。

3)对异常偏离的数据敏感——离群点

 K均值对“噪声”和孤立点数据是敏感的,少量的这类数据就能对平均值造成极大的影响。

四、kmeans算法改进

1.二分k均值

1)首先将所有点作为一个簇,然后将该簇一分为二。

2)之后选择能最大限度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。

因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点越接近于他们的质心,聚类效果就越好。所以我们就需要对误差平方和最大的簇进行再一次划分,因为误差平方和越大,表示该簇聚类效果越不好,越有可能是多个簇被当成了一个簇,所以我们首先需要对这个簇进行划分。

3)重复第二步直到簇的数目等于用户给定的数目k为止。

2.kmeans++

1)先从我们的数据库随机挑个随机点当“种子点”

2)对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。

3)然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。

这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。

4)重复第二步和第三步直到k个聚类中心被选出来。

5)利用这k个初始的聚类中心来运行标准的k-means算法。

你可能感兴趣的:(机器学习实战)