更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

scikit-learn库之朴素贝叶斯

在scikit-learn库中朴素贝叶斯由于数据分布的不同,主要分为以下三种BernoulliNBGaussianNBMultinomialNB,先验分布分别对应伯努利分布、高斯分布和多项式分布。

接下来将会讨论这三者的区别,由于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,该参数不设置则默认特征已经被二值化处理,反之模型将自动二值化处理特征。

05-20 07:17