机器学习之决策树的原理及sklearn实现
1.概述
1.1 決策樹是如何工作的?
決策樹(Decision Tree)是一種非參數的有監督學習方法,它能夠從一系列有特征和標簽的數據中總結出決策規則,并用樹狀圖的結構來呈現這些規則,以解決分類和回歸問題。決策樹算法容易理解,適用各種數據,在解決各種問題時都有良好表現,尤其是以樹模型為核心的各種集成算法,在各個行業和領域都有廣泛的應用。
決策樹算法的本質是一種圖結構,我們只需要問一系列問題就可以對數據進行分類了。比如說,來看看下面這組數據集,這是一系列已知物種以及所屬類別的數據:
目標是,將動物們分為哺乳類和非哺乳類。那根據已經收集到的數據,決策樹算法為我們算出了下面的這棵決策樹:
假如我們現在發現了一種新物種Python,它是冷血動物,體表帶鱗片,并且不是胎生,我們就可以通過這棵決策樹來判斷它的所屬類別。
決策樹算法的核心是要解決兩個問題:
1)如何從數據表中找出最佳節點和最佳分枝?
2)如何讓決策樹停止生長,防止過擬合?
1.2 sklearn中的決策樹
sklearn中決策樹的類都包含在tree這個模塊下,這個模塊一共包括五個類:
主要講解:DecisionTreeClassifier
sklearn的建模過程:
對應的代碼如下所示:
2.DecisionTreeClassifier
class sklearn.tree.DecisionTreeClassifier (criterion=’gini’, splitter=’best’, max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,random_state=None, max_leaf_nodes=None,min_impurity_decrease=0.0, min_impurity_split=None,class_weight=None, presort=False )重要參數:criterion
為了要將表格轉化為一棵樹,決策樹需要找出最佳節點和最佳的分枝方法,對分類樹來說,衡量這個“最佳”的指標叫做“不純度”。通常來說,不純度越低,決策樹對訓練集的擬合越好。現在使用的決策樹算法在分枝方法上的核心大多是圍繞在對某個不純度相關指標的最優化上。
不純度基于節點來計算,樹中的每個節點都會有一個不純度,并且子節點的不純度一定是低于父節點的,也就是說,在同一棵決策樹上,葉子節點的不純度一定是最低的。
Criterion這個參數正是用來決定不純度的計算方法的。sklearn提供了兩種選擇:
利用sklearn實現決策樹:
1.導入所需要的算法庫和模塊
2.探索數據
#載入數據 wine = load_wine() x = pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1) wine.feature_names ['alcohol','malic_acid','ash','alcalinity_of_ash','magnesium','total_phenols','flavanoids','nonflavanoid_phenols','proanthocyanins','color_intensity','hue','od280/od315_of_diluted_wines','proline']3.劃分訓練集和測試集
#. 分訓練集和測試集 x_train,x_test,y_train,y_test = train_test_split(wine.data,wine.target,test_size=0.3) #建立模型 clf = tree.DecisionTreeClassifier(criterion="entropy") clf = clf.fit(x_train,y_train) score = clf.score(x_test,y_test)經過測試,模型的準確率如下所示:
0.96296296296296294.查看重要的特征以及對應的權重
clf.feature_importances_ [*zip(wine.feature_names,clf.feature_importances_)] [('alcohol', 0.018448661796409117),('malic_acid', 0.0),('ash', 0.0),('alcalinity_of_ash', 0.0),('magnesium', 0.0),('total_phenols', 0.0),('flavanoids', 0.43259590886482413),('nonflavanoid_phenols', 0.0),('proanthocyanins', 0.0),('color_intensity', 0.20507049195022564),('hue', 0.016757599408700523),('od280/od315_of_diluted_wines', 0.0),('proline', 0.32712733797984056)]5.設置好criterion=“entropy”,random_state=30,splitter=“random”,改變max_depth,觀察準確率的變化
import matplotlib.pyplot as plt test = [] for i in range(10):clf = tree.DecisionTreeClassifier(max_depth=i+1,criterion="entropy",random_state=30,splitter="random")clf = clf.fit(x_train, y_train)score = clf.score(x_test, y_test)test.append(score) plt.plot(range(1,11),test,color="red",label="max_depth") plt.legend() plt.show()
關于決策樹剪枝的相關知識,參考如下文檔:
鏈接:https://pan.baidu.com/s/1kL8S5r55ozqyZgdV6U6fKg
提取碼:1b3r
努力加油a啊
總結
以上是生活随笔為你收集整理的机器学习之决策树的原理及sklearn实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习之基于CNN实现汉字版手写数字识
- 下一篇: 七个合法学习黑客技术的网站,让你从萌新成