【scikit-learn基础】--『监督学习』之 贝叶斯分类
貝葉斯分類是一種統計學分類方法,基于貝葉斯定理,對給定的數據集進行分類。
它的歷史可以追溯到18世紀,當時英國統計學家托馬斯·貝葉斯發展了貝葉斯定理,這個定理為統計決策提供了理論基礎。
不過,貝葉斯分類在實際應用中的廣泛使用是在20世紀80年代,當時計算機技術的進步使得大規模數據處理成為可能。
1. 算法概述
貝葉斯分類基于貝葉斯公式,通過已知樣本信息來計算未知樣本屬于各個類別的概率,然后選擇概率最大的類別作為未知樣本的分類結果。
貝葉斯公式的簡化公式:\(P(A|B) = \frac{P(B|A)P(A)}{P(B)}\)
其中:
- \(P(A)\):事件A發生的概率
- \(P(B)\):事件A發生的概率
- \(P(A|B)\):在事件B出現的前提下,A發生的概率
- \(P(B|A)\):在事件A出現的前提下,B發生的概率
貝葉斯分類就是基于這個公式擴展而來。
比如,一個具有\(n\)個特征的樣本\(x = (x_1, x_2, ..., x_n)\),該樣本屬于K個可能的類別\(y_1,y_2,...,y_k\)。
那么,任一個樣本\(x\)屬于某個類別\(y_k\)的概率為:\(P(y_k|x) = \frac{P(X|y_k)P(y_k)}{P(x)}\)
根據這個模型,訓練樣本之后,就可以根據模型來預測某個樣本屬于哪個類別的概率最大。
這里討論的貝葉斯分類算法,并沒有考慮特征之間的關聯關系,我們假設每個特征之間是相互獨立的。
所以,這個算法也叫做樸素貝葉斯分類。
2. 創建樣本數據
貝葉斯分類可以
這次用scikit-learn中的樣本生成器make_classification來生成分類用的樣本數據。
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
# 分類數據的樣本生成器
X, y= make_classification(n_samples=1000, n_classes=4, n_informative=3)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)
plt.show()
關于樣本生成器的詳細內容,請參考:TODO
3. 模型訓練
訓練之前,為了減少算法誤差,先對數據進行標準化處理(將數據縮放到0~100之間)。
from sklearn import preprocessing as pp
# 數據標準化
X = pp.minmax_scale(X, feature_range=(1, 100))
y = pp.minmax_scale(y, feature_range=(1, 100))
然后,分割訓練集和測試集。
from sklearn.model_selection import train_test_split
# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
按照8:2的比例來劃分訓練集和測試集。
scikit-learn中的樸素貝葉斯算法支持多種不同的分類器,
這些分類器基于不同的先驗概率分布,適用于不同的數據類型和問題場景。
我們訓練模型的時候要根據數據情況選擇合適的分類器。
from sklearn.naive_bayes import (
GaussianNB,
MultinomialNB,
ComplementNB,
BernoulliNB,
CategoricalNB,
)
reg_names = [
"高斯樸素貝葉斯",
"多項式樸素貝葉斯",
"補碼樸素貝葉斯",
"伯努利樸素貝葉斯",
"分類樸素貝葉斯",
]
# 定義
regs = [
GaussianNB(),
MultinomialNB(),
ComplementNB(),
BernoulliNB(),
CategoricalNB(min_categories=101),
]
# 訓練模型
for reg in regs:
reg.fit(X_train, y_train)
各個分類器的簡要說明:
- GaussianNB:基于高斯分布的樸素貝葉斯分類器。它假設每個特征服從高斯分布,即正態分布。這種分類器適用于連續型數據,特別是對于數值型特征。
- MultinomialNB:基于多項式分布的樸素貝葉斯分類器。它假設每個特征服從多項式分布,適用于離散型數據,特別是對于類別型特征。
- ComplementNB:基于互補分布的樸素貝葉斯分類器。它適用于離散型數據,特別是對于二元分類問題。
- BernoulliNB:基于伯努利分布的樸素貝葉斯分類器。它適用于二元分類問題,特別是對于二元特征或者二元輸出。
- CategoricalNB:基于分類分布的樸素貝葉斯分類器。它適用于離散型數據,特別是對于類別型特征。
最后驗證各個分類器的模型的訓練效果:
# 在測試集上進行預測
y_preds = []
for reg in regs:
y_pred = reg.predict(X_test)
y_preds.append(y_pred)
for i in range(len(y_preds)):
correct_pred = np.sum(y_preds[i] == y_test)
print("【{}】 預測正確率:{:.2f}%".format(reg_names[i],
correct_pred / len(y_pred) * 100))
# 運行結果
【高斯樸素貝葉斯】 預測正確率:82.50%
【多項式樸素貝葉斯】 預測正確率:75.00%
【補碼樸素貝葉斯】 預測正確率:72.50%
【伯努利樸素貝葉斯】 預測正確率:22.00%
【分類樸素貝葉斯】 預測正確率:50.50%
這里雖然高斯樸素貝葉斯分類器的正確率最高,但不能就認為這種分類器是最好的。
只能說明高斯樸素貝葉斯分類器最適合分類上面隨機生成的樣本數據。
換成其他的樣本數據,高斯樸素貝葉斯分類器的正確率就不一定是最高的了。
4. 總結
總的來說,貝葉斯分類是一種有效的分類方法,適用于對未知樣本進行分類的問題。
它的應用范圍廣泛,可以處理多分類問題,也可以用于連續變量的分類。
貝葉斯分類算法的主要優勢在于:
- 是一種概率模型,可以給出分類結果的概率,因此更加可靠和穩定。
- 可以處理多分類問題,也可以用于連續變量的分類。
- 實現相對簡單,可以在較短的時間內訓練出模型并進行預測。
貝葉斯分類算法也有其不足之處:
- 假設所有特征之間相互獨立,但在實際應用中這個假設往往不成立,因此會影響分類結果的準確性。
- 對于大規模的數據集,訓練時間和預測時間可能會較長。
- 對于數據的缺失和異常值處理不夠魯棒,可能會對分類結果產生影響。
總結
以上是生活随笔為你收集整理的【scikit-learn基础】--『监督学习』之 贝叶斯分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #11独立开发周总结|核心OKR1000
- 下一篇: Baidu Comate实践指南,惊艳了