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
>
**:
importorg.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...