作者|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.com/using-bayesian-classifiers-to-detect-fake-news-3022c8255fba
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方檔案:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/25948.html
標籤:其他
