Build a machine learning classifier to know who’s Tweeting? Trump or Trudeau?

利用機器學習判斷是川普(Trump)還是特魯多(Trudeau)發的推特

Sharko Shen
Data Science & LeetCode for Kindergarten
12 min readApr 26, 2020

--

目標:

今天是進行一個模型預測的步驟,建立機器學習模型,然後來區分哪些推特是川普還是特魯多發的。

來源: https://commons.wikimedia.org/wiki/File:President_Donald_Trump_and_Prime_Minister_Justin_Trudeau_Joint_Press_Conference,_February_13,_2017.jpg

第一步: 導入需要用到的模塊

這次會使用的模型有MultinomialNB & LinearSVC

第二步: 匯入資料

資料來自2017年11月的推特內容,接著把資料分成training(67%)跟testing data(33%)。

第三步: 文字向量化

接著把文字轉成數字

這邊使用兩個轉換模型Count Vectorizer跟Tf-idf Vectorizer,這兩個模型在之前的文章有詳細的介紹。

CountVectorizer: 利用計算文字出現的次數來判定個別單字的重要程度。但這會出現問題,例如有些出現很普遍的字”the”雖然出現很多次但其實沒啥意義。所以出現了改良版工具TF-IDF Vectorizer,舉例來說一個有關科技的電影中,”機器人”這個詞出現很多次,但在全部100部電影中出現的比例就不高,但我們知道機器人對於那部科技電影是重要的字。

接著我們利用這兩個轉換方法轉換文字。

第四步: 放入Naive Bayes模型

將轉換過後的兩組資料,首先分別餵進Multinomial Naive Bayes model看看結果分別如何。

NaiveBayes Tfidf Score: 0.803030303030303
NaiveBayes Count Score: 0.7954545454545454

用Tfidf向量化文字放入模型的結果好一點點。

第五步: Confusion Matrix

透過Confusion Matrix 我們可以知道有幾則推文被歸類錯了。

如圖:

第六步: 換成線性SVM看看

LinearSVC Score: 0.841 又分得更精準了

第七步: 列出重要的字

列出一些模型中權重大的字,可以看到一堆法文,應該都是特魯多發的。

註: 一些自訂的function來自https://www.kaggle.com/mmmarchetti/identifying-who-is-tweeting/code

第八步: 模仿川普及特魯多推特,看看模型有沒有辦法正確分辨!

Predicted Trump tweet [‘Donald J. Trump’]
Predicted Trudeau tweet [‘Justin Trudeau’]

可!

結論:

這次雖然模型正確率高達84%,但這很有可能是在文字前處理時沒有剔除stop words,雖然可能會造成準確率下降,但是可以經由調整參數使模型配飾得更好。

參考資料:
DataCamp — Project: Who’s Tweeting? Trump or Trudeau? https://projects.datacamp.com/projects/467 created by Katharine Jarmul Founder, kjamistan

--

--

Sharko Shen
Data Science & LeetCode for Kindergarten

Thinking “Data Science for Beginners” too hard for you? Check out “Data Science for Kindergarten” !