【发布时间】:2016-12-16 15:40:36
【问题描述】:
我有一些用纬度、经度和分数定义的地理点,我想使用 MLlib K-Means 算法来制作集群。 MLlib K-Means 是否可用?如果可用,我如何将参数或特征传递给算法..据我发现,它读取双数据类型的文本文件并基于它创建集群。
【问题讨论】:
标签: scala apache-spark cluster-analysis k-means apache-spark-mllib
我有一些用纬度、经度和分数定义的地理点,我想使用 MLlib K-Means 算法来制作集群。 MLlib K-Means 是否可用?如果可用,我如何将参数或特征传递给算法..据我发现,它读取双数据类型的文本文件并基于它创建集群。
【问题讨论】:
标签: scala apache-spark cluster-analysis k-means apache-spark-mllib
因为失真。地球是一个球体,-180° 和 +180° 没有 360° 的距离。但即使您远离数据线,例如您的所有数据都在旧金山,纬度 ~37.773972,您的失真超过 20%,并且越往北越严重。
使用 HAC 或 DBSCAN 之类的算法(在好的实现中,有很多不好的实现)与半正弦距离。例如ELKI 具有非常快速的聚类算法,并允许不同的地理距离。即使使用索引加速,对地理点也有很大帮助。
另请参阅此博文:https://doublebyteblog.wordpress.com/2014/05/16/clustering-geospatial-data/
【讨论】:
如果您仍然需要使用 MLlib 的 K-mean,那么官方文档位于 -https://spark.apache.org/docs/latest/ml-clustering.html#k-means
val trainingDataset = //build a dataframe containing a column "f" of type org.apache.spark.mllib.linalg.Vector
val kmeans = new KMeans().setK(2).setSeed(1L).setFeaturesCol("f").setPredictionCol("p")
val model = kmeans.fit(trainingDataset) // your model is ready
//Predict another dataset
val pDataset = //build a dataframe containing a column "f" of type org.apache.spark.mllib.linalg.Vector
val predictions = model.transform(pDataset)
//predictions will contain your prediction on column "p".
在本地 Spark 安装的“example”文件夹中还有其他示例。
【讨论】: