use*_*941 3 cluster-analysis hierarchical-clustering apache-spark
我正在研究一个集群问题,它必须可扩展以适应大量数据。我想尝试 Spark 中的层次聚类,并将我的结果与其他方法进行比较。
我在网上做了一些关于 Spark 中使用层次聚类的研究,但没有找到任何有希望的信息。
如果有人对此有一些见解,我将非常感激。谢谢。
看起来做得不错,并且在性能方面运行得相当快。下面是我编写的示例代码,用于利用 Spark (scala) 中的 Bisecting-Kmeans 算法从 Iris 数据集(许多人都熟悉)中获取聚类中心。注意:(我的大部分 Spark 工作都使用 Spark-Notebook,它与 Jupyter Notebooks 非常相似)。我提出这一点是因为您需要创建一个 Spark SQLContext 才能使该示例正常工作,这可能会根据您访问 Spark 的位置或方式而有所不同。
您可以在此处下载 Iris.csv 进行测试
它是一个很棒的工具,可以轻松地让您运行独立的 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
Run Code Online (Sandbox Code Playgroud)
Spark-Notebook中创建sqlContext的方法
import org.apache.spark.sql.SQLContext
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
Run Code Online (Sandbox Code Playgroud)
定义导入模式
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)))
Run Code Online (Sandbox Code Playgroud)
制作 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")
Run Code Online (Sandbox Code Playgroud)
指定功能
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)
Run Code Online (Sandbox Code Playgroud)
具有 3 个簇的模型(随 .setK 更改)
val bkm = new BisectingKMeans().setK(3).setSeed(1L).setFeaturesCol("features")
val model = bkm.fit(iris_df_trans)
Run Code Online (Sandbox Code Playgroud)
计算成本
val cost = model.computeCost(iris_df_trans)
Run Code Online (Sandbox Code Playgroud)
计算中心
println(s"Within Set Sum of Squared Errors = $cost")
println("Cluster Centers: ")
val centers = model.clusterCenters
centers.foreach(println)
Run Code Online (Sandbox Code Playgroud)
下面提供了 Spark 中的聚合层次聚类实现,值得一看,它没有像平分 Kmeans 方法那样包含在基本 MLlib 中,而且我没有示例。但对于那些好奇的人来说,还是值得一看的。
| 归档时间: |
|
| 查看次数: |
9064 次 |
| 最近记录: |