【Python機器學習】110:簡單貝氏分類器介紹及其應用 | 貝氏分類

Naive Bayes Classifier. “【Python機器學習】110:簡單貝氏分類器介紹及其應用” is published by 張育晟Eason Chang in 展開數據人生.展開數據人生機器學習入門資料分析機器學習進階【Python機器學習】110:簡單貝氏分類器介紹及其應用NaiveBayesClassifier張育晟EasonChangFollowSep12,2020·7minreadPhotobyJOHNTOWNERonUnsplash接下來要介紹的分類器叫簡單(單純)貝氏分類器,那什麼是貝氏呢?貝氏定理是機率中的一個定理,描述在已知一些條件下,某事件的發生機率。

通常,事件A在事件B已發生的條件下發生的機率,與事件B在事件A已發生的條件下發生的機率是不一樣的。

貝氏定理的公式那貝氏定理又和分類器有什麼關聯呢?首先我們要先知道分類器模型其實是把連續型的輸出𝑋𝑤轉換到離散型的輸出𝑦̂,中間會經過兩個函數的運算,第一個函數用𝜎,第二個則用𝐻表示。

其中𝜎俗稱為激勵函數(Activationfunction),𝐻稱為階躍函數(Stepfunction)激勵函數將連續型輸出轉換為機率(0~1)階躍函數將機率輸出轉換為離散值而貝氏分類器只在意第一個函數(機率的計算),也就是說,該分類器的輸出可以用機率表示:給定𝑥則其類別為𝐶𝑖的機率為多少其中,𝑃(𝐶𝑖|𝑥)即我們俗稱的後驗機率(PosteriorProbability)我們一樣使用鐵達尼號的範例,使用簡單貝氏分類器分類乘客的生存與否:先使用pd.crosstab()製作FrequencyTable,以方便我們計算機率:我們將乘客分割成6個類別(Pclass3個,Survived2個),用這6個區塊的數字就可以分別計算後驗機率:左邊的機率是我們屆時分類的依據,當一個Pclass=1的樣本進來時,究竟要猜他是存活還是死亡,就是根據計算得到的後驗機率,如果進來的Pclass=2,就看Pclass為2的後驗機率,以此類推。

為方便計算,先把所需要的數字都先準備好:注意:以上程式嗎使用loc函數,括號裡放的是標籤的名字而不是索引值,所以程式嗎中的123是標籤名字,而不是相對位置分別去計算分母以及分子的機率:計算3個Pclass的後驗機率:如上圖,3個後驗機率分別求出來了後,假如現在得到一個樣本,他的Pclass=1,那我就有63%的機率去猜該乘客是存活的,相反,有37%的機率猜他是死的。

果然與上一章提到的專家意見的建議差不多,倉等越高的顧客存活率越高,makesense!!我們現在算出來的機率並不是trainingdata的機率,只是把整個data拿來算如何操作簡單貝氏分類器來預測乘客的生存與否:注意:傳資料回資料框時,記得先使用ravel()函數轉回一維陣列製作訓練資料的FrequencyTable:如此一來,trainingdata就會跟先前的titanicsubset差不多,只是樣本數較少計算訓練資料的後驗機率:如上圖,我們一樣輕鬆的把後驗機率算出來,雖然值和剛才略有不一樣,但還是和專家意見預期的差不多,越高倉等的就要用越高的機率去猜他存活。

但是在有了後驗機率之後,到底要怎麼把它應用到我們的X_validation上面來預測y_validation呢?將後驗機率應用至X_validation,得到𝑦̂:我們使用choice函數,給一個陣列(0,1)從裡面隨機挑選,之前在不給p參數的情況下就是各50%。

現在我們把後驗機率放進去:假如它的Pclass為1,則預測該乘客死亡(0)的機率為(1-0.24),存活(1)的機率為(0.24)我們印出前十筆預測結果和正確答案(y_validation)做比較,假如上下是一樣的,就表示我們的預測是對的,假如不一樣,那預測就是錯的。

使用準確率檢查該分類器的表現如果簡單貝氏分類器希望納入多個類別變數呢?在專家意見中,除了艙等以外,性別也是影響生存率的,女性較男性易生存。

如果要把性別加入該分類模型,應該要如何操作呢?一樣先製作訓練資料的FrequencyTable:如上圖,如果再加入一個類別變數,則FrequencyTable外觀就會變得比較麻煩,且其索引會成一個巢狀外觀,每一個Pclass對應到兩種性別,所以要抓的樣本個數就會變得更多,計算也會更多,最後才會得到6個後驗機率。

計算有n個特徵的後驗機率(泛化形式):在泛化的公式中有個假設:特徵和特徵之間是獨立的,互相不影響,為什麼要有這個假設呢?這樣它的機率才可以互相相乘,而這也是為什麼該分類器叫“簡單”貝氏分類器的原因。



常見投資理財問答


延伸文章資訊