1. 相关概念
判别模型: 在机器学习领域判别模型是一种对未知数据 y 与已知数据 x 之间关系进行建模的方法。判别模型是一种基于概率理论的方法。已知输入变量 x ,判别模型通过构建条件概率分布 P(y|x) 预测 y 。常见的基于判别模型算法有逻辑回归、线性回归、支持向量机、提升方法、条件随机场、人工神经网络、随机森林、感知器
举例:要确定一个瓜是好瓜还是坏瓜,用判别模型的方法是从历史数据中学习到模型,然后通过提取这个瓜的特征来预测出这只瓜是好瓜的概率,是坏瓜的概率。
生成模型是所有变量的全概率模型,而判别模型是在给定观测变量值前提下目标变量条件概率模型。因此生成模型能够用于模拟(即生成)模型中任意变量的分布情况,而判别模型只能根据观测变量得到目标变量的采样。判别模型不对观测变量的分布建模,因此它不能够表达观测变量与目标变量之间更复杂的关系。因此,生成模型更适用于无监督的任务,如分类和聚类。
举例:利用生成模型是根据好瓜的特征首先学习出一个好瓜的模型,然后根据坏瓜的特征学习得到一个坏瓜的模型,然后从需要预测的瓜中提取特征,放到生成好的好瓜的模型中看概率是多少,在放到生产的坏瓜模型中看概率是多少,哪个概率大就预测其为哪个。
2. 先验概率、条件概率
条件概率:在事件A发生时事件B发生的概率,表示为P(B|A)。
例如:就是在条件为瓜的颜色是青绿的情况下,瓜是好瓜的概率
先验概率:在贝叶斯统计中,某不确定量p的先验概率是在考虑观测数据前,能表达p的不确定性的概率分布,旨在描述p的不确定性,而不是p的随机性。p可以是一个参数,也可以是一个隐含变量。
例如:根据经验,常识所透露出来的因的概率,即瓜的颜色是青绿色的概率。
后验概率:在贝叶斯统计中,一个随机事件的后验概率是在考虑给出的相关数据之后得到的概率分布。同样的,后验概率分布是一个基于观察数据后得到的一个概率分布。后验指的是考虑被测试过相关数据。
例如:后验概率,就是在知道“果”之后,去推测“因”的概率,也就是说,如果已经知道瓜是好瓜,那么瓜的颜色是青绿的概率是多少。后验和先验的关系就需要运用贝叶斯决策理论来求解。
3.朴素贝叶斯分类器
求概率时发生下溢问题?
数值下溢问题:是指计算机浮点数计算的结果小于可以表示的最小数,因为计算机的能力有限,当数值小于一定数时,其无法精确保存,会造成数值的精度丢失。
求概率时多个概率值相乘,得到的结果往往非常小;因此通常采用取对数的方式,将连乘转化为连加,以避免数值下溢。
零概率问题?
零概率问题,就是在计算实例的概率时,如果某个量x,在观察样本库(训练集)中没有出现过,会导致整个实例的概率结果是0
朴素贝叶斯算法的先天缺陷:其他属性携带的信息被训练集中某个分类下未出现的属性值 “抹去”,造成预测出来的概率绝对为0。
为了拟补这一缺陷,前辈们引入了拉普拉斯平滑的方法:对先验概率的分子(划分的计数)加1,分母加上类别数;对条件概率分子加1,分母加上对应特征的可能取值数量。这样在解决零概率问题的同时,也保证了概率和依然为1。
4.优缺点:
优点
朴素贝叶斯模型有稳定的分类效率。
对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练。
对缺失数据不太敏感,算法也比较简单,常用于文本分类。
缺点:
理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
对输入数据的表达形式很敏感。
5.sklearn 中调用相关函数, 参数解析:
高斯朴素贝叶斯算法是假设特征的可能性(即概率)为高斯分布。
class sklearn.naive_bayes.GaussianNB(priors=None)
参数:
priors: 先验概率大小,如果没有给定,模型则根据样本数据自己计算(利用极大似然法)。
var_smoothing:可选参数,所有特征的最大方差
属性:
class_prior_: 每个样本的概率
class_count: 每个类别的样本数量
classes_: 分类器已知的标签类型
theta_: 每个类别中每个特征的均值
sigma_: 每个类别中每个特征的方差
epsilon_: 方差的绝对加值方法
方法:
fit(X,Y): 在数据集(X,Y)上拟合模型。
get_params(): 获取模型参数。
predict(X): 对数据集X进行预测。
predict_log_proba(X): 对数据集X预测,得到每个类别的概率对数值。predict_proba(X):对数据集X预测,得到每个类别的概率。
score(X,Y): 得到模型在数据集(X,Y)的得分情况。