二分K均值演算法原理及Spark MLlib呼叫例項(Scala/Java/Python)
阿新 • • 發佈:2019-01-03
二分K均值演算法
演算法介紹:
二分K均值演算法是一種層次聚類演算法,使用自頂向下的逼近:所有的觀察值開始是一個簇,遞迴地向下一個層級分裂。分裂依據為選擇能最大程度降低聚類代價函式(也就是誤差平方和)的簇劃分為兩個簇。以此進行下去,直到簇的數目等於使用者給定的數目k為止。二分K均值常常比傳統K均值演算法有更快的計算速度,但產生的簇群與傳統K均值演算法往往也是不同的。
BisectingKMeans是一個Estimator,在基礎模型上訓練得到BisectingKMeansModel。
引數:
featuresCol:
型別:字串型。
含義:特徵列名。
k:
型別:整數型。
含義:聚類簇數。
maxIter:
型別:整數型。
含義:迭代次數(>=0)。
predictionCol:
型別:字串型。
含義:預測結果列名。
seed:
型別:長整型。
含義:隨機種子。
呼叫示例:
Scala:
Java:import org.apache.spark.ml.clustering.BisectingKMeans // Loads data. val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt") // Trains a bisecting k-means model. val bkm = new BisectingKMeans().setK(2).setSeed(1) val model = bkm.fit(dataset) // Evaluate clustering. val cost = model.computeCost(dataset) println(s"Within Set Sum of Squared Errors = $cost") // Shows the result. println("Cluster Centers: ") val centers = model.clusterCenters centers.foreach(println)
Python:import org.apache.spark.ml.clustering.BisectingKMeans; import org.apache.spark.ml.clustering.BisectingKMeansModel; import org.apache.spark.ml.linalg.Vector; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; // Loads data. Dataset<Row> dataset = spark.read().format("libsvm").load("data/mllib/sample_kmeans_data.txt"); // Trains a bisecting k-means model. BisectingKMeans bkm = new BisectingKMeans().setK(2).setSeed(1); BisectingKMeansModel model = bkm.fit(dataset); // Evaluate clustering. double cost = model.computeCost(dataset); System.out.println("Within Set Sum of Squared Errors = " + cost); // Shows the result. System.out.println("Cluster Centers: "); Vector[] centers = model.clusterCenters(); for (Vector center : centers) { System.out.println(center); }
from pyspark.ml.clustering import BisectingKMeans
# Loads data.
dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt")
# Trains a bisecting k-means model.
bkm = BisectingKMeans().setK(2).setSeed(1)
model = bkm.fit(dataset)
# Evaluate clustering.
cost = model.computeCost(dataset)
print("Within Set Sum of Squared Errors = " + str(cost))
# Shows the result.
print("Cluster Centers: ")
centers = model.clusterCenters()
for center in centers:
print(center)