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