更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython
scikit-learn庫之樸素貝葉斯
在scikit-learn庫中樸素貝葉斯因爲數據分佈的不一樣,主要分爲如下三種BernoulliNB
、GaussianNB
和MultinomialNB
,先驗分佈分別對應伯努利分佈、高斯分佈和多項式分佈。算法
接下來將會討論這三者的區別,因爲MUltinomiallNB
用的比較多,所以會細講該模型。因爲是從官方文檔翻譯而來,翻譯會略有偏頗,有興趣的也能夠去scikit-learn官方文檔查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.naive_bayes數據結構
1、MultinomialNB
1.1 使用場景
Bernoulli
分佈通常應用於樣本特徵是二元離散值,或者是很稀疏的多元離散值的場景。dom
1.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]))
[3]
1.3 參數詳解
- alpha:超參數,float類型。建議使用默認值,若是真的須要調優時也儘可能選擇稍大於或稍小於1的數。默認爲1。
- fit_prior:先驗機率選擇,bool類型。fit_prior=True,全部樣本類別輸出的先驗機率是不一樣的;fit_prior=False,全部樣本類別輸出的先驗機率是相同的。默認爲True。
- class_prior:先驗機率,array-like類型。只有fit_prior=True時才選擇該參數,該參數能夠本身填寫各個類別的先驗機率,也能夠不填寫讓模型自動計算各個類別的先驗機率。默認爲None。
1.4 屬性
- class_log_prior_:每一個類別對應的對數機率。
- intercept_:將多項式樸素貝葉斯模型做爲線性模型時的class_log_prior_鏡像的截距。
- feature_log_prob_:給定樣本某個特徵的的機率,如\(p(x_i|y)\)。
- coef_:將多項式樸素貝葉斯模型做爲線性模型時的feature_log_prob_鏡像的係數。
- class_count_:每一個類在擬合過程當中遇到的樣本數量,這個值由fit()中的sample_weigth加權獲得。
- feature_count_:每一個特徵在擬合過程當中遇到的樣本數量,這個值由fit()中的sample_weigth加權獲得。
1.5 方法
- fit(X,y):把數據放入模型中訓練模型。
- get_params([deep]):返回模型的參數,能夠用於Pipeline中。
- partial_fit(X, y[, classes, sample_weight]):把數據集切割成多份進行增量訓練,尤爲適合大數據集,其中sample_weight能夠控制訓練集中樣本的權重。
- predict(X):預測樣本X的分類類別。
- predict_lot_proba(X):返回樣本X在各個類別上對應的對數機率。
- predict_proba(X):返回樣本X在各個類別上對應的機率。
- score(X,y[,sample_weight]):基於報告決定係數\(R^2\)評估模型。
- set_prams(**params):建立模型參數。
2、GaussianNB
GaussianNB
模型相似於MultinomiaNB
模型,二者區別之處在於,前者更適合解決特徵值爲連續值,然後者更適合解決特徵值爲多元離散值的狀況。機器學習
3、Bernoulli
Bernoulli
模型相似於MultinomiaNB
模型,二者區別之處在於,前者更適合解決特徵值爲二元離散值或稀疏的多元離散值,然後者更適合解決特徵值爲多元離散值的狀況,而且Bernoulli
模型多了一個參數binarize,該參數不設置則默認特徵已經被二值化處理,反之模型將自動二值化處理特徵。學習