朴素贝叶斯常见问题总结

朴素贝叶斯法是基于贝叶斯定理和特征条件独立假设的分类方法,属于生成模型,即通过训练数据学习联合概率分布P(X,Y),联合分布由条件概率分布P(X|y=ck)和先验概率P(y=ck)估计得来。
思想:后验概率最大化,将数据分到后验概率最大的那一类中。
损失函数:0-1损失
参数估计方法:极大似然估计、贝叶斯估计
原理:这里的期望风险最小化等价于后验概率最大化。

常见的问题总结:

1、需要会后验概率最大化的公式的推导
2、为什么朴素?
答:因为在学习联合分布时,需要用到条件概率分布P(X|Y),在估计此条件概率分布时,需要很强的一个条件独立假设,即特征之间彼此独立,没有相关性。这使得待估参数减少,计算简单,因而朴素。
3、说一下参数的估计问题
首先,常用极大似然估计来估先验和条件概率,即P(y=ck)为总数中第k类所占的比例,P(X|y=ck)写成条件概率公式的形式,即为第k类且满足x去值的个数/第k类的数量。

另外,这种情况下可能导致估计条件概率P(X|Y)时出现概率为0,劲儿导致联合概率的乘积为0,针对此问题可采用贝叶斯估计,即在随机变量的各个取值的频数上加一个正数λ,当λ=1时称为拉普拉斯平滑。

4、朴素贝叶斯模型的优缺点
优点:
1、有稳定的分类效率;
2、由特征条件独立假设决定了待估的参数少,因而比较高效,易于实现;
3、对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练;
4、对缺失数据分析不太敏感,常用于文本分类,如:垃圾邮件识别、情感分类、拼写纠正等。

缺点:
1、朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
2、需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
3、对输入数据对e表达形式比较敏感。

Python实现

第一种方式:借助sklearn

from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
iris = datasets.load_iris()
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.2,random_state=1)
clf = GaussianNB()
clf = clf.fit(x_train, y_train)
y_pred=clf.predict(x_test)
print(classification_report(y_test, y_pred))  #输出准确率、召回率、F1值
print(confusion_matrix(y_test, y_pred))   #输出混淆矩阵

第二种方式:手写朴素贝叶斯
(待更新)

你可能感兴趣的:(机器学习,朴素贝叶斯,机器学习)