Spark實現K Means演算法

2021-08-19 15:37:35 字數 2145 閱讀 9566

k-means演算法是一種基於距離的聚類演算法,採用迭代的方法,計算出k個聚類中心,把若干個點聚成k類。

mllib實現k-means演算法的原理是,執行多個k-means演算法,每個稱為run,返回最好的那個聚類的類簇中心。初始的類簇中心,可以是隨機的,也可以是kmean||得來的,迭代達到一定的次數,或者所有run都收斂時,演算法就結束。

用spark實現k-means演算法,首先修改pom檔案,引入機器學習mllib包:

<

dependency

>

<

groupid

>org.apache.spark

groupid

>

<

artifactid

>spark-mllib_2.10

artifactid

>

<

version

>1.6.0

version

>

dependency

>

**:

import

org.apache.log4j.

import

org.apache.spark.

import

org.apache.spark.mllib.clustering.kmeans

import

org.apache.spark.mllib.linalg.vectors

object kmeans

//使用誤差平方之和來評估資料模型

val cost =model.computecost(parseddata)

println("within set sum of squared errors = " +cost)

//使用模型測試單點資料

println("vectors 7.3 1.5 10.9 is belong to cluster:" + model.predict(vectors.dense("7.3 1.5 10.9".split(" ")

.map(_.todouble))))

println("vectors 4.2 11.2 2.7 is belong to cluster:" + model.predict(vectors.dense("4.2 11.2 2.7".split(" ")

.map(_.todouble))))

println("vectors 18.0 4.5 3.8 is belong to cluster:" + model.predict(vectors.dense("1.0 14.5 73.8".split(" ")

.map(_.todouble))))

//返回資料集和結果

val result =data.map .collect.foreach(println)

sc.stop

}}

使用textfile()方法裝載資料集,獲得rdd,再使用kmeans.train()方法根據rdd、k值和迭代次數得到乙個kmeans模型。得到kmeans模型以後,可以判斷一組資料屬於哪乙個類。具體方法是用vectors.dense()方法生成乙個vector,然後用kmeans.predict()方法就可以返回屬於哪乙個類。

執行結果:

cluster centres:

[6.062499999999999,6.7124999999999995,11.5]

[3.5,12.2,60.0]

within set sum of squared errors = 943.2074999999998

vectors 7.3 1.5 10.9 is belong to cluster:0

vectors 4.2 11.2 2.7 is belong to cluster:0

vectors 18.0 4.5 3.8 is belong to cluster:1

0.0 0.0 5.0 0

0.1 10.1 0.1 0

1.2 5.2 13.5 0

9.5 9.0 9.0 0

9.1 9.1 9.1 0

19.2 9.4 29.2 0

5.8 3.0 18.0 0

3.5 12.2 60.0 1

3.6 7.9 8.1 0

Spark實現K Means演算法

k means演算法是一種基於距離的聚類演算法,採用迭代的方法,計算出k個聚類中心,把若干個點聚成k類。mllib實現k means演算法的原理是,執行多個k means演算法,每個稱為run,返回最好的那個聚類的類簇中心。初始的類簇中心,可以是隨機的,也可以是kmean 得來的,迭代達到一定的次數...

spark機器學習之KMeans演算法實現

一 概念 kmeans基於劃分的聚類方法 給定資料樣本集sample和應該劃分的類書k,對樣本資料sample進行聚類,最終形成k個聚類,其相似的度量是某條資料與中心點的 距離 距離可分為絕對距離 歐氏距離 閔可夫斯基距離。這裡說的距離是歐式距離,歐氏距離也稱歐幾里得距離,它是在m維空間中兩個點之間...

Kmeans演算法實現

include opencv2 highgui highgui.hpp include opencv2 core core.hpp include using namespace cv using namespace std static void help int main int argc ch...