朴素贝叶斯——文章分类示例

39 篇文章 2 订阅
13 篇文章 0 订阅

朴素贝叶斯——文章分类示例

0. 原理-公式推导

  • Venn图
    Venn图
  • 因为
    P ( A ∣ B ) = P ( A ⋂ B ) P ( B ) = > P ( A ⋂ B ) = P ( A ∣ B ) ⋅ P ( B ) P(A | B) = \frac{P(A \bigcap B)}{P(B)} => P(A \bigcap B) = P(A | B) \cdot P(B) P(AB)=P(B)P(AB)=>P(AB)=P(AB)P(B)
    P ( B ∣ A ) = P ( A ⋂ B ) P ( A ) = > P ( A ⋂ B ) = P ( B ∣ A ) ⋅ P ( A ) P(B | A) = \frac{P(A \bigcap B)}{P(A)} => P(A \bigcap B) = P(B | A) \cdot P(A) P(BA)=P(A)P(AB)=>P(AB)=P(BA)P(A)
    P ( A ∣ B ) ⋅ P ( B ) = P ( B ∣ A ) ⋅ P ( A ) P(A | B) \cdot P(B) = P(B | A) \cdot P(A) P(AB)P(B)=P(BA)P(A)
  • 所以
    贝 叶 斯 公 式 : P ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) P ( B ) 贝叶斯公式: P(A | B) = \frac{P(B | A) \cdot P(A)}{P(B)} :P(AB)=P(B)P(BA)P(A)

1. 导包

import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB

2. 原始数据

# fetch_20newsgroups新闻数据下载需要一定时间
news = datasets.fetch_20newsgroups(subset="all")
X = news.data
y = news.target
print(X[0:5])
print(y[0:5])
# 数据示例
["From: Mamatha Devineni Ratnam <mr47+@andrew.cmu.edu>\nSubject: Pens fans reactions\nOrganization: Post Office, Carnegie Mellon,  ...... I was very disappointed not to see the Islanders lose the final\nregular season game.          PENS RULE!!!\n\n"]
# 新闻分类示例
[10  3 17  3  4]

3. 数据预处理

# 训练集、测试集拆分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
# 使用TF-IDF
tf_idf = TfidfVectorizer()
X_train = tf_idf.fit_transform(X_train)
X_test = tf_idf.transform(X_test)
print(X_train[0:5])
print(tf_idf.get_feature_names()[8000:8020]) # 打印部分分词特征名

4. 构建朴素贝叶斯模型

mlt = MultinomialNB(alpha=1.0)
mlt.fit(X_train, y_train)

5. 结果预测与评分

# 预测
y_predict = mlt.predict(X_test)
print("预测结果", y_predict[0:10])
print("实际结果", y_test[0:10])
# 评分
print("准确度", mlt.score(X_test, y_test))
# 结果示例
预测结果 [ 0 16 15 12 16 12  6 17  7 11]
实际结果 [19 16 15 12 16 12  6 17  7 11]
准确度 0.8529286926994907
好的,我知道了。针对你的问题,我可以为你提供一个简单的朴素贝叶斯算法的实现示例,用于新闻分类。以下是使用Scikit-learn库实现朴素贝叶斯分类器的示例代码: ```python import numpy as np from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.pipeline import Pipeline # 加载20个新闻组数据集 newsgroups_train = fetch_20newsgroups(subset='train', categories=None) newsgroups_test = fetch_20newsgroups(subset='test', categories=None) # 定义朴素贝叶斯分类器的管道 text_clf = Pipeline([ ('vect', CountVectorizer()), # 特征提取器 ('clf', MultinomialNB()), # 分类器 ]) # 训练并预测 text_clf.fit(newsgroups_train.data, newsgroups_train.target) predicted = text_clf.predict(newsgroups_test.data) # 输出分类结果 print("分类准确率:", np.mean(predicted == newsgroups_test.target)) ``` 这个示例代码首先加载了20个新闻组数据集,然后使用管道定义了一个朴素贝叶斯分类器。管道中包含一个特征提取器(CountVectorizer)和一个分类器(MultinomialNB)。特征提取器将文本数据转换为一组特征向量,而分类器则使用这些特征向量进行分类。 最后,我们使用训练集训练分类器,并在测试集上进行预测。输出分类准确率。这个示例代码可以帮助你了解如何使用Scikit-learn库实现朴素贝叶斯分类器来进行新闻分类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值