1. 程式人生 > 其它 >對於sklearn上對於決策樹瞭解(有問題歡迎補充)。

對於sklearn上對於決策樹瞭解(有問題歡迎補充)。

技術標籤:機器學習

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提供了兩種選擇:
1)輸入”entropy“,使用資訊熵(Entropy)
2)輸入”gini“,使用基尼係數(Gini Impurity)
兩種演算法在這裡插入圖片描述
其中t代表給定的節點,i代表標籤的任意分類,p(i|t)代表標籤分類i在節點t上所佔的比例。注意,當使用資訊熵時,sklearn實際計算的是基於資訊熵的資訊增益(Information Gain),即父節點的資訊熵和子節點的資訊熵之差。

random_state:
相當於隨機數種子任意帶有隨機性的類或函式裡作為引數來控制隨機模式,隨機數給定了,得分也就固定了

splitter:
‘best’:優先選擇更重要的特徵進行分支(使用feature_importances_進行檢視)
‘random’: 分枝時隨機性更大,深度更能更大,資訊處理更多會降低訓練集擬合。

對於剪枝方面的引數:

CodeText
max_depth=None限制樹的最大深度,超過設定深度的樹枝全部剪掉
min_samples_leaf一個節點在分枝後的每個子節點都必須包含至少min_samples_leaf個訓練樣本,否則分枝就不會發生,或者,分枝會朝著滿足每個子節點都包含min_samples_leaf個樣本的方向去發生(分枝後)
min_samples_split一個節點必須要包含至少min_samples_split個訓練樣本,這個節點才允許被分枝,否則分枝就不會發生。(分枝前)
max_featuresmax_features限制分枝時考慮的特徵個數,超過限制個數的特徵都會被捨棄。
min_impurity_decrease限制資訊增益的大小,資訊增益小於設定數值的分枝不會發生

建立決策樹主要程式碼

clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=30)  
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) #返回預測的準確度
CodeText
fit(self, X, y, sample_weight=None, check_input=True, X_idx_sorted=None)根據給定的訓練集構建決策樹分類器,就是求得訓練集X的均值,方差,最大值,最小值這些訓練集X固有的屬性。可以理解為一個訓練過程
predict(self, X, check_input=True)predict返回每個測試樣本的分類/迴歸結果
score(self, X, y, sample_weight=None)根據給定的資料和標籤計算模型精度的平均值
apply(self, X, check_input=True)apply返回每個測試樣本所在的葉子節點的索引

後三個主要是對訓練後的模型進行一個檢視。

整理過程中可能有些不足或者有誤,歡迎大家指正或者補充