K-MEANS聚类算法

来源:互联网 发布:北京电影旅游城 知乎 编辑:程序博客网 时间:2024/05/03 13:57

介绍:

在前一篇博客机器学习实战笔记(二)KNN(K-Nearest Neighbors) k-近邻算法中描述了KNN算法的基本信息,刚好有一个算法名字和他有点象K-MENS(K-均值聚类)算法。不过这两个算法是非常不一样的两种算法,KNN是一种分类算法,属于机器学习中监督学习算法。即事先知道了有多少个类别和每个类别对应的特征信息,假定要分类的样本实例一定有一个一直的类别和他对应。而K-MEANS是一种聚类算法,属于非监督学习算法,他不依赖已知的类别信息进行分类,而是在计算过程中自动根据样本之间的距离将样本聚合到对应的类别中。


基础:

相异度计算:见机器学习实战笔记(二)KNN(K-Nearest Neighbors) k-近邻算法中的相似度计算(相似度和相异度是一个概念的两种说法)

归一化:见机器学习实战笔记(二)KNN(K-Nearest Neighbors) k-近邻算法中的归一化章节。具体的做法一般是将数据归一化到一个统一的取值范围。例如[0..1]的取值范围。对于不是[0..1]范围的样本特征值可以用公式ai-min(a)/(max(a)-min(a))。其中ai表示数据特征中当前样本的特征值,min(a)表示样本特征中,最小的特征值,max(a)表示样本特征中最大的特征值


问题描述:

聚类算法解决一下一类问题,如果有n个样本数据,每个数据都有相同的特征空间要使用算法将n个样本数据划分到k个子集中,要求每个子集内部的元素的相异度尽量小,而不同子集之间的元素的相异度尽量大。k-means算法是聚类算法的一种。


算法描述

k-means算法一般要有以下几个通用步骤

1.从集合n中随机选择k个元素,作为初始的k个子集的中心

2.根据相异度公式计算集合n中所有元素与这k个中心的相异度,根据同子集相异度尽量小的原则将n个元素划分到k个子集中

3.针对聚类结果,计算k个子集中新的中心。方法是取子集中每个元素每个特征自己的算术平均值。

4.将集合n中的元素按照新的中心重新聚类,不断迭代此步骤直到聚类的结果不再变化或者迭代次数超过了预定义的最大迭代次数

问题

从算法描述中可以看出,因为算法初始的k个中心点是随机选取的,所以最初选取的中心点将影响聚类的结果是一个局部最优的结果。这个问题需要再实际过程中想办法解决。