scikit-learn朴素贝叶斯类库使用小结

朴素贝叶斯是一类比较简单的算法,scikit-learn中朴素贝叶斯类库的使用也比较简单。相对于决策树,KNN之类的算法,朴素贝叶斯需要关注的参数是比较少的,这样也比较容易掌握。在scikit-learn中,一共有4个朴素贝叶斯的分类算法类。我们关注的是GaussianNB,MultinomialNB和BernoulliNB。三者之间的不同在于他们对P(X|Y)的概率估计不一样。其中GaussianNB就是先验为高斯分布的朴素贝叶斯,MultinomialNB就是先验为多项式分布的朴素贝叶斯,而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。

三个类适用的分类场景各不相同,一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。

GaussianNB类的主要参数仅有一个,即先验概率priors ,对应Y的各个类别的先验概率P(Y=Ck)P(Y=Ck)。这个值默认不给出,如果不给出此时P(Y=Ck)=mk/mP(Y=Ck)=mk/m。其中m为训练集样本总数量,mkmk

为输出为第k类别的训练集样本数。如果给出的话就以priors 为准。在使用GaussianNB的fit方法拟合数据后,我们可以进行预测。此时预测有三种方法,包括predict,predict_log_proba和predict_proba。predict方法就是我们最常用的预测方法,直接给出测试集的预测类别输出;predict_proba则不同,它会给出测试集样本在各个类别上预测的概率。容易理解,predict_proba预测出的各个类别概率里的最大值对应的类别,也就是predict方法得到类别。predict_log_proba和predict_proba类似,它会给出测试集样本在各个类别上预测的概率的一个对数转化。转化后predict_log_proba预测出的各个类别对数概率里的最大值对应的类别,也就是predict方法得到类别

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import (brier_score_loss, precision_score, recall_score,
                             f1_score)
from sklearn.calibration import CalibratedClassifierCV, calibration_curve
from sklearn.model_selection import train_test_split
# Create dataset of classification task with many redundant and few
# informative features
X, y = datasets.make_classification(n_samples=100000, n_features=20,
                                    n_informative=2, n_redundant=10,
                                    random_state=42)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.99,
                                                    random_state=42)
clf = GaussianNB()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
y_pred_proba = clf.predict_proba(X_test)   
clf.score(X_test,y_test)

MultinomialNB参数比GaussianNB多,但是一共也只有仅仅3个。其中,参数alpha即为上面的常数λλ,如果你没有特别的需要,用默认的1即可。如果发现拟合的不好,需要调优时,可以选择稍大于1或者稍小于1的数。布尔参数fit_prior表示是否要考虑先验概率,如果是false,则所有的样本类别输出都有相同的类别先验概率。否则可以自己用第三个参数class_prior输入先验概率,或者不输入第三个参数class_prior让MultinomialNB自己从训练集样本来计算先验概率,此时的先验概率为P(Y=Ck)=mk/mP(Y=Ck)=mk/m。其中m为训练集样本总数量,mkmk

为输出为第k类别的训练集样本数。

BernoulliNB一共有4个参数,其中3个参数的名字和意义和MultinomialNB完全相同。唯一增加的一个参数是binarize。这个参数主要是用来帮BernoulliNB处理二项分布的,可以是数值或者不输入。如果不输入,则BernoulliNB认为每个数据特征都已经是二元的。否则的话,小于binarize的会归为一类,大于binarize的会归为另外一类。

    在使用BernoulliNB的fit或者partial_fit方法拟合数据后,我们可以进行预测。此时预测有三种方法,包括predict,predict_log_proba和predict_proba。由于方法和GaussianNB完全一样,这里就不累述了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scikit-learn库提供了多种贝叶斯分类器的实现,括高斯朴素贝叶斯、多项式朴素贝叶斯和伯努利朴素贝叶斯。这里以高斯朴素贝叶斯分类器为例,介绍如何使用Scikit-learn库实现贝叶斯分类。 1. 数据准备 首先,我们需要准备一些分类数据。这里使用Scikit-learn库自带的鸢尾花数据集。代码如下: ```python from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target ``` 2. 数据预处理使用贝叶斯分类器之前,需要对数据进行预处理。这里我们使用Scikit-learn库的数据预处理工具preprocessing中的StandardScaler类进行标准化处理。代码如下: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X = scaler.fit_transform(X) ``` 3. 构建模型 接下来,我们可以使用Scikit-learn库的GaussianNB类构建高斯朴素贝叶斯分类器。代码如下: ```python from sklearn.naive_bayes import GaussianNB gnb = GaussianNB() ``` 4. 模型训练 模型构建完成后,我们需要使用训练数据对模型进行训练。代码如下: ```python gnb.fit(X, y) ``` 5. 模型预测 训练完成后,我们可以使用模型对新的数据进行分类预测。代码如下: ```python y_pred = gnb.predict(X) ``` 6. 模型评估 最后,我们可以使用Scikit-learn库的metrics中的accuracy_score函数计算模型的准确率。代码如下: ```python from sklearn.metrics import accuracy_score accuracy = accuracy_score(y, y_pred) print('Accuracy:', accuracy) ``` 完整代码如下: ```python from sklearn.datasets import load_iris from sklearn.preprocessing import StandardScaler from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score # 数据准备 iris = load_iris() X = iris.data y = iris.target # 数据预处理 scaler = StandardScaler() X = scaler.fit_transform(X) # 构建模型 gnb = GaussianNB() # 模型训练 gnb.fit(X, y) # 模型预测 y_pred = gnb.predict(X) # 模型评估 accuracy = accuracy_score(y, y_pred) print('Accuracy:', accuracy) ``` 注意,这里为了简化代码,使用训练数据进行了模型评估。在实际应用中,应该使用测试数据进行模型评估,以避免过拟合问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值