1. 程式人生 > >機器學習演算法筆記之4:貝葉斯分類器

機器學習演算法筆記之4:貝葉斯分類器

一、貝葉斯分類器詳解

貝葉斯分類器是一類分類演算法的總稱,這類演算法均以貝葉斯定理為理論基礎。貝葉斯分類器的分類原理是通過先驗概率,利用貝葉斯公式計算出後驗概率,選擇最大後驗概率所對應的分類結果。

貝葉斯準則

其中,P(c)是先驗概率,P(x|c)樣本x相對於;類標記c的類條件概率,或稱為似然(likelihood);P(x)是用於歸一化的證據因子。對於給定樣本x,證據因子與類標記無關,則估計P(c|x)可轉換為基於訓練資料D來估計鮮豔P(c)和似然P(x|c)。類先驗概率P(c)可通過各類樣本出現的頻率來進行估計。對於類條件概率P(x|c),一種常用策略是先假定其具有某種確定的概率分佈形式,再基於訓練樣本對概率分佈的引數進行估計。

對於樸素貝葉斯分類器,樸素(naive)的含義是各個特徵屬性之間是相互獨立的。例如,在計算p(w|ci)時,我們將特徵向量w展開為獨立子特徵,則轉化為,這裡我們有假設所有特徵都獨立,即可以使用以下公式來計算,這就是利用了樸素的原則。(wi和下文的xi是相同含義,表示各個特徵屬性分量)

基於以上,樸素貝葉斯分類器的訓練過程就是基於訓練集D來估計類先驗概率P(c),併為每個特徵屬性估計條件概率P(xi|c)。對於類先驗概率,在有足夠獨立同分布訓練樣本的條件下,通過計算各類樣本佔總樣本數的比例來計算。計算條件概率時,對於離散屬性而言,,對於連續屬性考慮概率密度函式,

式中的兩個未知引數均值和方差極大似然法估計得到。假設概率密度函式

,則引數的極大似然估計為:

這就是說,通過極大似然法得到的正態分佈均值就是樣本均值,方差就是的均值。

為了避免其他屬性攜帶的資訊被訓練集中未出現的屬性值“抹去”,在估計概率值時通常要進行“平滑”(smoothing),常用拉普拉斯修正。具體來說,令N表示訓練集D中可能的類別數,Ni表示第i個屬性可能的取值數,修正為

拉普拉斯修正避免了因訓練集樣本不充分而導致概率估值為零的問題,並且在訓練集變大時,修正過程所引入的先驗的影響也會逐漸變得可忽略,使得估值逐漸趨向於實際的概率值。

二、Sklearn程式程式碼及實驗結果

GaussianNB、MultinomialNB、BernoulliNB分別是高斯貝葉斯分類器、多項式貝葉斯分類器、伯努利貝葉斯分類器,他們的區別就在於假設了不同的P(xi|c)分佈。

完整程式碼:

from sklearn import datasets, cross_validation, naive_bayes
import matplotlib.pyplot as plt

# 視覺化手寫識別資料集Digit Dataset
def show_digits():
    digits = datasets.load_digits()
    fig = plt.figure()
    for i in range(20):
        ax = fig.add_subplot(4, 5, i+1)
        ax.imshow(digits.images[i], cmap = plt.cm.gray_r, interpolation='nearest')
    plt.show()

show_digits()

# 載入Digit資料集
def load_data():
    digits = datasets.load_digits()
    return cross_validation.train_test_split(digits.data, digits.target, 
                                             test_size = 0.25, random_state = 0)

def test_GaussianNB(*data):
    X_train, X_test, y_train, y_test = data
    cls = naive_bayes.GaussianNB()
    cls.fit(X_train, y_train)
    print('GaussianNB Classifier')
    print('Training Score: %.2f' % cls.score(X_train, y_train))
    print('Test Score: %.2f' % cls.score(X_test, y_test))
    
X_train, X_test, y_train, y_test = load_data()
test_GaussianNB(X_train, X_test, y_train, y_test)

def test_MultinomialNB(*data):
    X_train, X_test, y_train, y_test = data
    cls = naive_bayes.MultinomialNB()
    cls.fit(X_train, y_train)
    print('MultinomialNB Classifier')
    print('Training Score: %.2f' % cls.score(X_train, y_train))
    print('Test Score: %.2f' % cls.score(X_test, y_test))
    
X_train, X_test, y_train, y_test = load_data()
test_MultinomialNB(X_train, X_test, y_train, y_test)

def test_BernoulliNB(*data):
    X_train, X_test, y_train, y_test = data
    cls = naive_bayes.BernoulliNB()
    cls.fit(X_train, y_train)
    print('BernoulliNB Classifier')
    print('Training Score: %.2f' % cls.score(X_train, y_train))
    print('Test Score: %.2f' % cls.score(X_test, y_test))
    
X_train, X_test, y_train, y_test = load_data()
test_BernoulliNB(X_train, X_test, y_train, y_test)

實驗結果:


GaussianNB Classifier
Training Score: 0.86
Test Score: 0.83
MultinomialNB Classifier
Training Score: 0.91
Test Score: 0.91
BernoulliNB Classifier
Training Score: 0.87
Test Score: 0.85

相關推薦

機器學習演算法筆記4分類

一、貝葉斯分類器詳解 貝葉斯分類器是一類分類演算法的總稱,這類演算法均以貝葉斯定理為理論基礎。貝葉斯分類器的分類原理是通過先驗概率,利用貝葉斯公式計算出後驗概率,選擇最大後驗概率所對應的分類結果。 貝葉斯準則 其中,P(c)是先驗概率,P(x|c)樣本x相對於;類標記c的類

【原創】.NET平臺機器學習元件-Infer.NET連載(二)分類

關於本文件的說明   本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。   歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。   本人正在研究基於Infer.NET元件,並

機器學習筆記(六)分類

機器學習所研究的主要內容,是關於在計算機上從資料中產生“模型”的演算法,這個產生的模型大體上可以分為“判別式模型”和“生成式模型”兩大類。 其中判別式模型是給定x,通過直接對條件概率分佈P(y|x)進行建模來預測y。這種方法尋找不同類別的最優分類面,反映的是異類資料之間的差異。之前幾篇文章中介紹

機器學習分類

貝葉斯 逆向 檢測 .net 極大似然估計 href ref .com blank 參考文獻 從貝葉斯定理說開去 關鍵詞:逆向概率;先驗概率;後驗概率 我所理解的貝葉斯定理--知乎專欄 關鍵詞:醫院病癥檢測中的真假陽性 似然與極大似然估計--知乎專欄 關鍵詞:似然與概率的區

機器學習分類(二)——高樸素分類代碼實現

mod ces 數據 大於等於 即使 平均值 方差 很多 mode 一 高斯樸素貝葉斯分類器代碼實現 網上搜索不調用sklearn實現的樸素貝葉斯分類器基本很少,即使有也是結合文本分類的多項式或伯努利類型,因此自己寫了一遍能直接封裝的高斯類型NB分類器,當然與真正的源碼相

機器學習》 周志華學習筆記第七章 分類(課後習題)python 實現

課後習題答案 1.試用極大似然法估算西瓜集3.0中前3個屬性的類條件概率。 好瓜有8個,壞瓜有9個 屬性色澤,根蒂,敲聲,因為是離散屬性,根據公式(7.17) P(色澤=青綠|好瓜=是) = 3/8 P(色澤=烏黑|好瓜=是) = 4/8 P(色澤=淺白|好瓜=是) =

機器學習實戰》四——樸素

這裡寫自定義目錄標題 《機器學習實戰》之四——樸素貝葉斯 一. 數學部分 二. 準備資料階段 三. NB訓練函式 針對演算法部分的改進 四. NB分類函式 五. 測試NB分類函式 六. 使用樸素貝葉斯進行垃

機器學習分類,樸素,拉普拉斯平滑

數學基礎: 數學基礎是貝葉斯決策論Bayesian DecisionTheory,和傳統統計學概率定義不同。 頻率學派認為頻率是是自然屬性,客觀存在的。 貝葉斯學派,從觀察這出發,事物的客觀隨機性只是觀察者不知道結果,也就是觀察者的知識不完備,對於知情者而言,事物沒有隨機性,隨機

機器學習】(5)決策定理

      其中,P(C|x)表示觀測到資料x時事件C發生的條件概率,我們稱為後驗概率(posterior probability);P(C)=P(C=1)是事件C=1發生時的概率,稱為先驗概率(prior probabilty),因為這是在觀察到資料x之前就已經得到的關於C的知識;P(x|C)稱為類似然,與

OpenCV機器學習(1)分類實現程式碼分析

OpenCV的機器學習類定義在ml.hpp檔案中,基礎類是CvStatModel,其他各種分類器從這裡繼承而來。 今天研究CvNormalBayesClassifier分類器。 1.類定義 在ml.hpp中有以下類定義: class CV_EXPORTS_W CvNorm

機器學習 學習筆記(11) 分類

貝葉斯決策論是在概率框架下實施決策的基本方法。對分類任務來說,在所有相關概率都已知的理想情形下,貝葉斯決策論考慮如何基於這些概率和誤判損失來選擇最優的類別標記, 假設有N種可能的類別標記,即,是將一個真實標記為的樣本誤分類為所產生的損失,則基於後驗概率可獲得將樣本x分類為所

機器學習演算法(三)——樸素演算法及R語言實現方法

樸素貝葉斯演算法也是一種常用的分類演算法,尤其在對文字文件分類的學習任務中,樸素貝葉斯分類是最有效的演算法之一。所謂的樸素,即假設在給定目標值時屬性值之間相互條件獨立,雖然這一假設看似不合理,但其最終的分類效果卻普遍較好。 一、概述 1、貝葉斯公式 2、最大後驗假設(MA

機器學習-帶你搞懂樸素分類演算法

帶你搞懂樸素貝葉斯分類演算法 你搞懂樸素貝葉斯分類算 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。而樸素樸素貝葉斯分類是貝葉斯分類中最簡單,也是常見的一種分類方法。這篇文章我儘可能用直白的話語總結一下我們學習會上講到的樸素貝葉斯分

白話機器學習演算法(九)樸素

樸素貝葉斯,確實很樸素,原理也很簡單,但是用途很厲害;很多涉及概率的機器學習演算法都要用到這些東西:最大似然估計(MLE),貝葉斯估計(最大後驗MAP),EM(也是最大似然估計,只是方法不同),最大熵; 先說點廢話,再寫點公式吧: 最大似然估計:我取什麼樣的引數,使得當前資

機器學習(十二)樸素分類

樸素貝葉斯分類 作者:hjimce 本篇博文是我學習《機器學習實戰》這邊書時候的學習筆記。記得之前看到這個演算法名的時候,我以為很難,因為我不是很喜歡概率論的知識,其實最主要的原因是因為已經概率論的相關知識都忘光了,所以一直不想去複習,於是就覺得這個演算法不好學。不

周志華《Machine Learning》學習筆記(8)--分類

上篇主要介紹和討論了支援向量機。從最初的分類函式,通過最大化分類間隔,max(1/||w||),min(1/2||w||^2),凸二次規劃,朗格朗日函式,對偶問題,一直到最後的SMO演算法求解,都為尋找一個最優解。接著引入核函式將低維空間對映到高維特徵空間,解決

機器學習實戰第四章——樸素分類(原始碼解析)

樸素貝葉斯分類 #coding=utf-8 ''' Created on 2016年1月9日 @author: admin ''' from numpy import * # 載入資料集函式 def loadDataSet(): # 定義郵件列表 p

情感分析方法snownlp和分類(三)

《情感分析方法之nltk情感分析器和SVM分類器(二)》主要使用nltk處理英文語料,使用SVM分類器處理中文語料。實際的新聞評論中既包含英文,又包含中文和阿拉伯文。本次主要使用snownlp處理中文語料。一、snownlp使用from snownlp import Snow

4.樸素分類實現-matlab

實現樸素貝葉斯分類器,並且根據李航《統計機器學習》第四章提供的資料訓練與測試,結果與書中一致 分別實現了樸素貝葉斯以及帶有laplace平滑的樸素貝葉斯 %書中例題實現樸素貝葉斯 %特徵1的取值集合 A1=[1;2;3]; %特徵2的取值集合 A2=[4;5;6];%S M L AValue

機器學習 python 樸素分類 預測新聞類別

groups group news ckey put epo test electron final 使用python3 學習樸素貝葉斯分類api 設計到字符串提取特征向量 歡迎來到我的git下載源代碼: https://github.com/linyi0604/kag