生活随笔
收集整理的這篇文章主要介紹了
决策树算法python实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
決策樹算法Python實現
- Python決策樹實現
- 一、sklearn實現決策樹分類
- 1.1 導入sklean中的tree模塊
- 1.2 使用sklean的基本流程
- 1.3 DecisionTreeClassifier()的參數解釋
- 1.4 剪枝操作
- 1.5繪制決策樹
Python決策樹實現
一、sklearn實現決策樹分類
1.1 導入sklean中的tree模塊
from sklean
import tree
模塊解釋
| tree.DecisionTreeClassifier | 分類樹 |
| tree.DecisionTreeRegressor | 回歸樹 |
| tree.export_graphviz | 將生成的決策樹導出為DOT模式,畫圖專用 |
| tree.ExtraTreeClassifier | 高隨機版本的分類樹 |
| tree.ExtraTreeRegressor | 高隨機版本的回歸樹 |
1.2 使用sklean的基本流程
實例化模型對象
clf
= tree
.DecisionTreeClassifier
()
通過模型接口訓練模型
clf
= clf
.fit
(X_train
,y_train
)
通過測試集對模型評分(0-1)
Test_score
= clf
,score
(X_test
,y_test
)
1.3 DecisionTreeClassifier()的參數解釋
clf
= tree
.DecisionTreeClassifier
(criterion
='entropy/gini',random_state
= None,splitter
='best/random')
criterion
criterion這個參數正是用來決定不純度的計算方法的。skleran提供了兩種選擇。
輸入"entropy",使用信息熵。
輸入“gini”,使用基尼系數。
對于高維數據或者噪音很多的數據,信息熵很容易過擬合,基尼系數在這種情況下效果往往會更好。
random_state
random_state用來設置分支中的隨機模式的參數,默認為None,在高維度時隨機性會表示的更加明顯。
splitter
splitter也是用來控制決策樹中的隨機選項的,有兩種輸入值。
輸入“best”,決策樹在分支時雖然隨機,但是還是會優先選擇更加重要的特征進行分支;
輸入"random",決策樹會在分支時更加隨機,樹會因為含有更多的不必信息而更深更大,可能會導致過擬合問題。
當你預測到你的模型可能會過擬合,用這兩個參數可以幫助你降低樹建成之后過擬合的可能性。當然,樹一旦建成,我們依然是使用剪枝參數來防止過擬合。
1.4 剪枝操作
max_depth(預剪枝)
限制樹的最大深度,超過設定深度的樹枝全部剪掉
min_samples_leaf
一個節點在分支后的每個子節點都必須包含至少min_samples_leaf個訓練樣本,否則分支就不會發生,或者,分支會朝著滿足每個子節點都包含min_samples_leaf個樣本的方向去發生。
min_samples_split
一個節點必須要包含至少min_samples_split個訓練樣本,這個節點才允許被分支,否則分支就不會發生。一般搭配max_depth使用,這個參數的數量設置的大小會引起過擬合,設置的太大會阻止模型學習數據。對于類別不多的分類問題,=1通常就是最佳選擇。一般來說,建立從=5開始使用。如果葉節點中含有的樣本量變化很大,建立輸入浮點數作為樣本量的百分比來使用。同時,這個參數可以保證每個葉子的最小尺寸,可以在回歸問題中避免低方差,過擬合的葉子節點出現。
max_features
限制分枝時考慮的特征個數,超過限制個數的特征都會被舍棄,和max_depth相似
min_impurity_decreases
限制信息增益的大小,信息增益小于設定數值的分枝不會發生。
確認最優的剪枝參數
我們已經訓練好的決策樹模型clfclfclf,確定超參數的曲線來進行判斷,超參數的學習曲線,是一條以超參數的取值為橫坐標,模型的度量指標作為縱坐標的曲線,它是用來衡量不同超參數取值下模型的表現的線,我們的模型度量指標就是score。
from sklearn
.tree
import DecisionTreeClassifier
import matplotlib
.pyplot
as plt
clf
= clf
.fit
(X_trainer
, Y_trainer
)
result
= clf
.score
(X_test
,Y_test
)
print("模型在測試集上進行評分:\n",result
)
predict_y
= clf
.predict
(X_test
)
print("對測試集樣本的預測結果:\n", predict_y
)
predict_y1
= clf
.predict_proba
(X_test
)
print("預測樣本為某個標簽的概率:\n", predict_y1
)
test
= []
for i
in range(10):clf
= DecisionTreeClassifier
(max_depth
=i
+1,criterion
="entropy",random_state
=30,splitter
="random")clf
= clf
.fit
(X_trainer
, Y_trainer
)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
()
score曲線可視化結果:
1.5繪制決策樹
環境配置
官網下載graphviz安裝包進行本地安裝;
鏈接: Graphviz官網
記住安裝位置,比如C:\Program Files\Graphviz
配置環境變量:需要分別配置用戶環境變量與系統環境變量
用戶環境變量配置:找到PATH環境變量;新建輸入C:\Program Files\Graphviz\bin(要與安裝目錄一致);點擊確定。
系統環境變量:找到PATH環境變量;新建C:\Program Files\Graphviz\bin\dot.exe(要與安裝目錄一致);點擊確定。
python環境配置:Win+R+cmd進入終端輸入pip install graphviz即可安裝
注意:環境配置結束后,可能需要重啟編譯軟件生效
導入模塊
from sklearn
.datasets
import load_iris
from sklearn
import model_selection
import graphviz
from sklearn
import tree
加載數據
dataSet
= load_iris
()
X
= dataSet
.data
y
= dataSet
.target
feature_names
= dataSet
.feature_names
target_names
= dataSet
.target_names
創建決策樹模型
X_trainer
, X_test
, Y_trainer
, Y_test
= model_selection
.train_test_split
(X
, y
, test_size
=0.3)
clf
= tree
.DecisionTreeClassifier
(criterion
= 'entropy')
clf_tree
= clf
.fit
(X_trainer
, Y_trainer
)
score
= clf_tree
.score
(X_test
,Y_test
)
print("模型在測試集上進行評分:\n",score
)
模型預測
predict_y
= clf
.predict
(X_test
)
print("對測試集樣本的預測結果:\n", predict_y
)
predict_y1
= clf
.predict_proba
(X_test
)
print("預測樣本為某個標簽的概率:\n", predict_y1
)
使用grapviz繪制決策樹
clf_dot
= tree
.export_graphviz
(clf_tree
,out_file
= None,feature_names
= feature_names
,class_names
= target_names
,filled
= True,rounded
= True)
graph
= graphviz
.Source
(clf_dot
,filename
="iris_decisionTree",format="png")
graph
.view
()
print("\n特征重要程度為:")
info
= [*zip(feature_names
, clf
.feature_importances_
)]
for cell
in info
:print(cell
)
Iris數據集決策樹分類結果
模型在測試集上進行評分:
0.8888888888888888特征重要程度為:
('sepal length (cm)', 0.0)
('sepal width (cm)', 0.012044591855253375)
('petal length (cm)', 0.0)
('petal width (cm)', 0.9879554081447467)
根據測試評分進行max_depth調整
clf
= tree
.DecisionTreeClassifier
(criterion
= 'entropy',max_depth
=3)
調整結果為:
當前學習記錄到此結束,后續根據學習繼續擴展更新。
總結
以上是生活随笔為你收集整理的决策树算法python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。