朴素贝叶斯(Naive Bayesian)算法能够根据数据加先验概率来估计后验概率,在垃圾邮件分类、文本分类、信用等级评定等多分类问题中得到广泛应用。对于多数的分类算法,比如决策树、KNN等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系。但朴素贝叶斯和多数分类算法都不同,朴素贝叶斯是生成算法,也就是先找出特征输出Y和特征X的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。
朴素贝叶斯算法的优点在于简单易懂、学习效率高,在某些领域的分类问题中能够与决策树相媲美。但朴素贝叶斯算法以自变量之间的独立性和连续变量的正态性假设为前提,会导致算法精度在一定程度上受到影响。
深入算法原理之前,我们先来回顾下统计学的相关知识。
经过上面统计学知识,我们能够得出贝叶斯公式。
从上面计算可以看出,朴素贝叶斯没有复杂的求导和矩阵运算,因此效率很高。但朴素贝叶斯假设数据特征之间相互独立,如果数据特征之间关联性比较强的话,我们尽量不要使用朴素贝叶斯算法,考虑其他分类方法比较好。
利用sklearn自带的iris数据集进行训练,选取70%的数据当作训练集,30%的数据当作测试集。因iris数据集为连续值,所以采用GaussianNB模型,训练后模型得分为0.933333。更多关于sklearn.naive_bayes的使用技巧可以访问官方教程。
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
#load data
iris=load_iris()
X=iris.data
y=iris.target
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=1)
mnb=GaussianNB()
mnb.fit(X_train,y_train)
print(mnb.predict(X_test))
# [0 1 1 0 2 2 2 0 0 2 1 0 2 1 1 0 1 1 0 0 1 1 2 0 2 1 0 0 1 2 1 2 1 2 2 0 1
# 0 1 2 2 0 1 2 1]
print(y_test)
# [0 1 1 0 2 1 2 0 0 2 1 0 2 1 1 0 1 1 0 0 1 1 1 0 2 1 0 0 1 2 1 2 1 2 2 0 1
# 0 1 2 2 0 2 2 1]
print(mnb.score(X_test,y_test))
# 0.933333333333
参考
刘建平_Pinard-朴素贝叶斯算法原理小结
你看到的这篇文章来自于公众号「谓之小一」,欢迎关注我阅读更多文章。