机器学习 | k均值聚类算法

Posted 好记性不如烂笔心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习 | k均值聚类算法相关的知识,希望对你有一定的参考价值。

在进行无监督学习时,对无标签的数据进行分类是我们常常遇到的问题,例如市场分割、对服务的用户进行分类等等问题。那么如何对这些无标签的数据进行分类呢?那就要用到   均值算法啦!今天的笔记就是关于如何运用   均值聚类算法对无标签数据进行分类。


总的来看,我们需要实现的目标为:
  • 输入:   个无标签样本的集合   ;

  • 输出:样本集合的聚类   。

为实现上述结果,主要分为四个步骤:

  1. 初始化。随机选择    个点作为初始聚类中心   。

  2. 对样本进行聚类。计算每个样本到类中心的距离,将每个样本指派到与其最近的中心的类中,构成聚类结果   。

  3. 计算新的聚类中心。对聚类结果   ,计算当前各个类中的样本的均值,作为新的类中心。

  4. 如果迭代收敛或符合则停止,输出   ,否则继续从第二步开始。

example

  • 给定含有10个无标签样本的集合:  用   均值聚类算法将样本分为两类,即   。

 解:本文利用   实现   均值聚类算法。代码如下所示:

%matplotlib inlineimport matplotlib.pyplot as pltimport seaborn as sns; sns.set() # 设置绘图风格import numpy as npX = np.array([[1,0],[3,3],[4,1],[5,7],[7,9],[6,8],[2,1],[3,1],[5,9],[6,10]])from sklearn.cluster import KMeansKmeans = KMeans(n_clusters=2)Kmeans.fit(X)y_kmeans = Kmeans.predict(X)fig = plt.figure()plt.scatter(X[:, 0], X[:, 1], c=y_kmeans,s=50,cmap='viridis')centers = Kmeans.cluster_centers_plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)

上述代码的运行结果如下:

       通过   绘制的图可以看出,10个无标签数据被很好的分成了两组(这是当   时分类得到的最终结果,   取不同值得到的结果不同)。

k均值聚类算法中常见的问题:

    1. 聚类的类别数   值需要首先确定, 而现实中往往不知道   的最优值是多少。  

       解决办法:k均值聚类算法其实也是一个求解最优化的问题,即代价函数(cost function)最小化,Andrew Ng提到了一种Elbow method的选择方法,当然此方法也只是参考的一种而已,有些情况需要不断尝试   的取值,找到最小的代价函数。

   2. 同时需要注意的是,选择不同的初始化中心,会得到不同的聚类结果。





     本文笔记整理于Andrew Ng教授的ML课程、李航教授的《统计学习方法 第2版》以及《python数据科学手册》,有想一起学习数据科学的朋友可以关注或随时私信小编交流噢~今天的学习笔记就先到这里啦~

以上是关于机器学习 | k均值聚类算法的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战精读--------K-均值聚类算法

数学建模MATLAB应用实战系列(106)-机器学习算法:K-means聚类(附MATLAB代码)

机器学习 | k均值聚类算法

机器学习K均值算法(II)

机器学习之无监督学习-K均值聚类算法

机器学习——利用K-均值聚类算法对未标注数据分组