機器學習-決策樹

決策樹算法是機器學習中十分重要的算法,它的思想很簡單,模擬了人的決策思想,就是根據一些條件作一些決策。好比,咱們決策今天是否要去逛街,要看天氣好很差、心情好很差、有沒有妹子陪等等。html

常見的決策樹有ID三、C4.5和CART決策樹,主要區別是在選擇相關因數的算法不一樣,前二者和信息增益有關、後一種是與基尼指數有關。具體關於這幾種決策樹的詳細信息就不說明了,你們能夠網上看看,我這裏主要是以代碼實現爲主以及一些代碼的說明。算法

此次代碼仍是使用sklearn的的數據吧,以iris花爲列子。機器學習

#第三天決策樹
from sklearn import tree
from sklearn.datasets import load_iris
from sklearn.metrics import classification_report,confusion_matrix
from sklearn.model_selection import train_test_split

#個人例子主要是以代碼實現和對其中的說明爲主
#若是想了解具體的算法原理網上有不少,我也不想複製粘貼了
#這裏仍是用iris花做爲例子
iris_data = load_iris()['data']
iris_label = load_iris()['target']

#將數據分爲訓練集和測試集合,test_size表示測試集鎖佔的比例
#獲得的四個值分別是訓練集的特徵、測試集的特徵、訓練集的label、測試集的label
train_x,test_x,train_y,test_y = train_test_split(iris_data,iris_label,test_size=0.3)

#ID3和C4.5就是基於信息增益和信息增益率的,cart決策樹則是基於基尼指數的
#criterion默認爲gini指數,咱們這裏用entropy表示用信息增益
clf = tree.DecisionTreeClassifier(criterion='entropy')

#訓練和預測
clf.fit(train_x,train_y)
predict_y = clf.predict(test_x)

#預測結果打印,上一篇邏輯迴歸和線性迴歸中有解釋classification_report的結果說明
print(classification_report(test_y,predict_y))

預測結果分析以下:性能

            precision    recall    f1-score   support

0              1.00      1.00      1.00        18
1              0.93      0.93      0.93        15
2              0.92      0.92      0.92        12

avg / total    0.96      0.96      0.96        45

機器學習-邏輯迴歸和線性迴歸中我已經說明過這個結果的含義了。學習

這四列分別表示準確率、召回率、F1分數以及與數量,三行分別是每一個一個類別的預測數據。測試

以前還些了一篇ID3決策樹算法,主要講了一下原理而且用matlab實現了一下算法。spa

最後再說一下決策樹緩解過擬合的主要方法,預剪枝後剪枝code

預剪枝:在對節點劃分前進行處理,判斷劃分先後精度是否有提升,若沒有提升就進行剪枝。預剪枝使得決策樹不少分支沒有展開,不只有效的下降了過擬合的風險,還顯著的減小了訓練時間。可是預剪枝又過於貪心了,一些節點展開可能沒有對精度提升,可是展開的節點下級再分支頗有可能會提高精度,而預剪枝則所有否認了這種可能性,帶來了欠擬合的風險。htm

後剪枝:後剪枝是在決策樹生成以後,自底向上對非葉節點處理,它的好處就是比預剪枝保留了更多有用的分支,通常狀況欠擬合的風險比預剪枝小,泛化性能也常優於預剪枝。可是後剪枝之中處理模式訓練開銷比預剪枝要大不少。blog

相關文章
相關標籤/搜索