1. 程式人生 > >Spark Mlib(二)k-menas

Spark Mlib(二)k-menas

一 演算法思想

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) } }