# Python小案例：朴素贝叶斯分类器

## 2、朴素的概念

P(C)*P(F1|C)*P(F2|C)...P(Fn|C)。

log[P(C)*P(F1|C)*P(F2|C)...P(Fn|C)] = log[P(C)]+log[P(F1|C)] + ... +log[P(Fn|C)]

P(C=0)=3/8， P(C=1)=5/8。特征F1="nb", F2="movie"。

（注意：实际计算中还要考虑上表中各个值的TF-IDF，具体计算方式取决于使用哪一类贝叶斯分类器。分类器种类见本文最后说明）

## 3、测试数据

[python] view plaincopy

1. #保存
3. sp.save('movie_data.npy', movie_data)
4. sp.save('movie_target.npy', movie_target)
5. #读取

## 4、代码与分析

Python代码如下：

[python] view plaincopy

1. # -*- coding: utf-8 -*-
2. from matplotlib import pyplot
3. import scipy as sp
4. import numpy as np
6. from sklearn.cross_validation import train_test_split
7. from sklearn.feature_extraction.text import CountVectorizer
8. from sklearn.feature_extraction.text import TfidfVectorizer
9. from sklearn.naive_bayes import MultinomialNB
10. from sklearn.metrics import precision_recall_curve
11. from sklearn.metrics import classification_report
12. '''''
14. #保存
15. sp.save('movie_data.npy', movie_reviews.data)
16. sp.save('movie_target.npy', movie_reviews.target)
17. '''
18. #读取
21. x = movie_data
22. y = movie_target
23. #BOOL型特征下的向量空间模型，注意，测试样本调用的是transform接口
24. count_vec = TfidfVectorizer(binary = False, decode_error = 'ignore',\
25. stop_words = 'english')
26. #加载数据集，切分数据集80%训练，20%测试
27. x_train, x_test, y_train, y_test\
28. = train_test_split(movie_data, movie_target, test_size = 0.2)
29. x_train = count_vec.fit_transform(x_train)
30. x_test = count_vec.transform(x_test)
31. #调用MultinomialNB分类器
32. clf = MultinomialNB().fit(x_train, y_train)
33. doc_class_predicted = clf.predict(x_test)
34. #print(doc_class_predicted)
35. #print(y)
36. print(np.mean(doc_class_predicted == y_test))
37. #准确率与召回率
38. precision, recall, thresholds = precision_recall_curve(y_test, clf.predict(x_test))
40. report = answer > 0.5
41. print(classification_report(y_test, report, target_names = ['neg', 'pos']))

0.821428571429 precision recall f1-score support neg 0.78 0.87 0.83 135 pos 0.87 0.77 0.82 145 avg / total 0.83 0.82 0.82 280 如果进行多次交叉检验，可以发现朴素贝叶斯分类器在这个数据集上能够达到80%以上的准确率。如果你亲自测试一下，会发现KNN分类器在该数据集上只能达到60%的准确率，相信你对朴素贝叶斯分类器应该能够刮目相看了。而且要知道，情感分类这种带有主观色彩的分类准则，连人类都无法达到100%准确。

821 篇文章178 人订阅

0 条评论

## 相关文章

1424

2225

### 【深度学习RNN/LSTM中文讲义】循环神经网络详解，复旦邱锡鹏老师《神经网络与深度学习》报告分享03（附pdf下载）

【导读】复旦大学副教授、博士生导师、开源自然语言处理工具FudanNLP的主要开发者邱锡鹏（http://nlp.fudan.edu.cn/xpqiu/）老师撰...

1.9K8

633

2815

### 特征工程之特征表达

在特征工程之特征选择中，我们讲到了特征选择的一些要点。本篇我们继续讨论特征工程，不过会重点关注于特征表达部分，即如果对某一个特征的具体表现形...

1133

2035

1560

2916

2340