sklearn決策樹算法總結

決策樹算法

理論部分可以參考西瓜書,本文主要總結一下決策樹算法在sklearn中的一些基本用法。

sklearn.tree

使用決策樹的流程

from sklearn import tree             
clf = tree.DecisionTreeClassifier()    #實例化
clf.fit(x_train,y_train)               #訓練模型
result = clf.score(x_test,y_test)      #測試

sklearn中的決策樹算法都包含在tree這個模塊中,使用時導入即可。

from skearn import tree

sklearn中包含了五個模塊

Column 1 Column 2
tree.DecisionTreeClassifier 分類樹
tree.DecisionTreeRegressor 迴歸樹
tree.export_graphviz 將生成的樹導出爲DOT格式
tree.ExtraTreeClassifier 高隨機版本的分類樹
tree.ExtraTreeClassifier 高隨機版本的迴歸樹

1.tree.DecisionTreeClassifier

tree.DecisionTreeClassifier官網介紹
在這裏插入圖片描述
DecisionTreeClassifier的參數很多,其中比較重要的有以下幾個:

  • criterion
  • splitter & random_state
  • max_depth
  • min_samples_split & min_samples_leaf
  • max_features & min_impurity_decrease
  • class_weight & min_weight_fraction_leaf

下邊分別介紹這幾個參數的用法

1.1 criterion

在構建決策樹的時候,我們往往希望得到一棵最佳的樹,而這個最佳的衡量指標通常指不純度。一般來說,不純度越低,決策樹對訓練數據擬合的越好。
不純度有兩種計算方法:信息熵Entropy和Gini指數
entropy(t)=i=0nPiln(Pi)Gini(t)=1i=0nPi2 entropy(t)=-\sum_{i=0}^{n}P_iln(P_i) \\ Gini(t)=1-\sum_{i=0}^{n}P_i^2
criterion參數是用來決定計算不純度的方法,可以輸入‘entropy’或‘gini’,默認爲Gini係數。
應該注意的是,當參數選擇‘entropy’時,實際上sklearn計算的是該信息熵的信息增益,即父節點與這個節點信息熵的差值。
與Gini係數相比,信息熵對不純度更加敏感,在高維度數據或者噪音較多的數據中,選擇信息熵造成過擬合的可能性更大;在數據量較少,模型欠擬合的情況下,應該優先選擇信息熵。

1.2 splitter & random_state

splitter是決策樹的節點在進行分枝時選擇特徵的方式,有‘random’和‘best’兩種方式。‘best’代表決策樹的節點在分枝的時候優先選擇更加重要的特徵;‘random’會在選擇特徵的時候更加隨機,樹因此會因爲加入了不必要的特徵而變得更深更大,可以一定程度上防止過擬合現象的發生。
random_state用來設置分枝時隨機模式的參數,默認爲None。高維度時隨機性會表現得更明顯,低維度的數據隨機性幾乎不會出現。輸入一個整數時會生成同一棵樹。
這兩個參數都可以調節模型的過擬合情況。

1.3 剪枝參數

  • max_depth

    限制樹的最大高度,超過的節點將被全部剪掉,建議從3開始設定,根據擬合效果繼續設置高度。
  • min_samples_leaf

    一個節點在分枝後每個子節點至少包含min_samples_leaf個樣本,否則分枝不會發生,或者,分枝會朝着每個樣本都含有min_samples_leaf個樣本去分枝。一般從5開始,如果樣本包含的數量變化較大,可以輸入浮點數表示樣本量的百分比來使用。
  • min_samples_split

    一個節點必須包含min_samples_split個樣本,否則這個節點的分枝不會發生
  • max_features

    限制分枝時節點的特徵個數,超過數量的特徵將會被捨棄。但是在不知道模型的特徵重要性的情況下,使用這種方法可能會導致模型的學習力不夠。如果希望將高維的數據進行降維,建議使用PCA等降維方法。
  • min_impurity_decrease

    限制節點的信息增益,如果節點的信息增益小於設定,分枝不會發生。

1.4 目標權重參數

  • class_weight

    使樣本標籤平衡的參數。樣本不平衡指的是:標籤的一類佔有很大的比例,比如說飛機失事的概率爲1%(即失事:不失事=1:99),如果一個模型把全部的結果預測爲飛機不失事,那麼正確率也有99%,但是這種模型顯而易見並不是一個好的模型。所以可以對某些標籤賦予更大的權重,讓模型更偏向於少數類。該模型的參數默認爲None,即自動給予模型中所有標籤相同的權重。
  • min_weight_fraction_leaf

    在設置了class_weight以後,如果需要剪枝,就需要搭配min_weight_fraction_leaf這個基於權重的剪枝參數來使用。

1.5 重要接口

分類決策樹有四個重要的接口,分別爲fit,score,predict,apply,下邊分別對這些參數進行簡單的介紹。

  • fit

    用來對模型進行擬合,輸入訓練數據,得到訓練好的實例化模型
    clf = tree.DecisionTreeClassifier()
    clf.fit(x_train,y_train)
    
  • score

    對模型的擬合效果進行評分,輸入測試數據,得到模型的評分
    clf = tree.DecisionTreeClassifier()
    clf.fit(x_train,y_train)
    clf.score(x_test,y_test)
    
  • predict

    使用訓練好的模型,對測試數據進行預測,輸入測試數據,得到每個測試數據對應的結果
     clf = tree.DecisionTreeClassifier()
     clf.fit(x_train,y_train)
     clf.predict(x_test)
    
  • apply

    返回每個測試樣本所在的葉子節點的索引
      clf = tree.DecisionTreeClassifier()
      clf.fit(x_train,y_train)
      clf.apply(x_test)
    

2. tree.DecisionTreeRegressor

DecisionTreeRegressor官網
在這裏插入圖片描述
迴歸樹和分類樹的大部分參數、接口的用法相同,需要注意的是,迴歸樹沒有標籤分別是否均衡的問題,因此沒有class_weight這個參數。

重要參數

  • criterion

    迴歸樹衡量分枝質量的指標,可以有‘mse’,‘friedman_mse’,'mae’三種選擇。
    1)mse
    用父節點和子節點的均方誤差來作爲衡量節點分支的標準
    2)friedman_mse
    使用friedman針對潛在分支問題的改進後的均方誤差
    3)mae
    用父節點和子節點的絕對平均誤差作爲衡量節點分支的標準
  • score

    迴歸樹的score接口返回的是R平方
    R2=1uvu=i=1N(fiyi)2v=i=1N(yiy)2 R^2 = 1-\frac{u}{v}\\ u = \sum_{i=1}^{N}(f_i - y_i)^2\\v = \sum_{i=1}^{N}(y_i - y)^2
    其中,fif_i是迴歸得到的值,yiy_i是真實值,yy是真實值的平均值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章