更新、更全的《机器学习》的更新网站,更有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,该参数不设置则默认特征已经被二值化处理,反之模型将自动二值化处理特征。学习