机器学习之朴素贝叶斯算法

2019-08-14 15:43:36 浏览数 (1)

1.朴素贝叶斯简介

朴素贝叶斯(Naive Bayesian)算法能够根据数据加先验概率来估计后验概率,在垃圾邮件分类、文本分类、信用等级评定等多分类问题中得到广泛应用。对于多数的分类算法,比如决策树、KNN等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系。但朴素贝叶斯和多数分类算法都不同,朴素贝叶斯是生成算法,也就是先找出特征输出Y和特征X的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。

朴素贝叶斯算法的优点在于简单易懂、学习效率高,在某些领域的分类问题中能够与决策树相媲美。但朴素贝叶斯算法以自变量之间的独立性和连续变量的正态性假设为前提,会导致算法精度在一定程度上受到影响。

2.朴素贝叶斯算法模型

2.1统计知识回顾

深入算法原理之前,我们先来回顾下统计学的相关知识。

  • 条件概率公式
  • 条件概率公式
  • 全概率公式

经过上面统计学知识,我们能够得出贝叶斯公式。

2.2朴素贝叶斯模型
2.3朴素贝叶斯推断
2.4朴素贝叶斯参数估计

3.朴素贝叶斯算法流程

从上面计算可以看出,朴素贝叶斯没有复杂的求导和矩阵运算,因此效率很高。但朴素贝叶斯假设数据特征之间相互独立,如果数据特征之间关联性比较强的话,我们尽量不要使用朴素贝叶斯算法,考虑其他分类方法比较好。

4.Sklearn实现朴素贝叶斯

利用sklearn自带的iris数据集进行训练,选取70%的数据当作训练集,30%的数据当作测试集。因iris数据集为连续值,所以采用GaussianNB模型,训练后模型得分为0.933333。更多关于sklearn.naive_bayes的使用技巧可以访问官方教程。

代码语言:javascript复制
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

5.朴素贝叶斯优缺点

5.1优点
  • 具有稳定的分类效率。
  • 对缺失数据不敏感,算法也比较简单。
  • 对小规模数据表现良好,能处理多分类任务,适合增量式训练。尤其是数据量超出内存后,我们可以一批批的去增量训练。
5.2缺点
  • 对输入数据的表达形式比较敏感,需针对不同类型数据采用不同模型。
  • 由于我们是使用数据加先验概率预测后验概率,所以分类决策存在一定的错误率。
  • 假设各特征之间相互独立,但实际生活中往往不成立,因此对特征个数比较多或特征之间相关性比较大的数据,分类效果可能不是太好。

参考

刘建平_Pinard-朴素贝叶斯算法原理小结

你看到的这篇文章来自于公众号「谓之小一」,欢迎关注我阅读更多文章。

0 人点赞