朴素贝叶斯分类

朴素贝叶斯实现新闻分类

使用朴素贝叶斯对新闻进行分类,朴素贝叶斯分类效率高,准确率高,速度快,但是不适合特征属性有关联的场合。

关于朴素贝叶斯的原理此处不做介绍,只展示相关代码,代码中已经给出相关注释。

代码段1

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from matplotlib import pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
plt.rcParams['axes.unicode_minus'] = False

代码段2(核心)

def nb_news():
    """
    使用朴素贝叶斯对新闻进行分类,朴素贝叶斯分类效率高,准确率高,速度快,但是不适合特征属性有关联的场合
    :return:
    """
    # 1) 获取数据
    news = fetch_20newsgroups(subset="all")
    print(news)

    # 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(news.data,news.target,test_size=0.3)
    print(x_test,y_test)

    # 3)特征工程:文本特征抽取-tfidf
    transfer = TfidfVectorizer()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    print(x_train.todense())

    # 4)朴素贝叶斯算法预估器流程
    # alpha为拉普拉斯平滑系数,一般情况下取1
    estimator = MultinomialNB(alpha=1.0)
    # 调用fit()方法进行训练
    estimator.fit(x_train, y_train)

    # 5)模型评估
    y_predict = estimator.predict(x_test)
    print("预测文章类别为:\n", y_predict)
    print("真实类别为:\n", y_test)
    print("直接对比真实值和预测值:\n", y_test == y_predict)

    score = estimator.score(x_test, y_test)
    print("准确率为:\n",score)

    return x_test, y_test, y_predict, score

分类结果:
朴素贝叶斯分类_第1张图片
分类结果准确率为85%。

文章可能存在多处不足,还请各位大佬批评指正。

源码获取请加Q1060404594

你可能感兴趣的:(数据集分类,分类,机器学习,python)