溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2021-12-16 14:40:58 來源:億速云 閱讀:131 作者:小新 欄目:云計(jì)算

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

優(yōu)點(diǎn)

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

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

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

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

缺點(diǎn)

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

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

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

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

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

  • 多分類實(shí)時(shí)預(yù)測(cè):這個(gè)是不是不能叫做場(chǎng)景?對(duì)于文本相關(guān)的多分類實(shí)時(shí)預(yù)測(cè),它因?yàn)樯厦嫣岬降膬?yōu)點(diǎn),被廣泛應(yīng)用,簡(jiǎn)單又高效。

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

運(yùn)行代碼如下

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ā)微博/注冊(cè)天數(shù)
  * v2 = 好友數(shù)量/注冊(cè)天數(shù)
  * v3 = 是否有手機(jī)
  * 已發(fā)微博/注冊(cè)天數(shù) < 0.05, V1 = 0
  * 0.05 <= 已發(fā)微博/注冊(cè)天數(shù) < 0.75, V1 = 1
  * 0.75 <= 已發(fā)微博/注冊(cè)天數(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)			//對(duì)數(shù)據(jù)進(jìn)行分配
    val trainingData = splits(0)									//設(shè)置訓(xùn)練數(shù)據(jù)
    val testData = splits(1)									//設(shè)置測(cè)試數(shù)據(jù)
    val model = NaiveBayes.train(trainingData, lambda = 1.0)			//訓(xùn)練貝葉斯模型
    val predictionAndLabel = testData.map(p => (model.predict(p.features), p.label)) //驗(yàn)證模型
    val accuracy = 1.0 * predictionAndLabel.filter(					//計(jì)算準(zhǔn)確度
        label => label._1 == label._2).count()						//比較結(jié)果
    println(accuracy)
    val test = Vectors.dense(0, 0, 10)
    val result = model.predict(test)//預(yù)測(cè)一個(gè)特征 
    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中樸素貝葉斯算法怎么用

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI