sklearn機器學習 決策樹

2021-10-07 07:58:16 字數 3199 閱讀 5979

tree.decisiontreeclassifier 分類樹

tree.decisiontreeregressor 回歸樹

tree.export_graphviz 將生成的決策樹匯出為dot格式,畫圖專用

from sklearn import tree                           #匯入需要的模組

clf = tree.decisiontreeclassifier(

)#例項化

clf = clf.fit(x_train,y_train)

#用訓練集資料訓練模型

result = clf.score(x_test,y_test)

#匯入測試集,從介面中呼叫需要的資訊

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

)

1)輸入」entropy「,使用資訊熵(entropy)

2)輸入」gini「,使用基尼係數(gini impurity)

通常就使用基尼係數

資料維度很大,噪音很大時使用基尼係數

維度低,資料比較清晰的時候,資訊熵和基尼係數沒區別

當決策樹的擬合程度不夠的時候,使用資訊熵

兩個都試試,不好就換另外乙個

用來設定分枝中的隨機模式的引數,預設none也是用來控制決策樹中的隨機選項的,有兩種輸入值

輸入」best",決策樹在分枝時雖然隨機,但是還是會優先選擇更重要的特徵進行分枝(重要性可以通過屬性feature_importances_檢視),輸入「random",決策樹在分枝時會更加隨機,樹會因為含有更多的不必要資訊而更深更大,並因這些不必要資訊而降低對訓練集的擬合。這也是防止過擬合的一種方式。當你**到你的模型會過擬合,用這兩個引數來幫助你降低樹建成之後過擬合的可能性。當然,樹一旦建成,我們依然是使用剪枝引數來防止過擬合

限制樹的最大深度,超過設定深度的樹枝全部剪掉,建議從=3開始嘗試乙個節點在分枝後的每個子節點都必須包含至少min_samples_leaf個訓練樣本,否則分枝就不會發生

一般搭配max_depth使用,在回歸樹中有神奇的效果,可以讓模型變得更加平滑。這個引數的數量設定得太小會引起過擬合,設定得太大就會阻止模型學習資料。一般來說,建議從=5開始使用。如果葉節點中含有的樣本量變化很大,建議輸入浮點數作為樣本量的百分比來使用。同時,這個引數可以保證每個葉子的最小尺寸,可以在回歸問題中避免低方差,過擬合的葉子節點出現。對於類別不多的分類問題,=1通常就是最佳選擇

乙個節點必須要包含至少min_samples_split個訓練樣本,這個節點才允許被分枝,否則分枝就不會發生限制分枝時考慮的特徵個數,超過限制個數的特徵都會被捨棄。

max_features是用來限制高維度資料的過擬合的剪枝引數,但其方法比較暴力,是直接限制可以使用的特徵數量

而強行使決策樹停下的引數,在不知道決策樹中的各個特徵的重要性的情況下,強行設定這個引數可能會導致模型

學習不足。如果希望通過降維的方式防止過擬合,建議使用pca,ica或者特徵選擇模組中的降維演算法。

限制資訊增益的大小,資訊增益小於設定數值的分枝不會發生對樣本標籤進行一定的均衡,給少量的標籤更多的權重,讓模型更偏向少數類,向捕獲少數類的方向建模。該引數預設none,此模式表示自動給與資料集中的所有標籤相同的權重。所有介面中要求輸入x_train和x_test的部分,輸入的特徵矩陣必須至少是乙個二維矩陣。

sklearn不接受任何一維矩陣作為特徵矩陣被輸入。如果你的資料的確只有乙個特徵,那必須用reshape(-1,1)來給

矩陣增維;

兩個隨機性相關的引數(random_state,splitter)

五個剪枝引數(max_depth,min_samples_split,min_samples_leaf,max_feature,min_impurity_decrease)

乙個屬性:feature_importances_

class

sklearn

.tree.decisiontreeregressor (criterion=』mse』, 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

, presort=

false

)

幾乎所有引數,屬性及介面都和分類樹一模一樣。需要注意的是,在回歸樹種,沒有標籤分布是否均衡的問題,因此沒有class_weight這樣的引數

1)輸入"mse"使用均方誤差mean squared error(mse),父節點和葉子節點之間的均方誤差的差額將被用來作為特徵選擇的標準,這種方法通過使用葉子節點的均值來最小化l2損失

2)輸入「friedman_mse」使用費爾德曼均方誤差,這種指標使用弗里德曼針對潛在分枝中的問題改進後的均方誤差

sklearn 決策樹學習筆記

遍歷眾多特徵,計算每一次分類後的資訊增益,選取分類後熵值最小的特徵作為當前分類節點 防止過擬合,當每個資料都是乙個葉結點的時候,分類正確率是100 但是樹過於龐大。from sklearn.datasets.california housing import fetch california hou...

機器學習實踐(十) sklearn之決策樹

公式h x i 1np xi i xi i 1n p xi log 2p x i h x sum p x i i x i sum p x i log 2p x i h x i 1 n p x i i xi i 1 n p x i l og2 p xi 來自 數學之美 示例助解 舉乙個的例子 對遊戲活...

SKlearn之決策樹

決策樹是一種非引數的監督學習方法。模組 sklearn.tree sklearn建模的步驟 1 選擇並建立模型 例 clf tree.decisiontreeclassifier 2 提供資料訓練模型 例 clf clf.fit x train,y train 3 獲取需要的資訊 例 result ...