一、什么是分類
分類,是數據建模領域的重要分支,你每天也都會接觸。
手機垃圾短信過濾,就是分類算法給短信打的標簽,比如0代表正常短信,1代表垃圾短信。
在醫學領域,根據影像檢查判斷腫瘤是良性還是惡性。在工業領域,根據設備工作特征做故障診斷。在材料領域,根據配方快速預測新材料的特性是否符合要求。
前面這些例子大多是二分類,即只有兩個標簽,更細的還有多分類。
比如電子郵件分為正常郵件、廣告郵件、垃圾郵件或釣魚郵件。貸款風險評估,分類為高風險中風險低風險。工廠的質量控制,分類為一級品、二級品以及廢品。
二、分類算法
分類算法的核心邏輯是找到數據中特征與標簽之間的映射關系。簡單來說,就是找到一個“函數”,根據輸入數據的特征,準確地判斷數據所屬的類別。
根據算法原理和實現方式,分類算法可以分為線性算法,非線性算法和集成學習算法。這三類算法分別適合不同的建模場景,訓練出的模型復雜度一般也越來越高。
針對每一大類,數據建模軟件DTEmpower也內置了多種算法。
比如線性算法里的邏輯回歸算法Logistic,它的優點是簡單高效計算成本低,且可解釋性強,比如你能通過模型看出某個特征的重要性。
但線性算法更適合特征與目標變量之間存在線性關系的場景。所謂線性關系,就是因變量y可以寫成y=ax1+bx2+cx3...這種形式。
非線性分類算法里的比較著名的KNN,K近鄰算法。它的優點是原理簡單且能處理非線性數據,對異常值不敏感。但缺點就是計算效率低,處理大數據時比較慢,因此也更適合數據量不大且數據集維度不高的情況。
集成學習算法里,RandomForest隨機森林算法很有代表性,它最顯著的優點是抗過擬合能力強。
所謂過擬合,指的是模型在訓練數據上表現非常好,精度很高。但遇到新數據,精度就崩了。
除了抗過擬合,隨機森林算法的魯棒性也很強。如果數據存在異常值,模型也不會有明顯的精度下降。
當然凡事都有兩面性。隨機森林算法的缺點之一就是模型訓練過程的計算量大,而且得到的模型是一個黑箱模型。
相比線性模型,黑箱模型的可解釋性差多了,你給它輸入,它給你輸出。這個結果的精度可能很高,但如果我問你它為什么輸出這個結果,你很難解釋清的。
下面我列出常見分類算法的優缺點以及適用場景,就不逐個介紹了。
之所以不逐個介紹,第一是我怕你睡著。
第二,即使你知道了每種算法的優缺點,當接觸一個新場景或者拿到一組新數據,你也還依然不知道用什么算法。
比如我給你一個數據集,你怎么會知道變量之間是線性還是非線性關系呢?
實際的算法選擇過程,都有一定的嘗試成分。從易到難,從簡到繁,最終在模型精度和計算量之間做權衡。
在實際操作時,我們推薦邏輯回歸和決策樹這兩個基線算法。它們操作簡單,易上手且性能尚可。當你不知道用什么算法時,就可以嘗試用基線算法。
如果基線算法不滿足要求,或者你想做更進一步的探索,可以再嘗試其它的進階算法。
比如集成學習算法里的Bagging算法,就可以作為首選的進階算法。這種算法操作簡單,且魯棒性高,在處理高維度數據時表現不錯。
三、分類模型可視化工具
你多次嘗試之后,關鍵的問題來了,如何判斷模型的好壞呢?
接下來介紹決策邊界、混淆矩陣和ROC 曲線三個可視化工具,它們構成了判斷模型精度的“黃金三角”。
第一個,決策邊界。
假設你有一堆手辦,共分為兩種,一種會打籃球,一種不會。現在你畫一條線,把它們分成了兩類。這條線,就是我們今天要講的決策邊界。
簡單來說,決策邊界就是分類模型用來區分不同類別數據的“分界線”。
第二個,混淆矩陣。
混淆矩陣其實是一個表格,展示了分類模型預測標簽和實際標簽之間的關系。
對于二分類,它就是一個2X2的表格,左上表示實際為正,預測也為正,預測對了,True Positive,簡稱TP。
右下表示實際為負,預測也為負數,也預測對了,True Negative, 簡稱TN。
那么另外兩個區域,就表示預測錯了,一個叫False Negative, FN。另一個叫False Positive, FP。
顯然,TP+TN通常越大越好。因此判定模型的好壞,也有一個定量指標叫準確率。另外還有精確率、召回率和F1分數這幾個指標,也都比較常用。
第三個,ROC曲線,全稱叫受試者工作特征曲線(Receiver Operating Characteristic Curve)。
ROC曲線所在坐標的橫軸叫假陽性率,也就是實際為負,但被預測為正的比例。縱軸是召回率,也就是實際為正,且被預測為正的比例。
下面說說這個曲線是如何生成的。
分類模型在做預測分類時,你覺得它對預測結果有百分百的信心嗎?顯然不會。
它實際是通過概率判斷的,比如計算發現某個樣本屬于A類的概率是70%,你如果設置閾值是50%,那么你就可以輸出結果判定這個樣本屬于A類。
當然,如果計算之后發現這個樣本屬于A類的概率只有40%,那你就能輸出結果,判定它不屬于A類。
所以,你設定的閾值不同,模型的表現也不同。
OK,下面做三件事。
第一,選擇一系列不同的閾值。
第二,對于每一個閾值,計算出當前的假陽性率和召回率。
第三,把這些點連起來,就得到了ROC曲線。
如果你不做數據建模,而是隨機猜測的,也就是分類正確的概率是50%,那么生成的ROC曲線就是從(0,0)到(1,1)的一條直線。
從ROC曲線的定義可知,這個曲線越靠近左上角,表示模型精度越高。所以ROC曲線也有個定量值,叫曲線下面積,簡稱AUC。顯然,曲線下的面積AUC越大,也表示曲線越靠近左上角。
介紹完三種工具,那么最終如何判斷呢?
通常情況下,你看混淆矩陣時,左上角和右下角的數越大越好。看ROC曲線時,曲線上方的面積越小越好。
為什么說通常情況下?因為分類模型好壞的判斷,必須要結合業務背景。
舉個例子,在地震預測時,我們希望盡可能預測到所有的地震,哪怕這些預測到的地震中只有少數真正發生了,這個時候我們就可以犧牲精確率。寧愿發出100 次警報但只對 10 次,也不希望預測了 10 次,但只有 8 次正確而漏掉2次,因為只要有 1 次地震沒預測到都會造成巨大的損失。這是一個 “寧可抓錯,不可放過” 的場景。
但另一個場景,垃圾郵件分類,我們雖然希望模型能夠找到所有的垃圾郵件,但一旦有一封正常郵件被分到了垃圾信箱里,你肯定很生氣。所以這時候寧可漏掉垃圾郵件,也不能把正常郵件分錯。這就是一個“寧可放過,不可抓錯” 的場景。
能體會出來吧?在不同的場合,我們在建模時需要根據實際情況,通過查看不同的參數指標來判斷分類模型質量。
四、分類建模案例
理論部分講解差不多了,下面做一個實際的數據建模分類案例。
工程背景是某種新材料的研制,這種材料由很多種配方組成,不同的組成對應不同的材料性能。
工廠經過多年的積累,已經有了大量數據。其中前83列是原材料,后面幾列是配方對應的材料性能。而我們關心的是最后一列,耐彎折性。1表示耐彎折性達標,0表示不達標。
我們數據建模想做的事,是得到一個分類模型。基于這個模型,你輸入一種新的配方,讓模型判斷配方組成的新材料的耐彎折性是否達標,省去做實驗測試的過程。
開始操作。啟動DTEmpower,新建工程選擇專業模式,之后在畫布上依次拖入數據讀取、變量剔除、空值處理、變量設定、數據分割節點,然后依次連線,表示數據傳遞。
數據讀取、變量剔除就不解釋了,字面意思很簡單。
空值處理的作用是刪除存在空值的數據行,而數據分割是將數據分為訓練集和測試集,默認按照3:1的比例分割。訓練集用來訓練模型,測試集用來測試模型精度。
再然后,拖入分類算法節點。這里我拖入極端隨機樹算法,節點配置保持默認。
注意,軟件默認是打開交叉驗證的,交叉驗證是數據建模領域的一個重要概念,也是DTEmpower軟件的底層能力。
交叉驗證核心思想是:將數據集分成若干份,輪流使用其中一份作為驗證集,其余的作為訓練集,最后對模型進行多次的訓練和評估,以檢驗模型的泛化能力。當然,打開交叉驗證之后,也會增加訓練時間。
最后再拖入模型對比節點,模型對比節點能給出分類算法的定量精度值。而計算計算精度值時,基于的數據就是數據分割節點分出來的測試集。
模型訓練結束后,單擊得到的分類模型,能看到模型信息,包括決策邊界、ROC曲線以及混淆矩陣。
決策邊界,能看出來有一條曲線,把界面分成了兩部分,能大概展示模型對訓練集的擬合程度。
混淆矩陣,可以看出來實際為0且預測為0的數據有26個。實際為1預測也為1的值有36個。
ROC曲線,它繪制了兩條曲線,分別是0和1的。同時也給出了AUC的值,巧了,都是0.86。這個表現還不錯,說明模型具有良好的區分能力。
這就是我們用隨機樹算法訓練得到的分類模型,你如果感興趣的話,可以嘗試用其它算法試試,看能不能得到精度更高的模型。
歡迎前往天洑官網下載軟件,免費試用30天,即下即用。