0
点赞
收藏
分享

微信扫一扫

朴素贝叶斯算法:对文本进行分类

巧乐兹_d41f 2022-03-15 阅读 27

文章目录

一、什么是朴素贝叶斯算法?

朴素贝叶斯=朴素+贝叶斯
朴素:特征与特征之间相互独立
贝叶斯公式:概率论公式
在这里插入图片描述

朴素贝叶斯:
在这里插入图片描述

二、使用贝叶斯算法对文本进行分类

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()

三、总结

优点:

  • 稳定
  • 对缺失数据不太敏感
  • 分类准确的高,速度快

缺点:

  • 有样本属性独立性的假设,特征属性有关联的话效果不会很好
举报

相关推荐

0 条评论