文章目录
一、什么是朴素贝叶斯算法?
朴素贝叶斯=朴素+贝叶斯
朴素:特征与特征之间相互独立
贝叶斯公式:概率论公式
朴素贝叶斯:
二、使用贝叶斯算法对文本进行分类
1、获取数据
from sklearn.datasets import fetch_20newsgroups
``
```python
# 1、获取数据
# all:训练集和测试集都要
fetch_20newsgroups(subset="all")
2、划分数据集
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)
3、特征工程(文本特征处理)
# 3、特征工程 文本特征抽取——tfidf
transfer = TfidfVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
4、朴素贝叶斯预估器流程
# 4、朴素贝叶斯预估器流程
estimator = MultinomialNB()
estimator.fit(x_train, y_train)
5、模型评估
# 5、模型评估
# (1)
y_predict = estimator.predict(x_test)
print(y_predict)
print(y_predict == y_test)
# (2)
score = estimator.score(x_test, y_test)
print(score)
6、结果
[17 15 12 ... 11 2 17]
[ True True True ... True True True]
0.855899830220713
7、完整代码
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
def nb_news():
"""
朴素贝叶斯算法对新闻进行分类
:return:
"""
# 1、获取数据
# all:训练集和测试集都要
news = fetch_20newsgroups(subset="all")
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)
# 3、特征工程 文本特征抽取——tfidf
transfer = TfidfVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、朴素贝叶斯预估器流程
estimator = MultinomialNB()
estimator.fit(x_train, y_train)
# 5、模型评估
# (1)
y_predict = estimator.predict(x_test)
print(y_predict)
print(y_predict == y_test)
# (2)
score = estimator.score(x_test, y_test)
print(score)
return None
if __name__ == '__main__':
nb_news()
三、总结
优点:
- 稳定
- 对缺失数据不太敏感
- 分类准确的高,速度快
缺点:
- 有样本属性独立性的假设,特征属性有关联的话效果不会很好