更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html
scikit-learn库之朴素贝叶斯
在scikit-learn库中朴素贝叶斯由于数据分布的不同,主要分为以下三种BernoulliNB
、GaussianNB
和MultinomialNB
,先验分布分别对应伯努利分布、高斯分布和多项式分布。
接下来将会讨论这三者的区别,由于MUltinomiallNB
用的比较多,因此会细讲该模型。由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.naive_bayes
一、MultinomialNB
1.1 使用场景
Bernoulli
分布一般应用于样本特征是二元离散值,或者是很稀疏的多元离散值的场景。
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):创建模型参数。
二、GaussianNB
GaussianNB
模型类似于MultinomiaNB
模型,两者区别之处在于,前者更适合解决特征值为连续值,而后者更适合解决特征值为多元离散值的情况。
三、Bernoulli
Bernoulli
模型类似于MultinomiaNB
模型,两者区别之处在于,前者更适合解决特征值为二元离散值或稀疏的多元离散值,而后者更适合解决特征值为多元离散值的情况,并且Bernoulli
模型多了一个参数binarize,该参数不设置则默认特征已经被二值化处理,反之模型将自动二值化处理特征。