我有一些地理点定义了纬度,经度和分数,我想使用MLlib K-均值算法来形成聚类。如果可用,我如何将参数或特性传递给算法.据我所知,它读取一个双数据类型的文本文件,并在此基础上生成集群。
发布于 2016-08-10 17:31:13
不要在经度数据上使用k-均值。
因为扭曲。地球是一个球体,-180°和+180°没有360°的距离。但是即使你离数据线很远,例如,你所有的数据都在旧金山,在纬度~37.773972,你的失真超过20%,而且越往北越糟。
使用像HAC或DBSCAN这样的算法,它可以在Haversine距离中使用(在一个好的实现中,有很多不好的实现)。例如,埃尔基有非常快的聚类算法,并且允许不同的地理距离.即使指数加速,对地理点也有很大帮助。
还请参阅这篇博客文章:https://doublebyteblog.wordpress.com/2014/05/16/clustering-geospatial-data/
发布于 2019-12-22 17:30:32
如果您仍然需要使用MLlib的K-均值,那么官方文档是- 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".在本地星火安装的“示例”文件夹中还有其他可用的示例。
https://stackoverflow.com/questions/38870280
复制相似问题