11.5.4 聚类

聚类算法是一种无监督学习任务,用于将对象分到具有高度相似性的聚类中。
该算法主要用于数据探索(查看一个新数据集是什么样子)以及异常检测(识别与任意聚类都相距较远的点)。

监督式任务中的数据都是带标签的,而聚类可以用于无标签的数据。

K-Means 算法

MLlib 包含聚类中流行的 K-means 算法,以及一个叫作 K-means|| 的变种,可以为并行环境提供更好的初始化策略。

K-means 中最重要的参数是生成的聚类中心的目标数量 K。
事实上,你几乎不可能提前知道聚类的“真实”数量,所以最佳实践是尝试几个不同的 K 值,直到聚类内部平均距离不再显著下降为止。

除了 K 以外,MLlib 中的 K-means 还接收以下几个参数。

当你要调用 K-means 算法时,你需要创建 mllib.clustering.KMeans 对象(在 Java/Scala 中)或者调用 KMeans.train (在 Python 中)。
它接收一个 Vector 组成的 RDD 作为参数。

K-means 返回一个 KMeansModel 对象,该对象允许你访问其 clusterCenters 属性(聚类中心,是一个向量的数组)或者调用 predict() 来对一个新的向量返回它所属的聚类。
注意, predict() 总是返回和该点距离最近的聚类中心,即使这个点跟所有的聚类都相距很远。

代码示例