決策樹
決策樹(Decision Tree)是一種非參數的有監督學習方法,它能夠從一系列有特征和標簽的數據中總結出決策規則,並用樹狀圖的結構來呈現這些規則,以解決分類和回歸問題。
優點:
簡單易懂,容易解釋,可視化,適用性廣
缺點:
容易過擬合,
數據中的小變化會影響結果,不穩定,
每一個節點的選擇都是貪婪算法,不能保證全局最優解。
樹模型
決策樹:
從根節點開始一步步走到葉子節點(決策)
所有的數據最終都會落到葉子節點,既可以做分類也可以做回歸
樹的組成:
根節點:第一個選擇點
非葉子節點與分支:中間過程
葉子節點:最終的決策結果
核心問題
如何選出最佳節點和最佳分支?
決策樹剪枝策略
如何選出最佳節點和最佳分支?
每一步都選擇最好的節點分支
衡量標准-熵:
熵是表示隨機變量不確定性的度量,即事物的混亂程度。
H(X)=- ∑ pi * logpi, i=1,2, ... , n
熵值低,相對穩定。
p=0或p=1時,H(p)=0,沒有不確定性
p=0.5時,H(p)=1,不確定性最大
ID3:信息增益
特征屬性值多的信息增益大,不能處理特征屬性值連續的情況
C4.5:信息增益率,考慮自身熵
CART:使用了GINI系數作為衡量標准
決策樹剪枝策略
決策樹過擬合風險很大,理論上可以完全分得開數據
剪枝策略:
預剪枝:邊建立決策樹邊進行剪枝的操作,實用
控制樹的深度。 樣本數和節點數
葉子節點個數,葉子節點樣本數,信息增益量
后剪枝:完成決策樹后進行剪枝操作
通過一定的衡量標准
葉子節點越多,損失越大
sklearn中的決策樹
模塊sklearn.tree
tree.DecisionTreeClassifier |
分類樹 |
tree.DecisionTreeRegressor | 回歸樹 |
tree.export_graphviz | 將生成的決策樹導出為DOT格式,畫圖專用 |
tree.ExtraTreeClassifier | 高隨機版本的分類樹 |
tree.ExtraTreeRegressor | 高隨機版本的回歸樹 |

from sklearn import tree clf = tree.DecisionTreeClassifier() clf = clf.fit(X_train,y_train) result = clf.score(X_test,y_test)
重要參數
criterion:不純度的計算方法,效果基本相同
默認為“gini”,基尼系數
通常使用,維度大,噪音大時使用,
輸入“entropy”,使用信息熵
涉及對數,計算較慢,對於高維數據或者噪聲很多的數據容易過擬合。
random_state:用來設置分支中的隨機模式的參數,高維效果明顯
默認None,輸入任意整數
splitter:string,optional(default =“best”)
best:選擇最佳分割
random:隨機選擇拆分策略
max_depth : int or None, optional (default=None)
樹的最大深度
min_samples_split : int, float, optional (default=2)
拆分節點所需的最小樣本數
min_samples_leaf : int, float, optional (default=1)
拆分節點后的葉子節點的最小樣本數,滿足時才進行拆分。
min_weight_fraction_leaf : float, optional (default=0.)
max_features : int, float, string or None, optional (default=None)
考慮的特征數量,int,float,“auto”,“sqrt”,“log2”,None
min_impurity_decrease : float, optional (default=0.)
最小信息熵增益
重要屬性
feature_importances_
: array of shape = [n_features]
返回特征重要性。
max_features_ : int,
最大特征
n_features_ : int
fit執行時的特征數量
n_outputs_ : int
fit執行時的輸出數量
tree_ : Tree object
樹對象
重要方法
apply
(X[, check_input])
每個樣本在葉子節點的索引
decision_path
(X[, check_input])
樹中的決策路徑
fit
(X, y[, sample_weight, check_input, …])
predict
(X[, check_input])
預測類或回歸值
get_params
([deep]):
獲取參數
set_params
(**params)
設置參數
score
(X, y[, sample_weight])