其他
基于贝叶斯定理的算法——朴素贝叶斯分类
本文作者:王 歌
文字编辑:孙晓玲
导读
通过前面的介绍我们知道,KNN和决策树这两种算法虽然简单易懂,这两种算法在数据量较大时复杂度很高,一般只用在数据量较小的情况下,这样数据可以放入内存中运行。不过今天我们介绍的朴素贝叶斯分类器通过独立假设简化了概率的计算,节省了内存,可以很好地用于数据量大的情况。下面我们首先来了解这一算法的数理背景——贝叶斯定理。
算 法 原 理
这就是朴素贝叶斯的推导式,对于不同的先验条件可以计算得到不同的模型,然后就可以利用得到的模型进行预测。
算 法 实 例
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score #用来计算分类准确率
iris_sample = load_iris()
x_train, x_test, y_train, y_test = train_test_split(iris_sample.data, iris_sample.target, test_size=0.25, random_state=123)
nbclf = GaussianNB()
nbclf.fit(x_train, y_train)
y_test_pre = nbclf.predict(x_test)
score = accuracy_score(y_test, y_test_pre) #accuracy_score(y_true, y_predict, normalize=True, sample_weight=None),normalize为True时计算正确分类比例,否则计算的是样本数
print('测试集预测结果为:', y_test_pre)
print('测试集正确结果为:', y_test)
print('测试集准确度为:', score)
分类结果及准确率如图:
这个类中有三个参数,参数alpha即为上式中的α,默认取1,此时也称为拉普拉斯平滑;fit_prior表示是否要考虑先验概率,默认为True,当选择False时所有的样本类别输出都有相同的类别先验概率;class_prior用来输入先验概率,默认为None。该类所具有的预测方法与GaussianNB相同。
(3)BernoulliNB
BernoulliNB假设特征的先验概率为伯努利二项分布,它一共有4个参数,其中3个参数和MultinomialNB完全相同,剩下的那个参数binarize,当不传入取值时则将每个特征都看作二元,当传入数值时将小于binarize的归为一类,大于binarize归为另一类。此类的预测方法也与前两种一致。
如果样本特征大部分是连续值,一般会使用GaussianNB;如果样本特征大部分是多元离散值,则会使用MultinomialNB;而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。
以上就是我们对朴素贝叶斯分类器的介绍。
NBA球员薪资分析——基于随机森林算法(二)
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。