
- Python機器學習
- 首頁
- 基礎知識
- Python生態系統
- 機器學習方法
- 機器學習專案的資料載入
- 用統計學理解資料
- 用視覺化理解資料
- 資料準備
- 資料特徵選擇
- 機器學習演算法 - 分類
- 介紹
- 邏輯迴歸
- 支援向量機 (SVM)
- 決策樹
- 樸素貝葉斯
- 隨機森林
- 機器學習演算法 - 迴歸
- 隨機森林
- 線性迴歸
- 機器學習演算法 - 聚類
- 概述
- K均值演算法
- 均值漂移演算法
- 層次聚類
- 機器學習演算法 - KNN演算法
- 尋找最近鄰
- 效能指標
- 自動化工作流程
- 提升機器學習模型效能
- 提升機器學習模型效能(續…)
- Python機器學習 - 資源
- Python機器學習 - 快速指南
- Python機器學習 - 資源
- Python機器學習 - 討論
分類演算法 - 樸素貝葉斯
樸素貝葉斯演算法介紹
樸素貝葉斯演算法是一種分類技術,它基於貝葉斯定理,並假設所有預測變數相互獨立。簡單來說,這個假設是指一個特徵在一個類別中的存在與同一類別中任何其他特徵的存在無關。例如,一部手機如果具有觸控式螢幕、網際網路功能、良好的攝像頭等,則可以被認為是智慧手機。雖然所有這些特徵都是相互依賴的,但它們獨立地影響著這部手機是智慧手機的機率。
在貝葉斯分類中,主要目標是找到後驗機率,即給定一些觀察到的特徵後標籤的機率,𝑃(𝐿 | 𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠)。藉助貝葉斯定理,我們可以將其用定量形式表示如下:
$$P(L |features)= \frac{P(L)P(features |L)}{𝑃(𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠)}$$這裡,𝑃(𝐿 | 𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠) 是類的後驗機率。
𝑃(𝐿) 是類的先驗機率。
𝑃(𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠 | 𝐿) 是似然度,即給定類別的預測變數的機率。
𝑃(𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠) 是預測變數的先驗機率。
使用Python構建樸素貝葉斯模型
Python庫Scikit-learn是最有用的庫,可以幫助我們在Python中構建樸素貝葉斯模型。在Scikit-learn Python庫下,我們有以下三種類型的樸素貝葉斯模型:
高斯樸素貝葉斯
這是最簡單的樸素貝葉斯分類器,它假設每個標籤的資料都來自簡單的正態分佈。
多項式樸素貝葉斯
另一個有用的樸素貝葉斯分類器是多項式樸素貝葉斯,其中假設特徵來自簡單的多項分佈。這種樸素貝葉斯最適合表示離散計數的特徵。
伯努利樸素貝葉斯
另一個重要的模型是伯努利樸素貝葉斯,其中假設特徵是二元的(0和1)。帶有“詞袋”模型的文字分類可以作為伯努利樸素貝葉斯的應用。
示例
根據我們的資料集,我們可以選擇上面解釋的任何樸素貝葉斯模型。在這裡,我們正在Python中實現高斯樸素貝葉斯模型:
我們將從所需的匯入開始:
import numpy as np import matplotlib.pyplot as plt import seaborn as sns; sns.set()
現在,透過使用Scikit-learn的`make_blobs()`函式,我們可以生成具有高斯分佈的點塊:
from sklearn.datasets import make_blobs X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5) plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');
接下來,為了使用GaussianNB模型,我們需要匯入並建立它的物件:
from sklearn.naive_bayes import GaussianNB model_GBN = GaussianNB() model_GNB.fit(X, y);
現在,我們必須進行預測。這可以在生成一些新資料後完成:
rng = np.random.RandomState(0) Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2) ynew = model_GNB.predict(Xnew)
接下來,我們繪製新資料以找到其邊界:
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer') lim = plt.axis() plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1) plt.axis(lim);
現在,藉助以下幾行程式碼,我們可以找到第一個和第二個標籤的後驗機率:
yprob = model_GNB.predict_proba(Xnew) yprob[-10:].round(3)
輸出
array([[0.998, 0.002], [1. , 0. ], [0.987, 0.013], [1. , 0. ], [1. , 0. ], [1. , 0. ], [1. , 0. ], [1. , 0. ], [0. , 1. ], [0.986, 0.014]] )
優缺點
優點
以下是使用樸素貝葉斯分類器的一些優點:
樸素貝葉斯分類易於實現且速度快。
它比邏輯迴歸等判別模型收斂更快。
它需要較少的訓練資料。
它具有高度的可擴充套件性,或者它們隨預測變數和資料點的數量線性擴充套件。
它可以進行機率預測,並且可以處理連續資料和離散資料。
樸素貝葉斯分類演算法既可以用於二元分類問題,也可以用於多類分類問題。
缺點
以下是使用樸素貝葉斯分類器的一些缺點:
樸素貝葉斯分類最重要的缺點之一是其強烈的特徵獨立性假設,因為在現實生活中,幾乎不可能擁有一組完全相互獨立的特徵。
樸素貝葉斯分類的另一個問題是其“零頻率”問題,這意味著如果一個類別變數有一個類別但在訓練資料集中沒有觀察到,則樸素貝葉斯模型將為其分配零機率,並且將無法進行預測。
樸素貝葉斯分類的應用
以下是樸素貝葉斯分類的一些常見應用:
即時預測 - 由於其易於實現和快速計算,它可以用於進行即時預測。
多類預測 - 樸素貝葉斯分類演算法可以用來預測目標變數多個類的後驗機率。
文字分類 - 由於具有多類預測的功能,樸素貝葉斯分類演算法非常適合文字分類。這就是為什麼它也用於解決垃圾郵件過濾和情感分析等問題的原因。
推薦系統 - 與協同過濾等演算法一起,樸素貝葉斯構成了一個推薦系統,可用於過濾未見資訊,並預測使用者是否會喜歡給定的資源。