1. 程式人生 > >二分K均值演算法原理及Spark MLlib呼叫例項(Scala/Java/Python)

二分K均值演算法原理及Spark MLlib呼叫例項(Scala/Java/Python)

二分K均值演算法

演算法介紹:

二分K均值演算法是一種層次聚類演算法,使用自頂向下的逼近:所有的觀察值開始是一個簇,遞迴地向下一個層級分裂。分裂依據為選擇能最大程度降低聚類代價函式(也就是誤差平方和)的簇劃分為兩個簇。以此進行下去,直到簇的數目等於使用者給定的數目k為止。二分K均值常常比傳統K均值演算法有更快的計算速度,但產生的簇群與傳統K均值演算法往往也是不同的。

BisectingKMeans是一個Estimator,在基礎模型上訓練得到BisectingKMeansModel。

引數:

featuresCol:

型別:字串型。

含義:特徵列名。

k:

型別:整數型。

含義:聚類簇數。

maxIter:

型別:整數型。

含義:迭代次數(>=0)。

predictionCol:

型別:字串型。

含義:預測結果列名。

seed:

型別:長整型。

含義:隨機種子。

呼叫示例:

Scala:

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)
Java:
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);
}
Python:
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)