K-Means聚类算法

来源:互联网 发布:算法工程师培训班 编辑:程序博客网 时间:2024/06/04 19:56

记录一下KMeans算法里一些主要的东西

简介

K-Means是一种用来进行聚类分析的算法,用以得到每个数据所属的cluster。在给定的数据没有标签的情况下,由这种聚类分析算法得到每条数据的cluster,属于非监督式学习算法。

其主要步骤 分为:
1. assign
给每个点分配其所属中心点Cx(根据距离就近分配)
2. optimization
对于同一cluster中所有点,计算出新的中心点,使得所有点到中心点的距离之和最优

按上述步骤不断 循环迭代

Discussion
1. 如何初始化K个中心点?
常见的方法是随机的选取初始质心,但是这样簇的质量常常很差,或者说可能会得到不同的结果。处理选取初始质心问题的一种常用技术是:多次运行,每次使用一组不同的随机初始质心,然后选取具有最小SSE(误差的平方和)的簇集。这种策略简单,但是效果可能不好,这取决于数据集和寻找的簇的个数。更多的方法:这里
2. 如何求点群中心(Optimization)?
一般来说,求点群中心点的算法你可以很简的使用各个点的X/Y坐标的平均值。

sklearn代码

from sklearn.cluster import KMeansimport numpy as npX = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])### n_clusters用于指定聚类的个数### random_state用于初始化质心,修改随机种子发生器(为可选值)### max_iter 用于指定迭代的层数,默认为300pred = KMeans(n_clusters = 2, random_state = 0).fit(X)### 得到每个点对于的类别:array([0, 0, 0, 1, 1, 1], dtype=int32)print pred.labels_### 得到:array([0, 1], dtype=int32)print pred.predict([[0, 0], [4, 4]])### 得到聚类的中心点:array([[ 1.,  2.], [ 4.,  2.]])print pred.cluster_centers_

关于sklearn.cluster.KMeans更多的细节:这里

0 0