朴素贝叶斯算法
原理:通过某对象的先验概率,利用贝叶斯公式计算出后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。
主要特点:
- 属性可以离散,也可以连续;
- 数学基础扎实,分类效率稳定;
- 对缺失和噪声数据不太敏感;
- 属性如果不相关,分类效果很好;如果相关,则不低于决策树。
学习模型:计算对象归属于某一类的后验概率,以此最大概率的类作为对象所属类。即待学习的是对象的后验概率,及其涉及的概率分布。
输入:
训练集
测试实例
输出:测试实例的分类
学习参数:先验概率 ;条件概率:
学习(估计)方法:极大似然估计
学习结果:
先验概率
后验概率
测试实例:
计算对象属于各类别的概率
返回对象的分类y
注意点:
- 用极大似然估计可能会出现分母为0的情况,此时可以采用贝叶斯估计(最大后验估计)等价于在的各个取值的频数上赋予了一个正数lamada
此时的贝叶斯估计调整为:
当时,为极大似然估计;当时,为拉普拉斯平滑。 - 在分类确定的条件下,用于分类的特征是条件独立的,但实际上并不符合,这也是为何理论上贝叶斯分类器准确率较高,但实际上的朴素贝叶斯很难成为最优分类器。
- 传统上认为事件的概率分布服从正态分布,但实际上不一定服从。在R与Python中均支持利用不同的分布进行估计。区别主要在于假设了不同的分布。
譬如:
GaussianNB(高斯):
BernoulliNB(伯努利):
MultinomialNB(多项式):
Python实战
目标:采用scikit-learn自带的手写识别数据集Digit Dataset,进行贝叶斯分类,并选择最优参数。
代码框架:导入包;导入并展示数据集,实现训练与测试集拆分;定义三种不同估计方法的贝叶斯分类器,实现分类;筛选最优参数;考虑训练数据追加,分类器的优化云联。(注:高斯贝叶斯分类器不存在优化的最优参数)
导入包:
from sklearn import datasets,cross_validation,naive_bayes
import numpy as np