Spark 的 MLlib 库中预定义的 Streaming k-means 聚类是有监督的还是无监督的?

Posted

技术标签:

【中文标题】Spark 的 MLlib 库中预定义的 Streaming k-means 聚类是有监督的还是无监督的?【英文标题】:Is the Streaming k-means clustering predefined in MLlib library of spark supervised or unsupervised? 【发布时间】:2015-09-07 10:31:39 【问题描述】:

我知道 k-means 聚类是最简单的无监督学习算法之一。查看 MLlib 中打包的流式 k-means 聚类的源代码,我找到了术语:训练数据、测试数据、预测和训练。

这让我觉得这种流式 K-means 可能会受到监督。那么,这个算法是有监督的还是无监督的?

这是使用流式 k-means 的代码示例:

package org.apache.spark.examples.mllib

import org.apache.spark.SparkConf
import org.apache.spark.mllib.clustering.StreamingKMeans
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.streaming.Seconds, StreamingContext


object StreamingKMeansExample 

    def main(args: Array[String]) 
        if (args.length != 5) 
            System.err.println(  "Usage: StreamingKMeansExample " +
                "<trainingDir> <testDir> <batchDuration> <numClusters>         <numDimensions>")
            System.exit(1)
        

        val conf = new SparkConf().setMaster("localhost").setAppName
        ("StreamingKMeansExample")
        val ssc = new StreamingContext(conf, Seconds(args(2).toLong))

        val trainingData = ssc.textFileStream(args(0)).map(Vectors.parse)
        val testData = ssc.textFileStream(args(1)).map(LabeledPoint.parse)

        val model = new StreamingKMeans().setK(args(3).toInt)
        .setDecayFactor(1.0)
        .setRandomCenters(args(4).toInt, 0.0)

        model.trainOn(trainingData)
        model.predictOnValues(testData.map(lp => (lp.label,      lp.features))).print()

        ssc.start()
        ssc.awaitTermination()
    

【问题讨论】:

【参考方案1】:

K-means(流式或常规)是一种聚类算法。根据定义,聚类算法是无监督的。也就是说,您不知道数据的自然分组(标签),并且希望自动将相似的实体分组在一起。

这里的术语train 指的是“学习”集群(质心)。

术语predict指的是预测一个新点属于哪个集群。

【讨论】:

【参考方案2】:

这取决于,但大多数人会将 k-means 归类为无监督。

除了指定簇的数量,k-means“学习” 集群自己,没有任何关于哪个集群的信息 观察属于。 k-means 可以是半监督的。

这通常是关于 k-means 的,所以理想情况下,我相信 spark 也遵循相同的 - https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/clustering/KMeans.scala

【讨论】:

以上是关于Spark 的 MLlib 库中预定义的 Streaming k-means 聚类是有监督的还是无监督的?的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Spark ML 库中的 Vector 用于 DataFrame

Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

spark.mllib源码阅读-优化算法1-Gradient

一次 Maven 事故

Spark MLlib学习笔记:构建一个机器学习工作流

Spark MLlib机器学习概论