久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

spark mllib中樸素貝葉斯算法怎么用

163次閱讀
沒有評論

共計 2370 個字符,預(yù)計需要花費 6 分鐘才能閱讀完成。

這篇文章主要介紹 spark mllib 中樸素貝葉斯算法怎么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

優(yōu)點

對待預(yù)測樣本進(jìn)行預(yù)測,過程簡單速度快(想想郵件分類的問題,預(yù)測就是分詞后進(jìn)行概率乘積,在 log 域直接做加法更快)。

對于多分類問題也同樣很有效,復(fù)雜度也不會有大程度上升。

在分布獨立這個假設(shè)成立的情況下,貝葉斯分類器效果奇好,會略勝于邏輯回歸,同時我們需要的樣本量也更少一點。

對于類別類的輸入特征變量,效果非常好。對于數(shù)值型變量特征,我們是默認(rèn)它符合正態(tài)分布的。

缺點

對于測試集中的一個類別變量特征,如果在訓(xùn)練集里沒見過,直接算的話概率就是 0 了,預(yù)測功能就失效了。當(dāng)然,我們前面的文章提過我們有一種技術(shù)叫做『平滑』操作,可以緩解這個問題,最常見的平滑技術(shù)是拉普拉斯估測。

那個…咳咳,樸素貝葉斯算出的概率結(jié)果,比較大小還湊合,實際物理含義…恩,別太當(dāng)真。

樸素貝葉斯有分布獨立的假設(shè)前提,而現(xiàn)實生活中這些 predictor 很難是完全獨立的。

最常見應(yīng)用場景

文本分類 / 垃圾文本過濾 / 情感判別:這大概會樸素貝葉斯應(yīng)用做多的地方了,即使在現(xiàn)在這種分類器層出不窮的年 代,在文本分類場景中,樸素貝葉斯依舊堅挺地占據(jù)著一席之地。原因嘛,大家知道的,因為多分類很簡單,同時在文本數(shù)據(jù)中,分布獨立這個假設(shè)基本是成立的。而垃圾文本過濾 (比如垃圾郵件識別) 和情感分析 (微博上的褒貶情緒) 用樸素貝葉斯也通常能取得很好的效果。

多分類實時預(yù)測:這個是不是不能叫做場景?對于文本相關(guān)的多分類實時預(yù)測,它因為上面提到的優(yōu)點,被廣泛應(yīng)用,簡單又高效。

推薦系統(tǒng):是的,你沒聽錯,是用在推薦系統(tǒng)里!!樸素貝葉斯和協(xié)同過濾 (Collaborative Filtering) 是一對好搭檔,協(xié)同過濾是強(qiáng)相關(guān)性,但是泛化能力略弱,樸素貝葉斯和協(xié)同過濾一起,能增強(qiáng)推薦的覆蓋度和效果。

運行代碼如下

package spark.logisticRegression
import org.apache.spark.mllib.classification.NaiveBayes
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.{SparkContext, SparkConf}
 *  樸素貝葉斯僵尸粉鑒定(樸素貝葉斯需要非負(fù)特征值)
 *  正常用戶標(biāo)記為1,虛假用戶標(biāo)記為0
 * V(v1,v2,v3)
 * v1 =  已發(fā)微博 / 注冊天數(shù)
 * v2 =  好友數(shù)量 / 注冊天數(shù)
 * v3 =  是否有手機(jī)
 *  已發(fā)微博 / 注冊天數(shù)  0.05, V1 = 0
 * 0.05  =  已發(fā)微博 / 注冊天數(shù)  0.75, V1 = 1
 * 0.75  =  已發(fā)微博 / 注冊天數(shù), V1 = 2
 * Created by eric on 16-7-19.
 */
object zombieFansBayes { val conf = new SparkConf() // 創(chuàng)建環(huán)境變量
 .setMaster(local) // 設(shè)置本地化處理
 .setAppName(ZombieBayes) // 設(shè)定名稱
 val sc = new SparkContext(conf)
 def main(args: Array[String]) { val data = sc.textFile( ./src/main/spark/logisticRegression/data.txt)
 val parsedData = data.map { line = 
 val parts = line.split(,)
 LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split( ).map(_.toDouble)))
 }
 val splits = parsedData.randomSplit(Array(0.7, 0.3), seed = 11L) // 對數(shù)據(jù)進(jìn)行分配
 val trainingData = splits(0) // 設(shè)置訓(xùn)練數(shù)據(jù)
 val testData = splits(1) // 設(shè)置測試數(shù)據(jù)
 val model = NaiveBayes.train(trainingData, lambda = 1.0) // 訓(xùn)練貝葉斯模型
 val predictionAndLabel = testData.map(p =  (model.predict(p.features), p.label)) // 驗證模型
 val accuracy = 1.0 * predictionAndLabel.filter( // 計算準(zhǔn)確度
 label =  label._1 == label._2).count() // 比較結(jié)果
 println(accuracy)
 val test = Vectors.dense(0, 0, 10)
 val result = model.predict(test)// 預(yù)測一個特征 
 println(result)//2
 }
}

data.txt

0,1 0 0
0,2 0 0
0,3 0 0
0,4 0 0
1,0 1 0
1,0 2 0
1,0 3 0
1,0 4 0
2,0 0 1
2,0 0 2
2,0 0 3
2,0 0 4

結(jié)果如圖

以上是“spark mllib 中樸素貝葉斯算法怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計2370字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 循化| 巴马| 元谋县| 巴里| 温宿县| 壤塘县| 岳阳市| 鄂尔多斯市| 疏附县| 巨野县| 扶绥县| 大姚县| 汉川市| 肇源县| 中阳县| 长葛市| 乐清市| 乐山市| 赣榆县| 乌苏市| 木兰县| 长武县| 永济市| 庆城县| 张家港市| 三亚市| 辽中县| 宁津县| 马公市| 云林县| 句容市| 罗源县| 北海市| 华坪县| 治县。| 谷城县| 邳州市| 大连市| 久治县| 新兴县| 泰安市|