作者 |Victor Sim
编译 |VK
起源 |Towards Data Science
当初假新闻太多了,很难找到准确无误的消息来源。本文旨在利用奢侈贝叶斯分类器对虚实新闻进行分类。
什么是 NaiveBayes 分类器
奢侈贝叶斯分类器是一种利用贝叶斯定理对数据进行分类的确定性算法。让咱们看一个例子:
假如你想预测明天下雨的概率:在过来的几天里,你通过观察天空中的云收集了数据。以下是你的数据表:
在下雨或不下雨的状况下,这个表格示意了某一特色呈现的次数。假如呈现了灰色云或红色云,咱们所领有的实际上是一个蕴含下雨概率的表格。
当初有了数据,让咱们做一个预测。明天咱们看到了灰色的云,没有白云,是雨天还是晴天?要答复这个问题,咱们必须应用 Bayes 定理:
这个定理利用过来的数据做出更好的决定。
如果呈现了灰色云,下雨的概率等于以前有灰色云下雨的概率。
依据咱们的数据:
P(B | A)(降雨概率 | 灰色云)=10/11
P(A)(降雨概率)= 11/(50+11) = 11/66 = 1/6
P(B)(灰色云的概率)=1(因为已确认呈现了灰色云)
P(A | B)=P(B | A)*P(A)/P(B)
P(A | B)=[(10/11)*(1/6)]/1
P(A | B)=10/66
如果呈现了灰色的云,下雨的概率是 10/66
我的项目
通过对 naivebayes 分类器的简要介绍,让咱们用 naivebayes 分类器来探讨假新闻检测。
思考到新闻是假的,咱们将统计一个词呈现在题目中的次数。将其转换为概率,而后计算题目为假的概率,与题目为真的概率相比。
我应用的数据集有 21000 多个实在新闻实例,23000 个假新闻实例。对于一个失常的数据集来说,这可能看起来是不均衡的,但这种不均衡对于计算初始概率是必要的:即题目是假的概率。
代码:
import pandas as pd
import string
这是程序的三个依赖项:pandas 是读取 csv 文件,string 是字符串操作。
true_text = {}
fake_text = {}
true = pd.read_csv('/Users/XXXXXXXX/Desktop/True.csv')
fake = pd.read_csv('/Users/XXXXXXXX/Desktop/Fake.csv')
此脚本用于读取两个数据集,其中蕴含假新闻和真新闻的实例。
def extract_words(category,dictionary):
for entry in category['title']:
words = entry.split()
for word in words:
lower_word = word.lower()
if word in dictionary:
dictionary[lower_word] += 1
else:
dictionary[lower_word] = 1
return dictionary
思考到题目是假新闻,这个脚本计算一个单词呈现的次数,并在其进入词典的条目中增加一个计数,计算每个单词呈现的次数。
def count_to_prob(dictionary,length):
for term in dictionary:
dictionary[term] = dictionary[term]/length
return dictionary
此函数通过计算假新闻标题或实在新闻标题的总字数将数字转换为概率。
def calculate_probability(dictionary,X,initial):
X.translate(str.maketrans('','', string.punctuation))
X = X.lower()
split = X.split()
probability = initial
for term in split:
if term in dictionary:
probability *= dictionary[term]
print(term,dictionary[term])
return probability
此函数将相干概率相乘,以计算题目的“分数”。为了做出预测,在应用假新闻和真新闻词典时比拟得分。如果假新闻字典返回更高的分数,则模型预测题目为假新闻。
true_text = extract_words(true,true_text)
fake_text = extract_words(fake,fake_text)
true_count = count_total(true_text)
fake_count = count_total(fake_text)
true_text = count_to_prob(true_text,true_count)
fake_text = count_to_prob(fake_text,fake_count)
total_count = true_count + fake_count
fake_initial = fake_count/total_count
true_initial = true_count/total_count
这个脚本应用上述所有函数为每个单词创立一个概率字典,以便稍后计算题目的“分数”。
X = 'Hillary Clinton eats Donald Trump'
calculate_probability(fake_text,X,1)>calculate_probability(true_text,X,1)
最初一个脚本评估了题目:“Hillary Clinton eats Donald Trump”,以测试模型。
True
模型输入的后果是实在的,因为题目显然是假新闻。
你能够改良我的程序
我创立了这个程序作为一个框架,以便其他人能够改良它。你能够思考以下几点:
- 思考短语和单词
一个词自身没有意义,然而一个短语能够让咱们更深刻地理解新闻是否是假的
- 通过网络抓取取得更大的数据集
网上有很多虚实新闻的起源,你只有找到它就能够了。
原文链接:https://towardsdatascience.co…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/