前面幾天都在講一些處理語料的技術跟概念,一直講到模型,今天終於要邁入模型這一階段~(雖然之後可能還是會講到一些語料處理的東西😳)
模型也是有分不同的類型,今天要跟大家介紹的是一種傳統機器模型 — 決策樹(Decision Tree)
顧名思義,它就像一棵「樹」,一層一層向下分支(所以其實有點像倒著的樹...? 或是像聖誕樹的樣子🌲)
每個節點(Node):代表一個判斷條件或是或是特徵(例如:郵件標題裡有沒有「免費」這個詞?)
每個分支(Branch):根據條件的不同答案,走向不同的路
每個葉子(Leaf Node):就是最終的分類或預測結果
這邊放一個示意圖:
舉例來說,今天我們要來預測一封信是不是垃圾郵件,
首先我們就會先建立郵件相關的特徵,這些特徵可能是:
這邊要提醒的是,我們餵給模型的資料是有正確答案的,因為要這樣,模型才能夠學習並做預測。
在建立完特徵之後,模型就會開始訓練。
訓練的過程其實就是:
根據資料特徵進行分割,找出最能把資料分成「垃圾郵件」和「正常郵件」的條件。
逐層往下分支,直到能把郵件分得比較清楚。
最後長出一棵決策樹,讓我們可以用來預測新郵件。
在 python 裡面我們主要是用 scikit-learn
這個套件來執行 Decision Tree
這邊不會帶各位實作,但是引入套件的程式碼大概會長這樣:
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
但是一定會想說,那要怎麼做預測呢?
一般來說,我們會先把大約 80% 的資料拿來訓練模型,剩下 20% 的資料拿來測試。
在訓練階段,模型會學習這些特徵與結果的關係。
在測試階段,模型會根據從未看過的資料做預測。
最後,我們就可以透過 準確率(Accuracy) 來檢驗模型的表現。
如果準確率很高,就代表這些特徵(例如:標題有沒有「免費」、寄件人是不是陌生人、內容有沒有連結、字數多少)確實對於判斷垃圾郵件有幫助;反之,如果準確率很低,就代表我們可能需要重新設計或增加其他特徵。