spark 類別特徵 Spark 貝葉斯分類演算法

2021-10-13 11:50:42 字數 3280 閱讀 3803

一、貝葉斯定理數學基礎

我們都知道條件概率的數學公式形式為

根據此公式變換,得到貝葉斯公式:

更進一步將貝葉斯公式進行推廣,假設事件a發生的概率是由一系列的因素(a1,a2,a3,...an)決定的,則事件a的全概率公式為:

二、樸素貝葉斯分類

樸素貝葉斯分類是一種十分簡單的分類演算法,其思想基礎是:對於給定的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項就屬於哪個類別。

假設v=(v1,v2,v3....vn)是乙個待分項,而vn為v的每個特徵向量;

b=(b1,b2,b3...bn)是乙個分類集合,bn為每個具體的分類;

如果需要測試某個vn歸屬於b集合中的哪個具體分類,則需要計算p(bn|v),即在v發生的條件下,歸屬於b1,b2,b3,....bn中哪個可能性最大。即:

因此,這個問題轉換成求每個待分項分配到集合中具體分類的概率是多少。而這個·具體概率的求法可以使用貝葉斯定律。

經過變換得出:

三、mllib對應的api

1、貝葉斯分類伴生物件nativebayes,原型:

object *****bayes extends scala.anyref with scala.serializable

def train(input : org.apache.spark.rdd.rdd[org.apache.spark.mllib.regression.labeledpoint], lambda : scala.double) : org.apache.spark.mllib.classification.*****bayesmodel =

其主要定義了訓練貝葉斯分類模型的train方法,其中input為訓練樣本,lambda為平滑因子引數。

2、train方法,其是nativebayes物件的靜態方法,根據設定的樸素貝葉斯分類引數新建樸素貝葉斯分類類,並執行run方法進行訓練。

3、樸素貝葉斯分類類*****bayes,原型:

class *****bayes private (private varlambda : scala.double) extends scala.anyref with scala.serializable with org.apache.spark.logging

def setlambda(lambda : scala.double) : org.apache.spark.mllib.classification.*****bayes=

def run(data : org.apache.spark.rdd.rdd[org.apache.spark.mllib.regression.labeledpoint]) : org.apache.spark.mllib.classification.*****bayesmodel=

4、run方法,該方法主要計算先驗概率和條件概率。首先對所有樣本資料進行聚合,以label為key,聚合同乙個label的特徵features,得到所有label的統計(label,features之和),然後根據label統計資料,再計算p(i),和theta(i)(j),最後,根據類別標籤列表、類別先驗概率、各類別下的每個特徵的條件概率生成貝葉斯模型。

先驗概率並取對數p(i)=log(p(yi))=log((i類別的次數+平滑因子)/(總次數+類別數*平滑因子)))

各個特徵屬性的條件概率,並取對數

theta(i)(j)=log(p(ai|yi))=log(sumtermfreqs(j)+平滑因子)-thetalogdenom

其中,theta(i)(j)是類別i下特徵j的概率,sumtermfreqs(j)是特徵j出現的次數,thetalogdenom一般分2種情況,如下:

1.多項式模型

thetalogdenom=log(sumtermfreqs.values.sum+ numfeatures* lambda)

其中,sumtermfreqs.values.sum類別i的總數,numfeatures特徵數量,lambda平滑因子

2.伯努利模型

thetalogdenom=log(n+2.0*lambda)

5、aggregated:對所有樣本進行聚合統計,統計沒個類別下的每個特徵值之和及次數。

6、pi表示各類別·的·先驗概率取自然對數的值

7、theta表示各個特徵在各個類別中的條件概率值

8、predict:根據模型的先驗概率、條件概率,計算樣本屬於每個類別的概率,取最大項作為樣本的類別

9、貝葉斯分類模型*****bayesmodel包含引數:類別標籤列表(labels)、類別先驗概率(pi)、各個特徵在各個類別中的條件概率(theta)。

四、使用示例

1、樣本資料:

0,1 0 0

0,2 0 0

1,0 1 0

1,0 2 0

2,0 0 1

2,0 0 2

importorg.apache.spark.mllib.classification.*****bayesimportorg.apache.spark.mllib.linalg.vectorsimportorg.apache.spark.mllib.util.mlutilsimportorg.apache.spark.

object bayes importorg.apache.spark.mllib.classification.*****bayesimportorg.apache.spark.mllib.linalg.vectorsimportorg.apache.spark.mllib.regression.labeledpointimportorg.apache.spark.

object bayes //將樣本資料分為訓練樣本和測試樣本

val sp=demo.randomsplit(array(0.6,0.4),seed = 11l)//對資料進行分配

val train=sp(0)//訓練資料

val testing=sp(1)//測試資料//建立貝葉斯分類模型,並進行訓練

val model=*****bayes.train(train,lambda = 1.0)//對測試樣本進行測試

val pre=testing.map(p=>(model.predict(p.features),p.label))//驗證模型

val prin=pre.take(20)

println("prediction"+"\t"+"label")for(i

println(prin(i)._1+"\t"+prin(i)._2)

}val accuracy=1.0 *pre.filter(x=>x._1==x._2).count()//計算準確度

println(accuracy)

Spark特徵提取 TF IDF

詞頻 term frequency,縮寫為tf 在一篇文件中出現次數最多的詞是 的 是 在 這一類最常用的詞。它們叫做 停用詞 stop words 表示對找到結果毫無幫助 必須過濾掉的詞。還有長度小於2大於10的,數字也過濾掉,根據詞性過濾,留下有實際意義的詞。用統計學語言表達,就是在詞頻的基礎上...

Spark 貝葉斯分類演算法

一 貝葉斯定理數學基礎 我們都知道條件概率的數學公式形式為 根據此公式變換,得到貝葉斯公式 更進一步將貝葉斯公式進行推廣,假設事件a發生的概率是由一系列的因素 a1,a2,a3,an 決定的,則事件a的全概率公式為 二 樸素貝葉斯分類 樸素貝葉斯分類是一種十分簡單的分類演算法,其思想基礎是 對於給定...

Spark 貝葉斯分類演算法

一 貝葉斯定理數學基礎 我們都知道條件概率的數學公式形式為 根據此公式變換,得到貝葉斯公式 更進一步將貝葉斯公式進行推廣,假設事件a發生的概率是由一系列的因素 a1,a2,a3,an 決定的,則事件a的全概率公式為 二 樸素貝葉斯分類 樸素貝葉斯分類是一種十分簡單的分類演算法,其思想基礎是 對於給定...