1. 程式人生 > >3 機器學習入門——決策樹之天氣預報、鳶尾花

3 機器學習入門——決策樹之天氣預報、鳶尾花

前面我們簡單學習了線性迴歸、邏輯迴歸,不知道有沒有做一個總結,那就是什麼時候該用邏輯迴歸?

從結果來觀察,可以看到,線性迴歸的過程就是在找那個合適的方程,來儘量滿足你的每行資料。即Y=ax + bx^2 + …….

通過演算法來尋找合適的a、b、c。

一般來說,線性迴歸適用於最終結果和各屬性之間有數值上的關係,能通過一系列的組合,得出一個規律。當然,實際在應用中,我們一般不管什麼資料集,都先跑一遍邏輯(線性)迴歸就是了,它效能優異,至少我們可以將它的結果作為baseline。

在實際生活中,我們面對的當然不僅僅是由數字得出的,很多時候是通過決策得出。譬如判斷一朵花屬於哪個品種,我們會根據它的葉片形狀、顏色等一些屬於分類的屬性來進行判斷;還有去相親,可能會先根據對方的年齡、學歷、高富帥程度等做決策。

so,這些問題都促使了決策樹的誕生。決策樹是一個巨大的機器學習分支,裡面有很多著名的演算法如C4.5和最近一些在競賽中大放異彩的GDBT等,都屬於決策樹。

到底決策樹是什麼,我們直接上例項。

在weka安裝目錄裡有個data資料夾,裡面有一些weka從各處蒐集來一些比較知名的資料樣例。

拿weather.nominal.arff為例


這個資料集是根據外面的溫度、颳風與否等來決定是不是要出去play。

將這個資料匯入weka


我們先選擇Logistics邏輯迴歸來試一下這個資料集


可以看到在test options為Use training set時,也就是所有樣本作為訓練集時,邏輯迴歸正確率達到了100%。這種並不奇怪,當資料量很小時,任何演算法往往都能擬合的很好,給出一個並不通用的結果。

我們選擇Cross-validation,10次交叉。再試一下,這次邏輯迴歸的正確率達到了71%。

OK,我們來使用決策樹試試,先試試大名鼎鼎的C4.5分類器,在weka中對應J48。

在trees裡找到J48,同樣選擇10次摺疊,點選start。

可以看到正確率在50%。我們在模型上右鍵,選擇檢視這棵樹。



可以看到,這就是決策樹的本來面目。就像法庭上辯論時,對方律師問你問題,讓你回答是與不是。決策樹就是通過演算法,挑選一個最合適做根節點的屬性,然後開始往下依次生成子節點。通過樹來構建一個模型預測新的資料。

不過這個案例資料太少,導致決策樹表現不佳。當資料量變大時,這種型別的在決策樹下表現通常會優於線性方程。

當然對於這個案例,通過使用融合梯度提升後的J48,也能讓正確率達到70%多。

下面來看另一個數據集,鳶尾花,iris.arff,這個案例也非常知名,是UCI下載量最大的資料集,估計每個搞機器學習的helloworld階段都會用過這個資料集。

匯入資料,分別使用邏輯迴歸和J48來跑一下,發現兩個都是96%的正確率。



這個資料集經過多次嘗試,在各個演算法上表現比較類似,差距不大,最好的結果是在SVM(支援向量機)上,96.6667%。