Spark Mlib(二)k-menas
阿新 • • 發佈:2018-11-13
一 演算法思想
K-MEANS演算法是輸入聚類個數k,以及包含 n個數據物件的資料庫,輸出滿足方差最小標準k個聚類的一種演算法。k-means 演算法接受輸入量 k ;然後將n個數據物件劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的物件相似度較高;而不同聚類中的物件相似度較小。
基本步驟
(1) 從 n個數據物件任意選擇 k 個物件作為初始聚類中心;
(2) 根據每個聚類物件的均值(中心物件),計算每個物件與這些中心物件的距離;並根據最小距離重新對相應物件進行劃分;
(3) 重新計算每個(有變化)聚類的均值(中心物件);
(4) 計算標準測度函式,當滿足一定條件,如函式收斂時,則演算法終止;如果條件不滿足則回到步驟(2)。
二 使用領域
可以用來進行聚類,元素的相似度計算等
三 spark實現
spark官網給出的k-means的實現方式,原地址http://spark.apache.org/docs/latest/ml-clustering.html
package alg
import org.apache.spark.ml.clustering.KMeans
import org.apache.spark.ml.evaluation.ClusteringEvaluator
import org.apache.spark.sql.SparkSession
object k_means {
def main (args:Array[String]):Unit={
val spark: SparkSession = SparkSession.builder
.appName("My")
.master("local[*]")
.getOrCreate()
// Loads data.
val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt")
// Trains a k-means model.
val kmeans = new KMeans().setK(2).setSeed(1L)
val model = kmeans.fit(dataset)
// Make predictions
val predictions = model.transform(dataset)
// Evaluate clustering by computing Silhouette score
val evaluator = new ClusteringEvaluator()
val silhouette = evaluator.evaluate(predictions)
println(s"Silhouette with squared euclidean distance = $silhouette")
// Shows the result.
println("Cluster Centers: ")
model.clusterCenters.foreach(println)
}
}