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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

离线轻量级大数据平台Spark之MLib机器学习库朴素贝叶斯实例

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

?1、樸素貝葉斯介紹

表示事件B已經發生的前提下,事件A發生的概率,叫做事件B發生下事件A的條件概率,公式為:
?


貝葉斯定理:?


從已知P(A|B)獲得P(B|A)值。
假設A和B代表兩類互相影響的事件,如B代表正常郵件和騷擾郵件事件、A代表郵件文本中出現特定詞匯的事件。定義:Ai,其中i∈[1,m],m是A事件總數;Bj,其中j∈[1,n],n是B事件的總數。
根據條件概率公式,先根樣本數求得得P(Ai| Bj)= P(AiBj)/ P(Bj),即AB事件同時發生的概率除以B事件單獨發生時間概率。接著要預測在A事件出現下發生事件B的概率,即:
P(Bj |Ai)=P(Bj)* P(A0| Bj) * P(A1| Bj) *…* P(An| Bj)
樸素貝葉斯算法考慮事件的相互獨立性,有:多項式樸素貝葉斯( multinomial naive Bayes )和伯努利樸素貝葉斯( Bernoulli naive Bayes)。MultinomialNB這個分類器以出現次數作為特征值,使用的TF-IDF也能符合這類分布。其他的樸素貝葉斯分類器如GaussianNB適用于高斯分布(正態分布)的特征,而BernoulliNB適用于伯努利分布(二值分布)的特征。


2、案例說明:
1)輸入數據:天氣情況和每天是否踢足球的記錄表
日期 踢足球 天氣 溫度 濕度風速
1號 否(0) 晴天(0) 熱(0) 高(0) 低(0)
2號 否(0) 晴天(0) 熱(0) 高(0) 高(1)
3號 是(1) 多云(1) 熱(0) 高(0) 低(0)
4號 是(1) 下雨(2) 舒適(1) 高(0) 低(0)
5號 是(1) 下雨(2) 涼爽(2) 正常(1) 低(0)
6號 否(0) 下雨(2) 涼爽(2) 正常(1) 高(1)
7號 是(1) 多云(1) 涼爽(2) 正常(1) 高(1)
8號 否(0) 晴天(0) 舒適(1) 高(0) 低(0)
9號 是(1) 晴天(0) 涼爽(2) 正常(1) 低(0)
10號 是(1) 下雨(2) 舒適(1) 正常(1) 低(0)
11號 是(1) 晴天(0) 舒適(1) 正常(1) 高(1)
12號 是(1) 多云(1) 舒適(1) 高(0) 高(1)
13號 是(1) 多云(1) 熱(0) 正常(1) 低(0)
14號 否(0) 下雨(2) 舒適(1) 高(0) 高(1)
15號 晴天(0)涼爽(2) 高(0)高(1)
抽象為:
0,0 0 0 0
0,0 0 0 1
1,1 0 0 0
1,2 1 0 0
1,2 2 1 0
0,2 2 1 1
1,1 2 1 1
0,0 1 0 0
1,0 2 1 0
1,2 1 1 0
1,0 1 1 1
1,1 1 0 1
1,1 0 1 0
0,2 1 0 1
2)輸出:如果15號的天氣為(晴天,涼爽,濕度高,風速高,預測是否去踢球的概率)
3)計算過程:
假設15號去踢球,踢球概率為:
P(踢)=9/14
P(晴天|踢)=2/9
P(涼爽|踢)=3/9
P(濕度高|踢)=3/9
P(風速高|踢)=3/9
P(踢)由踢的天數除以總天數得到,P(晴天|踢)為踢球的同事是晴天除以踢的天數得到,其他以此類推。
P(踢|晴天,涼爽,濕度高,風速高)=P(踢)* P(晴天|踢)* P(涼爽|踢)* P(濕度高|踢) *P(風速高|踢)=9/14*2/9*3/9*3/9*3/9=0.00529

假設15號不去踢球,概率為:
P(不踢)=5/14
P(晴天|不踢)=3/5
P(涼爽|不踢)=1/5
P(濕度高|不踢)=4/5
P(風速高|不踢)=3/5
P(不踢|晴天,涼爽,濕度高,風速高)=
P(不踢)* P(晴天|不踢)* P(涼爽|不踢)* P(濕度高|不踢) *P(風速高|不踢)=5/14*3/5*1/5*4/5*3/5=0.02057
說明不去踢足球的概率比去踢足球的概率高。


3、Spark平臺MLib庫樸素貝葉斯處理流程如下圖:

??

代碼和執行結果如下:

package sk.mlib;import scala.Tuple2; import org.apache.spark.api.java.function.Function; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.mllib.classification.NaiveBayes; import org.apache.spark.mllib.classification.NaiveBayesModel; import org.apache.spark.mllib.linalg.Vectors; import org.apache.spark.mllib.regression.LabeledPoint; import org.apache.spark.SparkConf;public class NaiveBayesDemo {public static void main(String[] args) {SparkConf sparkConf = new SparkConf().setAppName("NaiveBayesDemo");JavaSparkContext jsc = new JavaSparkContext(sparkConf);//加載數據String path = "/tmp/NaiveBayesdata.txt";JavaRDD<String> lines =jsc.textFile(path);JavaRDD<LabeledPoint> parsedData = lines.map(new Function<String, LabeledPoint>() {public LabeledPoint call(String s) {String[] sarray = s.split(",");Double dLabel=Double.valueOf(sarray[0]);String[] sFeatures=sarray[1].split(" ");double[] values = new double[sFeatures.length];for (int i = 0; i < sFeatures.length; i++) {values[i] = Double.parseDouble(sFeatures[i]);}System.out.println(dLabel+":"+Vectors.dense(values));LabeledPoint lp=new LabeledPoint(dLabel,Vectors.dense(values));return lp; }});parsedData.cache();//JavaRDD<LabeledPoint> inputData = MLUtils.loadLibSVMFile(jsc.sc(), path).toJavaRDD();// 把數據的60%作為訓練集,40%作為測試集.JavaRDD<LabeledPoint>[] tmp = parsedData.randomSplit(new double[]{0.6, 0.4});JavaRDD<LabeledPoint> training = tmp[0]; // training setJavaRDD<LabeledPoint> test = tmp[1]; // test set//獲得訓練模型,第一個參數為數據,第二個參數為平滑參數,默認為1,可改final NaiveBayesModel model = NaiveBayes.train(training.rdd(), 1.0);//對模型進行準確度分析JavaPairRDD<Double, Double> predictionAndLabel =test.mapToPair(new PairFunction<LabeledPoint, Double, Double>() {@Overridepublic Tuple2<Double, Double> call(LabeledPoint p) {return new Tuple2<>(model.predict(p.features()), p.label());}});double accuracy = predictionAndLabel.filter(new Function<Tuple2<Double, Double>, Boolean>() {@Overridepublic Boolean call(Tuple2<Double, Double> pl) {return pl._1().equals(pl._2());}}).count() / (double) test.count();System.out.println("accuracy-->"+accuracy);//保存和加載訓練模型model.save(jsc.sc(), "/tmp/myNaiveBayesModel");NaiveBayesModel sameModel = NaiveBayesModel.load(jsc.sc(), "/tmp/myNaiveBayesModel");//對新的事件進行概率預測System.out.println("Prediction of (0.0, 2.0, 0.0, 1.0):"+sameModel.predict(Vectors.dense(0.0,2.0,0.0,1.0)));jsc.stop();} } /*執行結果:0.0:[0.0,0.0,0.0,0.0] 0.0:[0.0,0.0,0.0,1.0] 1.0:[1.0,0.0,0.0,0.0] 1.0:[2.0,1.0,0.0,0.0] 1.0:[2.0,2.0,1.0,0.0] 0.0:[2.0,2.0,1.0,1.0] 1.0:[1.0,2.0,1.0,1.0] 0.0:[0.0,1.0,0.0,0.0] 1.0:[0.0,2.0,1.0,0.0] 1.0:[2.0,1.0,1.0,0.0] 1.0:[0.0,1.0,1.0,1.0] 1.0:[1.0,1.0,0.0,1.0] 1.0:[1.0,0.0,1.0,0.0] 0.0:[2.0,1.0,0.0,1.0] accuracy-->0.75,執行結果不一致,和模型訓練本身有關系 Prediction of (0.0, 2.0, 0.0, 1.0):0.0 accuracy低于0.5時是1.0*/

總結

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

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