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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习算法总结--朴素贝叶斯

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习算法总结--朴素贝叶斯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這次需要總結的是樸素貝葉斯算法,參考文章:

  • 《統計學習方法》
  • 機器學習常見算法個人總結(面試用)
  • 樸素貝葉斯理論推導與三種常見模型
  • 樸素貝葉斯的三個常用模型:高斯、多項式、伯努利

簡介

樸素貝葉斯是基于貝葉斯定理與特征條件獨立假設的分類方法。

貝葉斯定理是基于條件概率來計算的,條件概率是在已知事件B發生的前提下,求解事件A發生的概率,即P(A|B)=P(AB)P(B),而貝葉斯定理則可以通過P(A|B)來求解P(B|A)

P(B|A)=P(A|B)P(B)P(A)
其中分母 P(A)可以根據全概率公式分解為: P(A)=ni=1P(Bi)P(A|Bi)

特征條件獨立假設是指假設各個維度的特征x1,x2,...,xn互相獨立,則條件概率可以轉化為:

P(x|yk)=P(x1,x2,...,xn|yk)=i=1nP(xi|yk)
樸素貝葉斯分類器可表示為:
f(x)=argmaxykP(yk|x)=argmaxykP(yk)ni=1P(xi|yk)kP(yk)ni=1P(xi|yk)
而由于對上述公式中分母的值都是一樣的,所以可以忽略分母部分,即可以表示為:
f(x)=argmaxP(yk)i=1nP(xi|yk)
這里 P(yk)是先驗概率,而 P(yk|x)則是后驗概率,樸素貝葉斯的目標就是最大化后驗概率,這等價于期望風險最小化。

參數估計

極大似然估計

樸素貝葉斯的學習意味著估計P(yk)P(xi|yk),可以通過極大似然估計來估計相應的概率。

如上圖所示,分別是P(yk)P(xi|yk)的極大似然估計。

當求解完上述兩個概率,就可以對測試樣本使用樸素貝葉斯分類算法來預測其所屬于的類別,簡單總結的算法流程如下所示:

貝葉斯估計/多項式模型

極大似然估計可能會出現所要估計的概率值為0的情況,這會影響到后驗概率的計算,使分類產生偏差。解決這個問題的辦法是使用貝葉斯估計,也被稱為多項式模型。

特征是離散的時候,使用多項式模型。多項式模型在計算先驗概率P(yk)和條件概率P(xi|yk)時,會做一些平滑處理,具體公式為:

P(yk)=Nyk+αN+kα

N是總的樣本個數,k是總的類別個數,Nyk是類別為yk的樣本個數,α是平滑值。

P(xi|yk)=Nyk,xi+αNyk+nα

Nyk是類別為yk的樣本個數,n是特征的維數,Nyk,xi是類別為yk的樣本中,第i維特征的值是xi的樣本個數,α是平滑值。

α=1時,稱作Laplace平滑,當0<α<1時,稱作Lidstone平滑,α=0時不做平滑。

如果不做平滑,當某一維特征的值xi沒在訓練樣本中出現過時,會導致P(xi|yk)=0,從而導致后驗概率為0。加上平滑就可以克服這個問題。

高斯模型

當特征是連續變量的時候,運用多項式模型會導致很多P(xi|yk)=0(不做平滑的情況下),即使做平滑,所得到的條件概率也難以描述真實情況,所以處理連續變量,應該采用高斯模型。

高斯模型是假設每一維特征都服從高斯分布(正態分布):

P(xi|yk)=12πσ2yk?????exp(?(xi?μyk)22σ2yk)
μyk,i表示類別為yk的樣本中,第i維特征的均值;
σ2yk,i表示類別為yk的樣本中,第i維特征的方差。

伯努利模型

與多項式模型一樣,伯努利模型適用于離散特征的情況,所不同的是,伯努利模型中每個特征的取值只能是1和0(以文本分類為例,某個單詞在文檔中出現過,則其特征值為1,否則為0).

伯努利模型中,條件概率P(xi|yk)的計算方式是:

當特征值xi為1時,P(xi|yk)=P(xi=1|yk)

當特征值xi為0時,P(xi|yk)=1?P(xi=1|yk)

工作流程

  • 準備階段
    確定特征屬性,并對每個特征屬性進行適當劃分,然后由人工對一部分待分類項進行分類,形成訓練樣本。
  • 訓練階段
    計算每個類別在訓練樣本中的出現頻率及每個特征屬性劃分對每個類別的條件概率估計
  • 應用階段
    使用分類器進行分類,輸入是分類器和待分類樣本,輸出是樣本屬于的分類類別
  • 屬性特征

  • 特征為離散值時直接統計即可(表示統計概率)
  • 特征為連續值的時候假定特征符合高斯分布,則有
  • P(xi|yk)=12πσ2yk?????exp(?(xi?μyk)22σ2yk)

    優缺點

    優點

  • 對小規模的數據表現很好,適合多分類任務,適合增量式訓練。
  • 缺點

  • 對輸入數據的表達形式很敏感(離散、連續,值極大極小之類的)。
  • 代碼實現

    下面是使用sklearn的代碼例子,分別實現上述三種模型,例子來自樸素貝葉斯的三個常用模型:高斯、多項式、伯努利。
    下面是高斯模型的實現

    >>> from sklearn import datasets >>> iris = datasets.load_iris() >>> iris.feature_names # 四個特征的名字 ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] >>> iris.data array([[ 5.1, 3.5, 1.4, 0.2],[ 4.9, 3. , 1.4, 0.2],[ 4.7, 3.2, 1.3, 0.2],[ 4.6, 3.1, 1.5, 0.2],[ 5. , 3.6, 1.4, 0.2],[ 5.4, 3.9, 1.7, 0.4],[ 4.6, 3.4, 1.4, 0.3],[ 5. , 3.4, 1.5, 0.2],......[ 6.5, 3. , 5.2, 2. ],[ 6.2, 3.4, 5.4, 2.3],[ 5.9, 3. , 5.1, 1.8]]) #類型是numpy.array >>> iris.data.size 600 #共600/4=150個樣本 >>> iris.target_names array(['setosa', 'versicolor', 'virginica'], dtype='|S10') >>> iris.target array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,....., 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ......, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]) >>> iris.target.size 150 >>> from sklearn.naive_bayes import GaussianNB >>> clf = GaussianNB() >>> clf.fit(iris.data, iris.target) >>> clf.predict(iris.data[0]) array([0]) # 預測正確 >>> clf.predict(iris.data[149]) array([2]) # 預測正確 >>> data = numpy.array([6,4,6,2]) >>> clf.predict(data) array([2]) # 預測結果很合理

    多項式模型如下:

    >>> import numpy as np >>> X = np.random.randint(5, size=(6, 100)) >>> y = np.array([1, 2, 3, 4, 5, 6]) >>> from sklearn.naive_bayes import MultinomialNB >>> clf = MultinomialNB() >>> clf.fit(X, y) MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True) >>> print(clf.predict(X[2])) [3]

    值得注意的是,多項式模型在訓練一個數據集結束后可以繼續訓練其他數據集而無需將兩個數據集放在一起進行訓練。在sklearn中,MultinomialNB()類的partial_fit()方法可以進行這種訓練。這種方式特別適合于訓練集大到內存無法一次性放入的情況。

    在第一次調用partial_fit()時需要給出所有的分類標號。

    >>> import numpy >>> from sklearn.naive_bayes import MultinomialNB >>> clf = MultinomialNB() >>> clf.partial_fit(numpy.array([1,1]), numpy.array(['aa']), ['aa','bb']) GaussianNB() >>> clf.partial_fit(numpy.array([6,1]), numpy.array(['bb'])) GaussianNB() >>> clf.predict(numpy.array([9,1])) array(['bb'], dtype='|S2')

    伯努利模型如下:

    >>> import numpy as np >>> X = np.random.randint(2, size=(6, 100)) >>> Y = np.array([1, 2, 3, 4, 4, 5]) >>> from sklearn.naive_bayes import BernoulliNB >>> clf = BernoulliNB() >>> clf.fit(X, Y) BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True) >>> print(clf.predict(X[2])) [3]

    樸素貝葉斯的總結就到這里為止。

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的机器学习算法总结--朴素贝叶斯的全部內容,希望文章能夠幫你解決所遇到的問題。

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