apache-spark - Spark 中的分层凝聚聚类

标签 apache-spark cluster-analysis hierarchical-clustering

我正在处理集群问题,它必须可扩展以处理大量数据。我想在 Spark 中尝试层次聚类,并将我的结果与其他方法进行比较。

我在网上做了一些关于在 Spark 中使用层次聚类的研究,但没有找到任何有希望的信息。

如果有人对此有所了解,我将不胜感激。 谢谢。

最佳答案

平分 Kmeans 方法

似乎做得不错,而且在性能方面运行得相当快。这是我编写的示例代码,用于利用 Spark (scala) 中的 Bisecting-Kmeans 算法从 Iris 数据集(许多人都熟悉)中获取聚类中心。注意:(我的大部分 Spark 工作都使用 Spark-Notebook,它与 Jupyter Notebooks 非常相似)。我提出这个是因为您需要为这个示例创建一个 Spark SQLContext 才能工作,这可能会根据您访问 Spark 的位置或方式而有所不同。

您可以下载 Iris.csv 进行测试 here

您可以下载 Spark-Notebook here

这是一个很棒的工具,可以让您轻松运行独立的 spark 集群。如果您想在 Linux 或 Mac 上获得帮助,我可以提供说明。一旦你下载了它,你需要使用 SBT 来编译它...使用基本目录 sbt 中的以下命令,然后 run

可以在 localhost:9000 访问它

必需的进口

import org.apache.spark.sql.types._
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.clustering.BisectingKMeans

在Spark-Notebook中创建sqlContext的方法

import org.apache.spark.sql.SQLContext
val sqlContext = new org.apache.spark.sql.SQLContext(sc)

定义导入模式

val customSchema = StructType(Array(
StructField("c0", IntegerType, true),
StructField("Sepal_Length", DoubleType, true),
StructField("Sepal_Width", DoubleType, true),
StructField("Petal_Length", DoubleType, true),
StructField("Petal_Width", DoubleType, true),
StructField("Species", StringType, true)))

制作DF

val iris_df = sqlContext.read
.format("csv")
.option("header", "true") //reading the headers
.option("mode", "DROPMALFORMED")
.schema(customSchema)
.load("/your/path/to/iris.csv")

指定特征

val assembler = new 
VectorAssembler().setInputCols(Array("c0","Sepal_Length", "Sepal_Width","Petal_Length","Petal_Width")).setOutputCol("features")
val iris_df_trans = assembler.transform(iris_df)

具有 3 个集群的模型(使用 .setK 进行更改)

val bkm = new BisectingKMeans().setK(3).setSeed(1L).setFeaturesCol("features")
val model = bkm.fit(iris_df_trans)

计算成本

val cost = model.computeCost(iris_df_trans)

计算中心

println(s"Within Set Sum of Squared Errors = $cost")
println("Cluster Centers: ")
val centers = model.clusterCenters
centers.foreach(println)

聚合方法

下面提供了Spark中的Agglomerative hierarchical clustering实现,值得一看,它没有像二等分Kmeans方法那样包含在基本MLlib中,我没有示例。但值得好奇的人看看。

Github Project

Youtube of Presentation at Spark-Summit

Slides from Spark-Summit

关于apache-spark - Spark 中的分层凝聚聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44152337/

相关文章:

r - 在 R 中编程层次聚类算法的教学方法

apache-spark - 写入 Spark 中指定的 Parquet 文件名

scala - Spark DataFrame/DataSet 分页或一次迭代 N 行的 block

machine-learning - 聚类相邻点

Matlab:K均值聚类

python - 如何从sklearn AgglomerativeClustering遍历树?

r - 在 Rstudio 中将 R 与 Spark 连接 - 启动 Spark shell 失败。端口文件不存在

hadoop - 在hadoop中解析Spark驱动程序主机时出现错误

java - 为什么 StreamingKMeans 聚类中心与常规 Kmeans 不同

c++ - 如何使用opencv c++的聚类根据面积和高度对连通分量进行分类