机器学习算法原理系列篇15: 聚类算法

聚类算法不需要用户提供数据的标签,是最常用的一类无监督机器学习方式。 简单来说,聚类算法就是把数据分组。好的聚类算法达到的效果就是,相同组的数据会展现相似的性质,而不同组的数据特征分布会不大相同。通常而言需要聚类的数据特征繁多,因此数据处于高维空间,我们需要首先定义距离,从而比较不同数据点之间的距离。距离相近的数据就可能被划分到同一个组。

 

 

 

上图给出了一个简单的聚类问题,我们如何通过身高和体重两个特征来区分人类和老虎。 显然人的身高通常高于老虎,但是体重会远小于老虎。上图显示了所有数据的分布。很容易看出,所有人的数据距离彼此相近位于一个组,而所有老虎的数据距离彼此相近位于另一个组。这里的距离其实指的就是Euclidian distance,定义如下:

                                                  

 

 

上式中,假设数据点有p个特征。和Euclidian distance类似的距离定义是曼哈顿距离,定义如下:

                                                        

 

 

另一个非常常用的距离公式是Cosine distance,即计算两个向量之间的Cosine值,定义如下:

                                                    

      

 

Cosine distance 计算的是两个数据点在高维空间的夹角余弦,在很多情况下比上面的Euclidian distance效果更加理想。

 

 

与计算数据点之间距离相对应,也可以计算数据之间的相似性。Jaccard coefficient 是一个统计变量,统计两个集合之间的重合部分占比。对于某些数据,比如一个数据点代表的是一篇文章。那么我们计算两篇文章的相似性时候,可以利用Jaccard coefficient计算文章中相同的词汇所占比例。Jaccard coefficient 具体定义如下:

 

其中A和B分别代表数据点所在的集合。至于如何构造集合,需要根据实际问题做出最符合常理的构造方法。

 

在定义了数据点之间距离或者相似性的概念后,我们可以运用不同的算法来进行聚类分析。常用的算法包括DBSCAN, Kmeans,Spectral clustering 等。其中Kmeans算法过程简单,是天然的分布式计算法方法,也非常适合解决大数据的聚类问题。

 

 

上图中的示意图说明了Kmeans算法的基本原理和实现过程。首先确定希望分组的个数和随机产生的各组中心点位置。第二步,计算每个数据点和不同中心点的位置,并且为每个数据点分配距离最近中心点所在的组。第三步,根据每个组里面的最新数据,重新计算中心点位置。第四步,重复上述过程,直到每个组的中心点位置不再改变。

 

Kmeans算法中潜在的一个问题是各个中心点的初始位置随机产生,有可能导致分组不理想。Kmeans++算法在Kmeans算法基础上,对初始的各中心位置产生方式进行了优化,最大程度提供分组的效果。Kmeans++中的各中心初始位置产生方式如下:

  1. 从所有数据中随机均匀的选取一个点作为第一个中心位置。
  1. 计算剩余所有数据点和离自己最近的中心点的之间的距离D(x)
  2. 根据概率分布从剩余所有数据点中选取下一个新的中心位置,该概率分布正比于D(x)的平方。
  3. 重复上面第2个和第3个步骤直到所有的中心点位置被选取。

 

 

更多有价值的文章,请关注:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值