1、朴素贝叶斯概述:
朴素贝叶斯分类器是一种基于贝叶斯定理的弱分类器,所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关。举个例子,如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。所谓 "朴素" 就是假设不同的特征是相互独立的。
2、朴素贝叶斯优缺点:
优点:
简单且快速,预测表现良好;
当独立性假设成立时,朴素贝叶斯分类器与逻辑回归等其他模型相比表现更好,而且需要更少的训练数据;
相较于数值变量,朴素贝叶斯分类器在多个分类变量的情况下表现更好。若是数值变量,需要满足正态分布。
缺点:
如果分类变量在训练集上没有却在测试集上出现了,那这个模型将无法进行预测此类别并分配一个零概率给它。我们使用平滑技术来解决这个问题。
朴素贝叶斯也被称为bad estimator,所以不该过度在乎其概率输出predict_proba。
朴素贝叶斯的另一个限制是变量之间相互独立的假设。在现实生活中,这几乎是不可能的,各变量间或多或少都会存在相互影响。
3、朴素贝叶斯的应用场景
实时预测:朴素贝叶斯是一个快速的学习分类器,因此适用于实时预测。
多类预测:朴素贝叶斯以多类别预测功能闻名,因此可以用来预测多类目标变量的概率。
文本分类/垃圾邮件过滤/情感分析:主要用于文本分类的朴素贝叶斯分类器比其他算法具有更高的成功率。 因此,它被广泛用于垃圾邮件过滤和情感分析。
推荐系统:结合朴素贝叶斯分类器和协作过滤构建推荐系统,该系统使用机器学习和数据挖掘技术过滤看不见的信息并预测用户是否喜欢系统做出的推荐。
4、 朴素贝叶斯三种基本模型
scikit-learn
里有3种朴素贝叶斯的模型:
1. 高斯(Gaussian
):适用于特征属于连续型变量,假设特征遵循正态分布。
2. 多项式(Multinomial
):该模型常用于文本分类,特征是单词,值是单词的出现次数。
3. 伯努利(Bernoulli
):每个特征的取值是布尔型的,即true
和false
,或者1
和0
。在文本分类中,1
就是一个特征出现在一个文档中,0
就是一个特征没有出现在一个文档中。
5、3种模型的案例
第一种:高斯模型
#导入高斯模型
from sklearn.naive_bayes import GaussianNB
import numpy as np
#定义预测变量与目标变量
x= np.array([[-3,6],[2,5], [1,2], [-2,1], [2,3], [-4,0], [-1,1], [1,1], [-2,2], [2,7], [-4,1], [-2,7]])
Y = np.array([3, 3, 3, 3, 4, 3, 3, 4, 3, 4, 4, 4])
#创建高斯分类器
model = GaussianNB()
#使用刚才定义的训练集训练模型
model.fit(x, Y)
# 预测并输出
predicted= model.predict([[-2,-2],[-2,7]])
print (predicted)
#Output: ([3,4])
第二种:多项式模型
import numpy as np
#定义预测变量与目标变量
X = np.random.randint(5, size=(6,100))
y = np.array([1, 2, 3, 4, 5, 6])
print(X)
#创建多项式分类器
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(X, y)
#预测并输出
predicted = clf.predict(X[0:1])
print (predicted)
#output [1]
第三种:伯努利模型
#定义预测变量与目标变量
X = np.random.randint(9, size=(6, 20))
Y = np.array([4, 5, 6, 7, 8, 9])
#创建多伯努利分类器
from sklearn.naive_bayes import BernoulliNB
clf = BernoulliNB()
clf.fit(X, Y)
#预测并输出
print(clf.predict(X[2:]))
#output [6 7 8 9]
6、改进朴素贝叶斯性能的技巧
如果连续特征不是正态分布的,我们应该使用各种不同的方法将其转换正态分布。
如果测试数据集具有零频率的问题,应用平滑技术拉普拉斯估计修正数据集。
删除重复出现的高度相关的特征,可能会丢失频率信息,影响效果。
朴素贝叶斯分类在参数调整上选择有限,建议把重点放在数据的预处理和特征选择。