朴素贝叶斯大家都知道了,我也就不赘述了,可参考
http://scikit-learn.org/stable/modules/naive_bayes.html
- 如何使用
比如根据天气看小J是否出去打球,统计了她过去打球的数据:
天气 | 打球 |
晴天 | no |
多云 | yes |
雨天 | yes |
晴天 | yes |
晴天 | yes |
多云 | yes |
雨天 | no |
雨天 | no |
晴天 | yes |
雨天 | yes |
晴天 | no |
多云 | yes |
多云 | yes |
雨天 | no |
- 将数据集转换为频率表:
天气 | 不打球 | 打球 |
多云 | 4 | |
雨天 | 3 | 2 |
晴天 | 2 | 3 |
总数 | 5 | 9 |
天气 | 不打球 | 打球 | |
多云 | 4 | 0.29 | |
雨天 | 3 | 2 | 0.36 |
晴天 | 2 | 3 | 0.36 |
总数 | 5 | 9 | |
0.36 | 0.64 |
P(打球|晴天) = P(晴天|打球)·P(打球)/P(晴天) = (3/9)·0.64/0.36 = 0.59
所以在晴天打球的概率有0.59
- 应用
1.实时预测
2.多类别预测
3.文本分类/垃圾过滤/情感分析
4.推荐系统
- 采用python构建基本模型(采用sklearn包)
包含三类模型:
1.Gaussian:分类中假设数据特征符合正态分布
2.Multinomial:用于离散数据计数,比如文本分类问题中统计一篇文章中的词频数
3.Bernoulli:二分类问题,比如文本分类中,文章中一个词出现还是不出现
- python案例
构造数据:
#Import Library of Gaussian Naive Bayes model
from sklearn.naive_bayes import GaussianNB
import numpy as np
#assigning predictor and target variables
x = np.array([[-3,7],[1,5], [1,2], [-2,0], [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])
构造模型:
#Create a Gaussian Classifier
model = GaussianNB()
# Train the model using the training sets
model.fit(x, y)
#Predict Output
predicted= model.predict([[1,2],[3,4]])
print predicted
输出为预测结果:[3, 4]
- 提升贝叶斯表现
1. 如果连续型数据但是不满足正态分布,则将其转化为符合正态分布的数据
2. 如果测试数据特征出现频率为0的数据,就用平滑技术“拉普拉斯变换”来进行预测
3. 删除相关联的特征,可能造成过拟合
4. 注意各个参数选项的影响,建议在数据与处理和特征选择阶段处理参数问题
5. 集成、提升、装袋方法由于目的是减小方差,所以对于朴素贝叶斯没有任何帮助