当前位置:   article > 正文

scikit-learn 笔记之贝叶斯_scikit categorty bayes

scikit categorty bayes


  在scikit中有多种不同的朴素贝叶斯分类器,它们的区别在于假设了不同的 P ( X ( j ) ∣ y = c k ) P(X^{(j)}|y=c_{k}) P(X(j)y=ck)分布,下面介绍三种常用的朴素贝叶斯分类器。

1 高斯贝叶斯分类器(GaussianNB)

  GaussianNB是高斯贝叶斯分类器,它假设特征条件概率分布满足高斯分布:
P ( X ( j ) ∣ y = c k ) = 1 2 π σ k 2 e x p ( − ( x ( j ) − μ k ) 2 2 σ k 2 ) P(X^{(j)}|y=c_{k})=\frac{1}{\sqrt{2\pi \sigma _{k}^{2}}}exp(-\frac{(x^{(j)}-\mu _{k})^{2}}{2\sigma _{k}^{2}}) P(X(j)y=ck)=2πσk2 1exp(2σk2(x(j)μk)2)
其原型为:

class sklearn.naive_bayes.GaussianNB(*, 
priors=None, var_smoothing=1e-09)
  • 1
  • 2

参数
实际应用一般不会进行调参
priors:表示类的先验概率,如果指定,则不根据数据调整先验;如果不指定,则自行根据数据计算先验概率 P ( y = c k ) P(y=c_{k}) P(y=ck)
var_smoothing:浮点型,默认 1 e − 9 1e^{-9} 1e9,在估计方差时,为了追求估计的稳定性,将所有特征的方差中最大的方差以 v a r _ s m o o t h i n g var\_smoothing var_smoothing比例添加到估计的方差中。
属性
class_count_:一个数组,形状为(n_classes,),是每个类别包含的训练样本数量。
class_prior_:一个数组,形状为(n_classes,),是每个类别的概率 P ( y = c k ) P(y=c_{k}) P(y=ck)
classes_:一个数组,形状为(n_classes,),分类器知道的类别。
epsilon_:浮点型,方差的绝对加值。
sigma_:一个数组,形状为(n_classes,n_features),是每个类别上每个特征的方差。
theta_:一个数组,形状为(n_classes,n_features),是每个类别上每个特征的均值。
方法
fit(X, y[, sample_weight]):训练模型。
get_params([deep]):获取模型参数。
partial_fit(X, y[, classes, sample_weight]):追加训练模型。该方法主要用于大规模数据集训练,将大规模数据集分成若干小数据集,使用partial_fit方法追加训练模型。
predict(X):模型预测,返回预测值。
predict_log_proba(X):返回一个数组,数组的元素是 x x x预测为各类被的概率的对数值。
predict_proba(X):返回一个数组,数组的元素是 x x x预测为各类被的概率。
score(X, y[, sample_weight]):返回预测的准确率。
set_params(**params):设置参数。

示例

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

# 读取数据集
dataset = load_digits()
data, target = dataset.data, dataset.target
# 拆分数据集
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.3, random_state=0)

# 使用高斯贝叶斯进行分类
gsnbclf = GaussianNB()
gsnbclf.fit(x_train, y_train)
y_predict = gsnbclf.predict(x_test)

print("预测的文本类别为:", y_predict)
print("分类分数为:", gsnbclf.score(x_test, y_test))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2 伯努力贝叶斯分类器(BernoulliNB)

  BernoulliNB是伯努力贝叶斯分类器,它假设特征的条件概率分布满足二项分布:
P ( X ( j ) ∣ y = c k ) = p X ( j ) + ( 1 − p ) ( 1 − X ( j ) ) P(X^{(j)}|y=c_{k})= pX^{(j)}+(1-p)(1-X^{(j)}) P(X(j)y=ck)=pX(j)+(1p)(1X(j))
其中,要求特征的取值为 X ( j ) ϵ { 0 , 1 } X^{(j)}\epsilon \left \{ 0,1 \right \} X(j)ϵ{0,1},且 P ( X ( j ) ∣ y = c k ) = p P(X^{(j)}|y=c_{k})= p P(X(j)y=ck)=p
  其原型为:

class sklearn.naive_bayes.BernoulliNB(*, alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
  • 1

参数
alpha:一个浮点数,默认为1.0。也就是指朴素贝叶斯所说的贝叶斯估计中 λ \lambda λ的值, λ = 1 \lambda=1 λ=1时为拉普拉斯平滑。
binarize:一个浮点数或者None,默认为0.0。

  • 如果为None,那么会假定原始数据已经二元化了。
  • 如果时浮点数,那么会以该数值为界,特征取值大于它的作为1,特征取值小于它的作为0,来进行二元化。

fit_prior:布尔值,默认为True.如果为True,则不去学习 P ( y = c k ) P(y=c_{k}) P(y=ck),替代以均匀分布;如果为False,则去学习 P ( y = c k ) P(y=c_{k}) P(y=ck)
class_prior:一个数组。它指定了每个类别的先验概率 P ( y = c 1 ) , P ( y = c 2 ) , ⋯   , P ( y = c k ) P(y=c_{1}),P(y=c_{2}),\cdots,P(y=c_{k}) P(y=c1),P(y=c2),,P(y=ck),不再从数据集中学得。

属性
class_count_:一个数组,形状为(n_classes),每个类别包含得训练样本数量。
class_log_prior_:一个数组,形状为(n_classes),每个类别调整后得经验概率分布对数值。
classes_:一个数组,形状为(n_classes,)分类已知道得类别。
feature_count_:一个数组,形状为(n_classes, n_features),训练过程中,每个类别每个特征遇到得样本数。
feature_log_prob_:一个数组,形状为(n_classes, n_features),给出了 P ( X ( j ) ∣ y = c k ) P(X^{(j)}|y=c_{k}) P(X(j)y=ck)得经验概率分布对数值。
n_features_:一个整数,每个样本中特征得数量。

方法
fit(X, y[, sample_weight]):训练模型。
get_params([deep]):获取模型参数。
partial_fit(X, y[, classes, sample_weight]):追加训练模型。该方法主要用于大规模数据集训练,将大规模数据集分成若干小数据集,使用partial_fit方法追加训练模型。
predict(X):模型预测,返回预测值。
predict_log_proba(X):返回一个数组,数组的元素是 x x x预测为各类被的概率的对数值。
predict_proba(X):返回一个数组,数组的元素是 x x x预测为各类被的概率。
score(X, y[, sample_weight]):返回预测的准确率。
set_params(**params):设置参数。

示例

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNB


# 读取数据集
dataset = load_digits()
data, target = dataset.data, dataset.target
# 拆分数据集
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.3, random_state=0)


# 使用伯努力贝叶斯进行分类
bnbclf = BernoulliNB()
bnbclf.fit(x_train, y_train)
y_predict = bnbclf.predict(x_test)

print("预测的文本类别为:", y_predict)
print("分类分数为:", bnbclf.score(x_test, y_test))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3 多项式贝叶斯分类器(MultinomialNB)

MultinomialNB是多项式贝叶斯分类器,它假设特征条件概率分布满足多项式分布:
P ( X ( j ) = α s j ∣ y = c k ) = N k j + α N k j + α n P(X^{(j)}=\alpha _{s_{j}}|y=c_{k})= \frac{N_{kj}+\alpha }{N_{kj}+\alpha n} P(X(j)=αsjy=ck)=Nkj+αnNkj+α
其中 α s j \alpha _{s_{j}} αsj表示特征 X ( j ) X^{(j)} X(j)得取值,其取值个数为 s j s_{j} sj个, N k j = ∑ i = 1 n I ( y i = c k ) N_{kj}=\sum_{i=1}^{n}I(y_{i}=c_{k}) Nkj=i=1nI(yi=ck),表示属于类别 c k c_{k} ck的样本数量, N k j = ∑ i = 1 n I ( y i = c k , X ( j ) = a s j ) N_{kj}=\sum_{i=1}^{n}I(y_{i}=c_{k},X^{(j)}=a_{s_{j}}) Nkj=i=1nI(yi=ck,X(j)=asj),表示属于类别 c k c_{k} ck且特征 X ( j ) = a s j X^{(j)}=a_{s_{j}} X(j)=asj的样本数量, α \alpha α就是贝叶斯估计中 λ \lambda λ
  其原型为:

class sklearn.naive_bayes.MultinomialNB(*, alpha=1.0, fit_prior=True, class_prior=None)
  • 1

参数
alpha:一个浮点数,默认为1.0。也就是指朴素贝叶斯所说的贝叶斯估计中 λ \lambda λ的值, λ = 1 \lambda=1 λ=1时为拉普拉斯平滑。
fit_prior:布尔值,默认为True.如果为True,则不去学习 P ( y = c k ) P(y=c_{k}) P(y=ck),替代以均匀分布;如果为False,则去学习 P ( y = c k ) P(y=c_{k}) P(y=ck)
class_prior:一个数组。它指定了每个类别的先验概率 P ( y = c 1 ) , P ( y = c 2 ) , ⋯   , P ( y = c k ) P(y=c_{1}),P(y=c_{2}),\cdots,P(y=c_{k}) P(y=c1),P(y=c2),,P(y=ck),不再从数据集中学得。

属性
class_count_:一个数组,形状为(n_classes),每个类别包含得训练样本数量。
class_log_prior_:一个数组,形状为(n_classes),每个类别调整后得经验概率分布对数值。
classes_:一个数组,形状为(n_classes,)分类已知道得类别。
coef_:一个数组,(n_classes, n_features),当类别大于2时与feature_log_prob_相同。
feature_count_:一个数组,形状为(n_classes, n_features),训练过程中,每个类别每个特征遇到得样本数。
feature_log_prob_:一个数组,形状为(n_classes, n_features),给出了 P ( X ( j ) ∣ y = c k ) P(X^{(j)}|y=c_{k}) P(X(j)y=ck)得经验概率分布对数值。
intercept_:一个数组,(n_classes, n_features),当类别大于2时与class_log_prior_相同。
n_features_:一个整数,每个样本中特征得数量。

方法
fit(X, y[, sample_weight]):训练模型。
get_params([deep]):获取模型参数。
partial_fit(X, y[, classes, sample_weight]):追加训练模型。该方法主要用于大规模数据集训练,将大规模数据集分成若干小数据集,使用partial_fit方法追加训练模型。
predict(X):模型预测,返回预测值。
predict_log_proba(X):返回一个数组,数组的元素是 x x x预测为各类被的概率的对数值。
predict_proba(X):返回一个数组,数组的元素是 x x x预测为各类被的概率。
score(X, y[, sample_weight]):返回预测的准确率。
set_params(**params):设置参数。

示例

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB


# 读取数据集
dataset = load_digits()
data, target = dataset.data, dataset.target
# 拆分数据集
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.3, random_state=0)


# 使用多项式贝叶斯进行分类
mnbclf = MultinomialNB()
mnbclf.fit(x_train, y_train)
y_predict = mnbclf.predict(x_test)

print("预测的文本类别为:", y_predict)
print("分类分数为:", mnbclf.score(x_test, y_test))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

总结

  对于朴素贝叶斯相关的分类算法而言,一般无需花费时间在参数的调节上。

python代码

git地址:https://github.com/lingxiaaisuixin/MarchineLearning/tree/master/Bayes
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/869257
推荐阅读
相关标签
  

闽ICP备14008679号