朴素贝叶斯
朴素贝叶斯是一种速度很快的分类算法,适用于数据特征维度很高的情况。它假设数据的特征之间相互独立,这也是“朴素”这一名称的由来,其数学基础是贝叶斯定理。
根据每个特征的数据分布的假设不同,有高斯朴素贝叶斯,多项式朴素贝叶斯,伯努利朴素贝叶斯。
高斯朴素贝叶斯
高斯朴素贝叶斯假设每个特征的数据服从高斯分布,也就是正态分布
在scikit-learn中运用高斯朴素贝叶斯:
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(X,y)
多项式朴素贝叶斯
顾名思义,它假设特征是由简单多项式分布生成的。多项式分布可以描述各种类型样本出现的概率,因此适用于描述出现次数或次数比例的特征,例如文档。
多项式朴素贝叶斯可用于文本分类,文本特征通常都是指待分类文本中单词出现的次数。
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()
model.fit(X,y)
朴素贝叶斯优缺点
朴素贝叶斯对数据有严格的假设,通常训练效果不会太好
优点:
1.训练预测速度快
2.容易解释
3.几乎没有可调参数
4.如果特征服从独立假设的话,朴素贝叶斯预测效果相比其他模型都会更好
缺点:
1.现实生活中,很难满足特征独立的假设,导致预测效果通常都不好
2.零概率问题。如果某个类别在训练样本中从没出现过,模型会对其富裕0概率,导致无法作出判断。不过可以采用拉普拉斯平滑进行处理。
提升朴素贝叶斯效果的一些小技巧
1.如果数字型特征不满足正太分布,可以可以通过数据变化而使其尽量满足,例如进行log变换
2.删除高相关性特征,如果有两个高度相关的特征存在于数据中,就相当于通过一个特征呗考虑两次,导致其重要性虚高
适用场景
1.假设分布函数与数据匹配,特征之间独立性高
2.数据实例间区分度很高
3.数据的维度很高
后面两点是相互联系的,因为如果数据维度很高,任何两点之间都不太可能靠近,那需要在每一个维度上都靠近才满足。