日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

离线轻量级大数据平台Spark之MLib机器学习库聚类算法KMeans实例

發布時間:2025/4/16 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 离线轻量级大数据平台Spark之MLib机器学习库聚类算法KMeans实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、KMeans算法

所謂聚類問題,就是給定一個元素集合D,其中每個元素具有n個可觀察屬性,使用某種算法將D劃分成k個子集,要求每個子集內部的元素之間相異度盡可能低,而不同子集的元素相異度盡可能高。其中每個子集叫做一個簇。與分類不同,分類是示例式學習,要求分類前明確各個類別,并斷言每個元素映射到一個類別。而聚類是觀察式學習,在聚類前可以不知道類別甚至不給定類別數量,是無監督學習的一種。

聚類算法是機器學習(或者說是數據挖掘更合適)中重要的一部分,除了最為簡單的K-Means聚類算法外,比較常見的還有層次法(CURE、CHAMELEON等)、網格算法(STING、WaveCluster等)等。K-means聚類屬于無監督學習,而回歸、樸素貝葉斯、SVM等都是有類別標簽y的,也就是說樣例中已經給出了樣例的分類。而聚類的樣本中卻沒有給定y,只有特征x。
K-Means屬于基于平方誤差的迭代重分配聚類算法,其核心思想十分簡單:
l隨機選擇K個中心點;
l計算所有點到這K個中心點的距離,選擇距離最近的中心點為其所在的簇;
l簡單地采用算術平均數(mean)來重新計算K個簇的中心;
l重復步驟2和3,直至簇類不再發生變化或者達到最大迭代值;
l輸出結果。
K-Means算法的結果好壞依賴于對初始聚類中心的選擇,容易陷入局部最優解,對K值的選擇沒有準則可依循,對異常數據較為敏感,只能處理數值屬性的數據,聚類結構可能不平衡。
實例中進行如下步驟:
? 裝載數據,數據以文本文件方式進行存放;
? 將數據集聚類,設置2個類和20次迭代,進行模型訓練形成數據模型;
? 打印數據模型的中心點;
? 使用誤差平方之和來評估數據模型;
? 使用模型測試單點數據;
? 保存模型并加載模型。

2、Java開發

? ? ? Java開發上,引入spark-mllib_2.11-2.0.1.jar、spark-mllib-local_2.11-2.0.1.jar、spark-catalyst_2.11-2.0.1.jar。

? ? ?參考spark的example案例的代碼,輸出skkm.jar包并提交執行。
bin/spark-submit --class sk.mlib.KMeansDemo --master local /tmp/skkm.jar

具體代碼如下:

package sk.mlib;import java.util.Arrays; import java.util.logging.Level;import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.JavaDoubleRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.Function; import org.apache.spark.mllib.clustering.KMeans; import org.apache.spark.mllib.clustering.KMeansModel; import org.apache.spark.mllib.linalg.Vector; import org.apache.spark.mllib.linalg.Vectors;public class KMeansDemo {public static void main(String[] args) throws Exception {String path = "/tmp/kmeansData.txt";SparkConf conf = new SparkConf().setAppName("JavaKMeansExample");JavaSparkContext jsc = new JavaSparkContext(conf);jsc.setLogLevel("OFF");//關閉日志輸出,方便查看輸出結果// Load and parse dataJavaRDD<String> data = jsc.textFile(path);JavaRDD<Vector> parsedData = data.map(new Function<String, Vector>() {public Vector call(String s) {String[] sarray = s.split(" ");double[] values = new double[sarray.length];for (int i = 0; i < sarray.length; i++) {values[i] = Double.parseDouble(sarray[i]);}return Vectors.dense(values);}});parsedData.cache();// Cluster the data into two classes using KMeans// 將數據集聚類,2個類,20次迭代,進行模型訓練形成數據模型int numClusters = 2;int numIterations = 20;KMeansModel clusters = KMeans.train(parsedData.rdd(), numClusters, numIterations);// 打印數據模型的中心點System.out.println("Cluster centers:");for (Vector center: clusters.clusterCenters()) {System.out.println(" " + center);}// 使用誤差平方之和來評估數據模型double cost = clusters.computeCost(parsedData.rdd());System.out.println("Cost: " + cost);// Evaluate clustering by computing Within Set Sum of Squared Errorsdouble WSSSE = clusters.computeCost(parsedData.rdd());System.out.println("Within Set Sum of Squared Errors = " + WSSSE);// 使用模型測試單點數據// JavaDoubleRDD testdata1=jsc.parallelizeDoubles(Arrays.asList(0.25,0.25,0.25));double[] testdata1={0.25,0.25,0.25};double[] testdata2={8.12,8.12,8.12};System.out.println("Vectors 0.25 0.25 0.25 is belongs to clusters:" + clusters.predict(Vectors.dense(testdata1)));System.out.println("Vectors 8.12,8.12,8.12 is belongs to clusters:" + clusters.predict(Vectors.dense(testdata2)));// Save and load modelclusters.save(jsc.sc(), "/tmp/KMeansModel");KMeansModel sameModel = KMeansModel.load(jsc.sc(),"/tmp/KMeansModel");// 打印導出的數據模型的中心點System.out.println("Cluster centers:");for (Vector center: sameModel.clusterCenters()) {System.out.println(" " + center);}jsc.stop();}}/*測試數據kmeansData.txt: 0.0 0.0 0.0 0.1 0.1 0.1 0.2 0.2 0.2 9.0 9.0 9.0 9.1 9.1 9.1 9.2 9.2 9.2 */ //提交執行:bin/spark-submit --class sk.mlib.KMeansDemo --master local /tmp/skkm.jar /*執行結果:Cluster centers:[9.1,9.1,9.1][0.1,0.1,0.1] Cost: 0.11999999999994547 Within Set Sum of Squared Errors = 0.11999999999994547 Vectors 0.25 0.25 0.25 is belongs to clusters:1 Vectors 8.12,8.12,8.12 is belongs to clusters:0 Cluster centers:[9.1,9.1,9.1][0.1,0.1,0.1] */

總結

以上是生活随笔為你收集整理的离线轻量级大数据平台Spark之MLib机器学习库聚类算法KMeans实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。