您好,登錄后才能下訂單哦!
這篇文章主要介紹spark mllib中樸素貝葉斯算法怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
對待預測樣本進行預測,過程簡單速度快(想想郵件分類的問題,預測就是分詞后進行概率乘積,在log域直接做加法更快)。
對于多分類問題也同樣很有效,復雜度也不會有大程度上升。
在分布獨立這個假設成立的情況下,貝葉斯分類器效果奇好,會略勝于邏輯回歸,同時我們需要的樣本量也更少一點。
對于類別類的輸入特征變量,效果非常好。對于數值型變量特征,我們是默認它符合正態分布的。
對于測試集中的一個類別變量特征,如果在訓練集里沒見過,直接算的話概率就是0了,預測功能就失效了。當然,我們前面的文章提過我們有一種技術叫做『平滑』操作,可以緩解這個問題,最常見的平滑技術是拉普拉斯估測。
那個…咳咳,樸素貝葉斯算出的概率結果,比較大小還湊合,實際物理含義…恩,別太當真。
樸素貝葉斯有分布獨立的假設前提,而現實生活中這些predictor很難是完全獨立的。
文本分類/垃圾文本過濾/情感判別:這大概會樸素貝葉斯應用做多的地方了,即使在現在這種分類器層出不窮的年 代,在文本分類場景中,樸素貝葉斯依舊堅挺地占據著一席之地。原因嘛,大家知道的,因為多分類很簡單,同時在文本數據中,分布獨立這個假設基本是成立的。 而垃圾文本過濾(比如垃圾郵件識別)和情感分析(微博上的褒貶情緒)用樸素貝葉斯也通常能取得很好的效果。
多分類實時預測:這個是不是不能叫做場景?對于文本相關的多分類實時預測,它因為上面提到的優點,被廣泛應用,簡單又高效。
推薦系統:是的,你沒聽錯,是用在推薦系統里!!樸素貝葉斯和協同過濾(Collaborative Filtering)是一對好搭檔,協同過濾是強相關性,但是泛化能力略弱,樸素貝葉斯和協同過濾一起,能增強推薦的覆蓋度和效果。
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} /** * 樸素貝葉斯僵尸粉鑒定(樸素貝葉斯需要非負特征值) * 正常用戶標記為1,虛假用戶標記為0 * V(v1,v2,v3) * v1 = 已發微博/注冊天數 * v2 = 好友數量/注冊天數 * v3 = 是否有手機 * 已發微博/注冊天數 < 0.05, V1 = 0 * 0.05 <= 已發微博/注冊天數 < 0.75, V1 = 1 * 0.75 <= 已發微博/注冊天數, V1 = 2 * Created by eric on 16-7-19. */ object zombieFansBayes { val conf = new SparkConf() //創建環境變量 .setMaster("local") //設置本地化處理 .setAppName("ZombieBayes") //設定名稱 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) //對數據進行分配 val trainingData = splits(0) //設置訓練數據 val testData = splits(1) //設置測試數據 val model = NaiveBayes.train(trainingData, lambda = 1.0) //訓練貝葉斯模型 val predictionAndLabel = testData.map(p => (model.predict(p.features), p.label)) //驗證模型 val accuracy = 1.0 * predictionAndLabel.filter( //計算準確度 label => label._1 == label._2).count() //比較結果 println(accuracy) val test = Vectors.dense(0, 0, 10) val result = model.predict(test)//預測一個特征 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
以上是“spark mllib中樸素貝葉斯算法怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。