1. 常见的例子
1.1 垃圾邮件分类
1.2 文章分类
2. 概率基础
简单的一个例子,职业和体型与女神是否喜欢的关系:
2.1 联合概率和条件概率
可以看到第一问题很简单4/7,第二个问题是求联合概率 p(程序员,匀称) = p(程序员)p(匀称) = 3/7 * 4/7=12/49。第三个问题是条件概率,p(程序员|喜欢) = 2/4 ;第4个问题也是条件概率,P(产品,超重|喜欢) = P(产品|喜欢)P(超重|喜欢) = 1/2*(1/4) = 1/8
3. 朴素贝叶斯-贝叶斯公式
某一个文档是哪一类别的概率是多少。
朴素贝叶斯,之所以叫“朴素”,指的就是特征独立,这也是条件概率的前提。
例子:
根据朴素贝叶斯公式,这篇文档是科技类别的概率是p(科技|影院,支付宝,云计算) = p( 影院,支付宝,云计算|科技) ∗ p( 科技) (因为求每一种类别的概率都要除以p(特征值的概率)所以这里就省略掉)
p( 影院,支付宝,云计算|科技) 是条件概率,根据条件概率公式,等于,p( 影院|科技) *p( 支付宝|科技) *p(云计算|科技) 也即,8/100 x 20/100 x 63/100 ,而 p( 科技) 是等于 30/90
同理,娱乐类别也是这样。
从图片中可以看出,娱乐类别是0,这显然是不合理的。所以引出拉普拉斯平滑。
3.1 拉普拉斯平滑
所以,添加完拉普拉斯平滑系数
4.朴素贝叶斯的API
4.1 sklearn朴素贝叶斯实现API
sklearn.naive_bayes.MultinomialNB
5. 朴素贝叶斯算法案例
• sklearn20类新闻分类
• 20个新闻组数据集包含20个主题的18000个新闻组帖子
朴素贝叶斯案例流程
1、加载20类新闻数据,并进行分割
2、生成文章特征词
3、朴素贝叶斯estimator流程进行预估
代码
from sklearn.naive_bayes import MultinomialNB
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
#获取数据
news = fetch_20newsgroups(subset='all') #可以指定下载位置
#对数据进行分割
x_train, x_test, y_train, y_test = train_test_split(news.data,news.target,test_size=0.25)
#对数据集进行特征抽取
tf = TfidfVectorizer()
#以训练集当中的词的列表进行每篇文章重要性统计['a','b'.'c','d']
x_train = tf.fit_transform(x_train)
print('获取特征的名字',tf.get_feature_names())
x_test = tf.transform(x_test)
#进行朴素贝叶斯算法的预测
mlt =MultinomialNB(alpha=1.0)
mlt.fit(x_train,y_train)
y_predict = mlt.predict(x_test)
print('预测文章的类别', y_predict)
#得出准确率
print('准确率为', mlt.score(x_test,y_test))
结果
预测文章的类别 [12 9 1 ... 14 13 11]
准确率为 0.857597623089983