数据挖掘实战-基于朴素贝叶斯算法构建真假新闻分类模型

news2024/11/13 9:32:41

 

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

1.项目背景

2.数据集介绍

3.技术工具

4.实验过程

4.1导入数据

4.2数据预处理

4.3数据可视化

4.4特征工程

4.5构建模型 

源代码


1.项目背景

        在信息化时代,互联网技术的飞速发展极大地促进了新闻媒体的传播速度和范围。然而,这种迅速而广泛的信息传播也带来了虚假新闻泛滥的问题。虚假新闻不仅误导公众,影响社会舆论,还可能对政治稳定、经济秩序和公共安全造成严重的负面影响。因此,如何有效地识别和分类真假新闻,成为了当前亟待解决的重要问题。

        为了解决这一难题,研究者们不断探索各种方法和算法来构建真假新闻分类模型。朴素贝叶斯算法作为一种基于概率统计的分类方法,以其坚实的数学基础、稳定的分类效率和简单的算法结构,成为了众多研究者关注的焦点。该算法通过计算给定文本属于不同类别的概率,并选择概率最大的类别作为分类结果,从而实现对新闻文本的有效分类。

        朴素贝叶斯算法在真假新闻分类中的优势在于其基于概率统计的建模方式。该算法假设特征条件之间相互独立,从而简化了计算过程。虽然这种假设在实际情况中可能不完全成立,但朴素贝叶斯算法在多数情况下仍然能够取得较好的分类效果。此外,该算法还具有参数少、对缺失数据不敏感等优点,适用于处理大规模数据集。

        因此,本研究旨在基于朴素贝叶斯算法构建一个真假新闻分类模型,以提高新闻分类的准确性和效率。通过利用朴素贝叶斯算法的优势,该模型可以自动对新闻文本进行分类,减少人工干预的成本和错误率。同时,该模型还可以为新闻监管机构提供技术支持,帮助他们及时发现和处理虚假新闻,维护新闻媒体的公信力。此外,本研究还可以为相关领域的研究提供有益的参考和借鉴,推动相关领域的发展和创新。

2.数据集介绍

        本实验数据集来源于Kaggle,合并后的数据集共有44898条,5个变量。

关于数据集

数据集分为两个文件:

  1. Fake.csv(23502 条假新闻文章)
  2. True.csv(21417 篇真实新闻文章)

数据集列:

  1. 标题:新闻文章的标题
  2. 文本:新闻文章的正文
  3. 主题:新闻文章的主题
  4. 日期:新闻文章的发布日期

3.技术工具

Python版本:3.9

代码编辑器:jupyter notebook

4.实验过程

4.1导入数据

导入数据分析相关的第三方库并加载数据集,然后给两个数据集加上标签列并合并数据集

查看数据大小 

查看数据基本信息

查看数据的描述性统计

4.2数据预处理

统计数据缺失值情况

可以发现原始数据集并不存在缺失值

统计数据重复值情况

可以发现数据集中有209个重复值需要处理

删除重复值

4.3数据可视化

对text变量进行处理:

小写字母转换

删除停止词

删除标点符号

删除标签

去除特殊字符

让我们用词云可视化真假新闻关键词

4.4特征工程

首先准备建模用到的数据,自变量X和因变量y,接着拆分数据集为训练集和测试集

4.5构建模型 

我们将尝试两种不同的方法来拟合多项式朴素贝叶斯

1. 使用CountVectorizer

2. 使用TF-IDF

首先使用CountVectorizer

Count Vectorizer给出了96%的准确率,现在让我们尝试TF-IDF。

TF-IDF

词频-逆文档频率(Term Frequency- inverse Document Frequency, TF-IDF)向量化器是一种在自然语言处理(natural language processing, NLP)中用于将原始文档集合转换为适合机器学习算法的数值表示的流行技术。

从结果可以看出,与TF-IDF(0.94)相比,CountVectorizer提供了更好的精度(0.96)。

源代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

fake = pd.read_csv("Fake.csv")
fake['label'] = 0 # 假新闻标记为0
true = pd.read_csv("True.csv")
true['label'] = 1 # 真新闻标记为1
df = pd.concat([fake,true],axis=0) # 合并真假数据集
df.head()
df.shape
df.info()
df.describe(include='O')
df.isnull().sum()
df.duplicated().sum()
df.drop_duplicates(inplace=True)
df.duplicated().sum()
# 可视化真假新闻个数
sns.countplot(x='label' ,data=df)
plt.show()
# 可视化各类别新闻个数
plt.figure(figsize=(12,6))
sns.countplot(x='subject' ,data=df)
plt.show()
数据预处理:

小写字母转换
删除停止词
删除标点符号
Lemmatizing
删除标签
去除特殊字符
import re
from nltk.corpus import stopwords
import string

def clean_text(text):
    '''Make text lowercase, remove text in square brackets,remove links,remove punctuation
    and remove words containing numbers.'''
    text = str(text).lower()
    text = re.sub('\[.*?\]', '', text)
    text = re.sub('https?://\S+|www\.\S+', '', text)
    text = re.sub(r"[^a-zA-Z?.!,¿]+", " ", text)
    text = re.sub('<.*?>+', '', text)
    text = re.sub('[%s]' % re.escape(string.punctuation), '', text)
    text = re.sub('\n', '', text)
    text = re.sub('\w*\d\w*', '', text)
    punctuations = '@#!?+&*[]-%.:/();$=><|{}^' + "'`" + '_'
    for p in punctuations:
        text = text.replace(p,'') # 删除标点符号
    return text

def remove_stopword(x):
    return [y for y in x if y not in stopwords.words('english')]

df['text'] = df['text'].apply(lambda x:clean_text(x))
from nltk.tokenize import word_tokenize
def remove_stopwords_from_sentence(sentence):
    stop_words = set(stopwords.words('english'))
    tokens = word_tokenize(sentence)
    filtered_tokens = [token for token in tokens if token not in stop_words]
    return ' '.join(filtered_tokens)

# 将函数应用于'sentence'列
df['text'] = df['text'].apply(remove_stopwords_from_sentence)
df.head()
让我们用词云可视化真假新闻关键词
from wordcloud import WordCloud
text = " ".join(i for i in df[df['label']==1]['text'])
wordcloud = WordCloud( background_color="white").generate(text)

plt.figure( figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.title('wordcloud for True News')
plt.show()
text = " ".join(i for i in df[df['label']==0]['text'])
wordcloud = WordCloud( background_color="white").generate(text)

plt.figure( figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.title('wordcloud for Fake News')
plt.show()
from sklearn.model_selection import train_test_split
X = df['text']
y = df['label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
我们将尝试两种不同的方法来拟合多项式朴素贝叶斯
1. 使用CountVectorizer
2. 使用TF-IDF
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.metrics import confusion_matrix,classification_report,ConfusionMatrixDisplay,accuracy_score
# Count_Vectorizer
# 创建管道 
pipe = Pipeline([('cv', CountVectorizer()),
                ('svc', MultinomialNB())])

# 拟合管道 
pipe.fit(X_train, y_train)
# 创建分类报告并绘制混淆矩阵
preds = pipe.predict(X_test)
print(classification_report(y_test, preds))
ConfusionMatrixDisplay.from_estimator(pipe, X_test, y_test)
Count Vectorizer给出了96%的准确率,现在让我们尝试TF-IDF
TF-IDF

词频-逆文档频率(Term Frequency- inverse Document Frequency, TF-IDF)向量化器是一种在自然语言处理(natural language processing, NLP)中用于将原始文档集合转换为适合机器学习算法的数值表示的流行技术。
# 创建管道
pipe = Pipeline([('tfidf', TfidfVectorizer()),
                ('svc', MultinomialNB())])

# 拟合管道 
pipe.fit(X_train, y_train)
# 创建分类报告并绘制混淆矩阵
preds = pipe.predict(X_test)
print(classification_report(y_test, preds))
ConfusionMatrixDisplay.from_estimator(pipe, X_test, y_test)
predict_train = pipe.fit(X_train, y_train).predict(X_train)
# 训练数据集的准确得分
accuracy_train = accuracy_score(y_train,predict_train)
print('accuracy_score on train dataset : ', accuracy_train)
# 在测试数据集上预测目标
predict_test = pipe.predict(X_test)
#测试数据集上的准确度得分
accuracy_test = accuracy_score(y_test,predict_test)
print('accuracy_score on test dataset : ', accuracy_test)
与TF-IDF(0.94)相比,CountVectorizer提供了更好的精度(0.96)。

资料获取,更多粉丝福利,关注下方公众号获取

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外包干了半年,快要废了。。。

先说一下自己的情况&#xff0c;普通本科&#xff0c;在外包干了半年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会让…

10个登录页面优化的案例研究和示例,激发你的灵感

什么是落地页优化&#xff0c;为什么它很重要&#xff1f; 落地页优化是一门将首次浏览转化为行动&#xff08;即转化率&#xff09;的艺术和科学。其主要目的是调整和微调您的数字欢迎界面&#xff0c;让每一位访问者都感受到这是为他们量身打造的。 这个过程不仅仅是简单的…

电脑监控软件系统有哪些?|2024年干货整理,赶紧码住!

在一家知名互联网公司里&#xff0c;由于缺乏有效的监管措施&#xff0c;一些员工利用工作时间进行与工作无关的活动&#xff0c;如网购、观看视频、玩游戏等小技怠工的情况&#xff0c;这种现象被称为“摸鱼”。 尽管表面上看似无害&#xff0c;但长期下来却严重拖累了整个团队…

Chisel简明教程

1. 简介 Chisel&#xff08;Scala嵌入式硬件构造语言&#xff09;是一种嵌入在高级编程语言Scala中的硬件构造语言。Chisel是一个特殊类定义、预定义对象和Scala内部使用约定的库&#xff0c;因此当你编写Chisel代码时&#xff0c;实际上是在编写一个构建硬件图的Scala程序。随…

也谈PCIe带宽问题

每每谈到PCIe速率的时候&#xff0c;必不可少要谈论的就是PCIe的带宽问题。互联网上也有很多帖子在谈这个事情&#xff0c;但总觉得差那么点意思。我从几个维度来讨论我的理解&#xff0c;希望有些信息能带给大家不一样的看法。先贴张PCIe速率提升图。 理论带宽、实际带宽、带宽…

掌握Transformer之学习各组件

01 引言 这是我关于Transformer系列的第二篇文章。在前一篇文章中&#xff0c;我们了解了Transformer结构的功能、相关架构及其相比于RNN架构的优势。在本文中&#xff0c;我们可以深入了解Transformer结构的工作原理。我们将通过实际的矩阵表示来了解数据如何在该结构内流动…

如何构建高效快速的数据同步策略方案

在数据化的商业环境中&#xff0c;实现数据的实时同步不仅是提升企业内部协作效率的关键&#xff0c;更是确保业务决策精准性和时效性的核心要素。通过确保数据的一致性和最新性&#xff0c;企业能够实现跨部门的无缝协作&#xff0c;从而为业务流程的顺畅运作和快速响应市场变…

比 GPT-4 便宜 187 倍的Mistral 7B (非广告)

Mistral 7B 是一种设计用来快速处理较长文本的人工智能模型。它采用了一些特别的技术来提高速度和效率&#xff0c;比如“分组查询注意力&#xff08;grouped-query attention&#xff09;”和“滑动窗口注意力&#xff08;sliding-window attention&#xff09;”。 这些技术…

python中如何打印日志信息推荐logaid库(强大的日志库)

一、安装 pip install logaid二、使用 只打印&#xff0c;不保存 from logaid import loglog.info(hello world) log.error(hello world) log.warning(hello world) log.fatal(hello world,123,{},[],False)开启超级print from logaid import log log.init(print_proTrue)prin…

长沙自闭症寄宿学校推荐,为孩子开启光明未来

在长沙这座历史悠久而又充满活力的城市中&#xff0c;自闭症儿童的成长与教育问题牵动着无数家庭的心。家长们渴望为孩子找到一所能够提供专业康复、温馨关怀与全面教育的学校&#xff0c;为他们的未来铺设一条光明之路。虽然本文起始于长沙的期盼&#xff0c;但我们的目光已跨…

多态(上)【C++】

文章目录 多态的概念多态的实现多态产生的条件什么是虚函数&#xff1f;虚函数的重写和协变重写协变 析构函数的重写为什么有必要要让析构函数构成重写&#xff1f; 多态的概念 C中的多态是面向对象编程&#xff08;OOP&#xff09;的一个核心特性&#xff0c;指的是同一个接口…

UE4_后期处理六—夜视仪、扫描线

参考:在虚幻引擎中混合材质函数 | 虚幻引擎 5.4 文档 | Epic Developer Community (epicgames.com) 效果&#xff1a; 知识储备&#xff1a; 混合材质函数: 这些函数用于将一种颜色与另一颜色混合&#xff0c;这类似于PS中的混合模式。 混合 是一种函数类型&#xff0c;这类…

因MathType导致word复制粘贴失败,显示:运行时错误‘53’

问题&#xff1a;运行时错误‘53’&#xff1a;文件未找到&#xff1a;MathPage.WLL 解决方法&#xff1a;打开MathType所在文件夹 右击MathType图标->点击“打开文件所在位置”->找到MathPage.WLL文件。 然后&#xff0c;把这个文件复制到该目录下&#xff1a;C:\Progr…

UE5-俯视角色移动(蓝图)01

效果如下&#xff1a; 蓝图节点如下&#xff1a; 使用示例自带的移动蓝图&#xff0c;发现角色只能平移&#xff0c;不会转向。必须勾选以下选项&#xff1a; 点击蓝图-》组件-》SpringArm节点。在细节中找到摄像机设置&#xff0c;勾选以下&#xff1a; 在 点击蓝图-》组件-…

智能化大数据平台引领企业迈向精准决策时代

随着科技的飞速发展&#xff0c;大数据平台正逐步迈向更加智能化和自动化的未来趋势。未来的数据平台不仅仅是一个简单的存储和处理数据的工具&#xff0c;而是一个能够自主学习、优化和做出决策的智能系统。这一转变将极大地改变企业处理数据的方式&#xff0c;提高决策的速度…

LeetCode_sql_day24(1212.查询球队积分)

描述 表: Teams ------------------------- | Column Name | Type | ------------------------- | team_id | int | | team_name | varchar | ------------------------- team_id 是该表具有唯一值的列。 表中的每一行都代表一支独立足球队。表: Matches…

[机器学习]逻辑回归

1 前置知识 逻辑回归解决二分类问题。sigmoid函数&#xff1a;非线性&#xff0c;值域(0,1)概率值 2 逻辑回归原理 3 癌症分类案例 import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import Standa…

Python爬虫案例七:抓取南京公交信息数据并将其保存成excel多表形式

测试链接: https://nanjing.8684.cn/line4 思路&#xff1a;先抓取某个类型下的某一条线路所有数据&#xff0c;然后实现批量,&#xff0c;列举出三个类型代表既可 源码&#xff1a; from lxml import etree from xlutils.copy import copy import requests, os, xlrd, xlwtd…

【计算机网络】电路交换、电报交换、分组交换

【计算机网络】电路交换、电报交换、分组交换 目录 【计算机网络】电路交换、电报交换、分组交换1. 电路交换2. 电报交换3. 分组交换4. 基于分组交换~“虚电路交换”技术 1. 电路交换 电路交换&#xff08;Circuit Switching&#xff09;:通过物理线路的连接&#xff0c;动态地…

为什么总是分心?(影响专注力的5因素)

【Ali Abdaal】Why You’re Always Distracted - 5 Mistakes Ruining Your Focus 介绍 在这个视频中&#xff0c;将讨论影响你注意力的五个主要因素。 内容将深入研究如何提高专注力、避免分心&#xff0c;从而更有效地投入到你的工作和学习中。 视频提供了一些实用的技巧和…