Lesson 8.3Lesson 8.4 ID3、C4.5决策树的建模流程CART回归树的建模流程与sklearn参数详解
Lesson 8.3 ID3、C4.5決策樹的建模流程
ID3和C4.5作為的經典決策樹算法,盡管無法通過sklearn來進行建模,但其基本原理仍然值得討論與學習。接下來我們詳細介紹關于ID3和C4.5這兩種決策樹模型的建模基本思路和原理。ID3和C4.5的基本建模流程和CART樹是類似的,也是根據純度評估指標選取最佳的數據集劃分方式,只是不過ID3和C4.5是以信息熵為評估指標,而數據集的離散特征劃分方式也是一次展開一列,而不是尋找切點進行切分。我們先從ID3的基本原理開始介紹,隨后討論C4.5在ID3基礎上的改善措施。
import numpy as np from ML_basic_function import *一、ID3決策樹的基本建模流程
ID3是一個只能圍繞離散型變量進行分類問題建模的決策樹模型,即ID3無法處理連續型特征、也無法處理回歸問題,如果帶入訓練數據有連續型變量,則首先需要對其進行離散化處理,也就是連續變量分箱。例如如下個人消費數據,各特征都是離散型變量,能夠看出,其中age和income兩列就是連續型變量分箱之后的結果,例如age列就是以30、40為界進行連續變量分箱。當然,除了如下表示外,我們還可以將分箱之后的結果直接賦予一個離散的值,如1、2、3等。
更多關于連續變量的離散化的方法將在特征工程部分進行介紹。
ID3的生長過程其實和CART樹基本一致,其目標都是盡可能降低數據集的不純度,其生長的過程也就是數據集不斷劃分的過程。只不過ID3的數據集劃分過程(規律提取過程)和CART樹有所不同,CART樹是在所有特征中尋找切分點、然后再從中挑選出能夠最大程度降低數據集不純度的節分方式,換而言之就是CART樹是按照某切分點來展開,而ID3則是按照列來展開,即根據某列的不同取值來對數據集進行劃分。例如根據上述數據集中的age列的不同取值來對原始數據集進行劃分,則劃分結果如下:
同樣,我們可以計算在以age的不同取值為劃分規則、對數據集進行劃分后數據集整體不純度下降結果,ID3中采用信息熵作為評估指標,具體計算過程如下:
首先計算父節點的信息熵
# 父節點A的信息熵 ent_A = -5/14 * np.log2(5/14) - 9/14 * np.log2(9/14) ent_A #0.9402859586706311然后計算每個子節點的信息熵
# 子節點B的信息熵 ent_B1 = entropy(2/5) ent_B2 = entropy(2/5) ent_B3 = 0 ent_B1, ent_B2, ent_B3 #(0.9709505944546686, 0.9709505944546686, 0)同樣,子節點整體信息熵就是每個子節點的信息熵加權求和計算得出,其權重就是各子節點數據集數量占父節點總數據量的比例:
ent_B = ent_B1 * 5/14 + ent_B2 * 5/14 + ent_B3 * 4/14 ent_B #0.6935361388961919然后即可算出按照如此規則進行數據集劃分,最終能夠減少的不純度數值:
# 不純度下降結果 ent_A - ent_B #0.24674981977443922而該結果也被稱為根據age列進行數據集劃分后的信息增益(information gain),上述結果可寫成Gain(age) = 0.247
當然,至此我們只計算了按照age列的不同取值來進行數據集劃分后數據集不純度下降結果,而按照age列進行展開只能算是樹的第一步生長中的一個備選劃分規則,此外我們還需要測試按照income、student或者credit_rating列展開后數據集不純度下降情況,具體計算過程和age列展開后的計算過程類似,此處直接給出結果,Gain(income)=0.026、Gain(student)=0.151、Gain(credit_rating)=0.048。很明顯,按照age列展開能夠更有效的降低數據集的不純度,因此樹的第一層生長就是按照age列的不同取值對數據集進行劃分。
接下來需要繼續進行迭代,通過觀察我們不難發現,對于數據集B1來說來說,按照student這一列來進行展開,能夠讓子節點的信息熵歸零,而數據集B2按照如果按照credit_rating來展開,也同樣可以將子節點的標簽純度提高至100%。因此該模型最終樹的生長形態如下:
至此,我們就完成了ID3決策樹的建模全流程,具體模型結果解讀和CART樹完全一樣,此處不做贅述。接下來簡單對比ID3和CART樹之間的差異:首先,由于ID3是按照列來提取規則、每次展開一列,因此每一步生長會有幾個分支,其實完全由當前列有幾個分類水平決定,而CART樹只能進行二叉樹的生長;其次,由于ID3每次展開一列,因此建模過程中對“列的消耗”非常快,數據集中特征個數就決定了樹的最大深度,相比之下CART樹的備選規則就要多的多,這也使得CART樹能夠進行更加精細的規則提取;當然,盡管CART樹和ID3存在著基本理論層面的差異,但有的時候也能通過CART樹的方法來挖掘出和ID3決策樹相同的規律,例如ID3中按照age列一層展開所提取出的三個分類規則,也可以在CART樹中通過兩層樹來實現,例如第一層按照是否是<=30來進行劃分、第二層圍繞不滿足第一層條件的數據集進一步根據是否>40來進行劃分。
此外,需要注意的是,正因為ID3是按照列來進行展開,因此只能處理特征都是離散變量的數據集。另外,根據ID3的建模規則我們不難發現,ID3樹在實際生長過程中會更傾向于挑選取值較多的分類變量展開(分類類數多),但如此一來便更加容易造成模型過擬合,而遺憾的是ID3并沒有任何防止過擬合的措施。而這些ID3的缺陷,則正是C4.5算法的改進方向。接下來我們繼續討論關于C4.5決策樹的建模規則。
當然,對于ID3來說,規則是和分類變量的取值一一綁定的
二、C4.5決策樹的基本建模流程
作為ID3的改進版算法,C4.5在ID3的基礎上進行了三個方面的優化,首先在衡量不純度降低的數值計算過程中引入信息值(information value,也被稱為劃分信息度、分支度等)概念來修正信息熵的計算結果,以抑制ID3更傾向于尋找分類水平較多的列來展開的情況,從而間接抑制模型過擬合傾向;其二則是新增了連續變量的處理方法,也就是CART樹中尋找相鄰取值的中間值作為切分點的方法(C4.5針對離散變量依然是一次展開一列,連續變量采用尋找相鄰取值的中間值作為切分點的方法);其三是加入了決策樹的剪枝流程,使得模型泛化能力能夠得到進一步提升。但需要注意的是,盡管有如此改進,但C4.5仍然只能解決分類問題,其本質仍然還是一種分類樹。接下來我們詳細討論C4.5的具體改進策略。
- 信息值(information value)
C4.5中信息值(以下簡稱IV值)是一個用于衡量數據集在劃分時分支個數的指標,如果劃分時分支越多,IV值就越高。具體IV值的計算公式如下:
InformationValue=?∑i=1KP(vi)log2P(vi)Information\ Value = -\sum^K_{i=1}P(v_i)log_2P(v_i) Information?Value=?i=1∑K?P(vi?)log2?P(vi?)
IV值計算公式和信息熵的計算公式基本一致,只是具體計算的比例不再是各類樣本所占比例,而是各劃分后子節點的數據所占比例,或者說信息熵是計算標簽不同取值的混亂程度,而IV值就是計算特征不同取值的混亂程度
其中K表示某次劃分是總共分支個數,viv_ivi?表示劃分后的某樣本,P(vi)P(v_i)P(vi?)表示該樣本數量占父節點數據量的比例。對于如下三種數據集劃分情況,簡單計算IV值:
# 父節點按照50%-50%進行劃分 - (1/2 * np.log2(1/2) + 1/2 * np.log2(1/2)) #1.0 # 父節點按照1/4-1/2-1/4進行劃分 - (1/4 * np.log2(1/4) + 1/2 * np.log2(1/2)+ 1/4 * np.log2(1/4)) #1.5 # 父節點按照1/4-1/4-1/4-1/4進行劃分 - (1/4 * np.log2(1/4) + 1/4 * np.log2(1/4) + 1/4 * np.log2(1/4) + 1/4 * np.log2(1/4)) #2.0而在實際建模過程中,ID3是通過信息增益的計算結果挑選劃分規則,而C4.5采用IV值對信息增益計算結果進行修正,構建新的數據集劃分評估指標:增益比例(Gain Ratio,被稱為獲利比例或增益率),來指導具體的劃分規則的挑選。GR的計算公式如下:
GainRatio=InformationGainInformationValueGain\ Ratio = \frac{Information\ Gain}{Information\ Value} Gain?Ratio=Information?ValueInformation?Gain?
也就是說,在C4.5的建模過程中,需要先計算GR,然后選擇GR計算結果較大的列來執行這一次展開。例如對于上述例子來看,以age列展開后Information Gain結果為:
而IV值為:
因此計算得到GR值為:
GR = IG / IV GR #0.1564275624211752然后據此進一步計算其他各列展開后的GR值,并選擇GR較大者進行數據集劃分。
- C4.5的連續變量處理方法
C4.5允許帶入連續變量進行建模,并且圍繞連續變量的規則提取方式和此前介紹的CART樹一致。即在連續變量中尋找相鄰的取值的中間點作為備選切分點,通過計算切分后的GR值來挑選最終數據集劃分方式。當然,基于連續變量的備選切分方式也要和離散變量的切分方式進行橫向比較,到底是一次展開一個離散列還是按照連續變量的某個切點展開,要根據最終GR的計算結果來決定。
例如,如果將上述數據集的age列換成連續變量,則我們需要計算的GR情況就變成了GR(income)、GR(student)、GR(credit_rating)、GR(age<=26.5)、GR(age<=27.5)…
當然,由于C4.5的離散變量和連續變量提取規則方式不同,離散變量是一次消耗一列來進行展開(有可能多分叉),而連續變量則一次消耗一個切分點,因此和CART樹一樣、同一個連續變量可以多次指導數據集進行劃分。
在sklearn的樹模型介紹文檔中,有一段關于sklearn的決策樹不支持離散變量建模的說明,其意為不支持按照類似ID3或C4.5的方式直接將離散變量按列來進行展開,而是根據sklearn中集成的CART樹自身的建模規則,使得sklearn中的決策樹實際上在處理特征時都是按照C4.5中連續變量的處理方式在進行處理,并非指的是帶入離散變量就無法建模。
Lesson 8.4 CART回歸樹的建模流程與sklearn參數詳解
接下來,我們繼續討論關于CART回歸樹的相關內容。 根據此前介紹,CART樹能同時解決分類問題和回歸問題,但由于兩類問題的性質還是存在一定的差異,因此CART樹在處理不同類型問題時相應建模流程也略有不同,當然對應的sklearn中的評估器也是不同的。并且值得一提的是,盡管回歸樹單獨來看是解決回歸類問題的模型,但實際上回歸樹其實是構建梯度提升樹(GBDT,一種集成算法)的基礎分類器,并且無論是解決回歸類問題還是分類問題,CART回歸樹都是唯一的基礎分類器,因此哪怕單獨利用回歸樹解決問題的場景并不多見,但對于CART回歸樹的相關方法仍然需要重點掌握,從而為后續集成算法的學習奠定基礎。
本節我們將在CART分類樹的基礎之上詳細討論CART樹在處理回歸問題時的基本流程,并詳細介紹關于CART回歸樹在sklearn中評估器的的相關參數與使用方法。
# 科學計算模塊 import numpy as np import pandas as pd# 繪圖模塊 import matplotlib as mpl import matplotlib.pyplot as plt# 自定義模塊 from ML_basic_function import *# Scikit-Learn相關模塊 # 評估器類 from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline from sklearn.model_selection import GridSearchCV from sklearn import tree from sklearn.tree import DecisionTreeClassifier,DecisionTreeRegressor# 實用函數 from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score# 數據準備 from sklearn.datasets import load_iris一、CART回歸樹的基本建模流程
同樣,我們先從一個極簡的例子來了解CART回歸樹的基本建模流程,然后再介紹通過數學語言描述得更加嚴謹的建模流程。
- 數據準備
首先我們創建一個簡單的回歸數據集如下,該數據集只包含一個特征和一個連續型標簽:
其中橫坐標代表數據集特征,縱坐標代表數據集標簽。
- 生成備選規則
CART回歸樹和分類樹流程類似,從具體操作步驟來看,首先都是尋找切分點對數據集進行切分,或者說需要確定備選劃分規則。
回歸樹中尋找切分點的方式和分類樹的方式相同,都是逐特征尋找不同取值的中間點作為切分點。對于上述數據集來說,由于只有一個特征,并且總共有5個不同的取值,因此切分點有4個。而根據此前介紹,有幾個切分點就有幾種數據集劃分方式、即有同等數量的備選劃分規則、或有同等數量的樹的生長方式。初始數據集的4個不同的劃分方式,可以通過如下方式進行呈現:
y_range = np.arange(1, 6, 0.1)plt.subplot(221) plt.scatter(data[:, 0], data[:, 1]) plt.plot(np.full_like(y_range, 1.5), y_range, 'r--') plt.subplot(222) plt.scatter(data[:, 0], data[:, 1]) plt.plot(np.full_like(y_range, 2.5), y_range, 'r--') plt.subplot(223) plt.scatter(data[:, 0], data[:, 1]) plt.plot(np.full_like(y_range, 3.5), y_range, 'r--') plt.subplot(224) plt.scatter(data[:, 0], data[:, 1]) plt.plot(np.full_like(y_range, 4.5), y_range, 'r--')- 挑選規則
在確定了備選劃分規則之后,接下來需要根據某種評估標準來尋找最佳劃分方式。回歸樹的該步驟和分類樹差異較大,分類樹中我們是采用基尼系數或者信息熵來衡量劃分后數據集標簽不純度下降情況來挑選最佳劃分方式,而在回歸樹中,則是根據劃分之后子數據集MSE下降情況來進行最佳劃分方式的挑選。在該過程中,子數據集整體的MSE計算方法也和CART分類樹類似,都是先計算每個子集單獨的MSE,然后再通過加權求和的方法來進行計算兩個子集整體的MSE。
此處MSE的計算雖然不復雜,但我們知道,但凡需要計算MSE,就必須給出一個預測值,然后我們才能根據預測值和真實值計算MSE。而CART回歸樹在進行子數據集的劃分之后,會針對每個子數據集給出一個預測值(注意是針對一個子數據集中所有數據給出一個預測值,而不是針對每一個數給出一個預測值),而該預測值會依照讓對應子數據集MSE最小的目標進行計算得出。
讓MSE取值最小這一目標其實等價于讓SSE取值最小,而用一個數對一組數進行預測并且要求SSE最小,其實就相當于K-Means快速聚類過程中所要求的尋找組內誤差平方和最小的點作為中心點,我們曾在Lesson 7中進行過相關數學推導,此時選取這組數的質心能夠讓組內誤差平方和計算結果最小。而此時情況也是類似,只不過我們針對一組一維的數據去尋找一個能夠使得組內誤差平方和的最小的點,這個點仍然是這組數據的質心,而一維數據的質心,其實就是這組數據的均值。那么也就是說,在圍繞讓每一個子數據集MSE取值最小這一目標下,每個子數據集的最佳預測值就是這個子數據集真實標簽的均值。
具體計算過程如下,例如對上述第一種劃分數據集的情況來說,每個子數據集的預測值和MSE計算結果如下:
plt.scatter(data[:, 0], data[:, 1]) plt.plot(np.full_like(y_range, 1.5), y_range, 'r--')
對應劃分情況也可以通過如下形式進行表示:
此時可計算子數據集B1和B2的MSE,首先是兩個數據集的預測值,也就是兩個數據集的均值:
然后計算兩個子集的MSE:
然后和CART分類樹一樣,以各子集所占全集的樣本比例為權重,通過加權求和的方式計算兩個子集整體的MSE:
mse_b = 1/5 * mse_b1 + 4/5 * mse_b2 mse_b #1.8而父節點的MSE為:
data[: , 1].mean() #3.8 mse_a = np.power(data[: , 1] - data[: , 1].mean(), 2).sum() / data[: , 1].size mse_a #3.7599999999999993因此,本次劃分所降低的MSE為:
mse_a - mse_b #1.9599999999999993即為該種劃分方式的最終評分。當然,我們要以相似的流程計算其他幾種劃分方式的評分,然后從中挑選能夠最大程度降低MSE的劃分方式,基本流程如下:
impurity_decrease = []for i in range(4):# 尋找切分點splitting_point = data[i: i+2 , 0].mean() # 進行數據集切分data_b1 = data[data[:, 0] <= splitting_point]data_b2 = data[data[:, 0] > splitting_point] # 分別計算兩個子數據集的MSEmse_b1 = np.power(data_b1[: , 1] - data_b1[: , 1].mean(), 2).sum() / data_b1[: , 1].sizemse_b2 = np.power(data_b2[: , 1] - data_b2[: , 1].mean(), 2).sum() / data_b2[: , 1].size # 計算兩個子數據集整體的MSEmse_b = data_b1[: , 1].size/data[: , 1].size * mse_b1 + data_b2[: , 1].size/data[: , 1].size * mse_b2#mse_b = mse_b1 + mse_b2# 計算當前劃分情況下MSE下降結果impurity_decrease.append(mse_a - mse_b) impurity_decrease #[1.9599999999999993, 2.1599999999999993, 3.226666666666666, 1.209999999999999]plt.subplot(221) plt.scatter(data[:, 0], data[:, 1]) plt.plot(np.full_like(y_range, 1.5), y_range, 'r--') plt.subplot(222) plt.scatter(data[:, 0], data[:, 1]) plt.plot(np.full_like(y_range, 2.5), y_range, 'r--') plt.subplot(223) plt.scatter(data[:, 0], data[:, 1]) plt.plot(np.full_like(y_range, 3.5), y_range, 'r--') plt.subplot(224) plt.scatter(data[:, 0], data[:, 1]) plt.plot(np.full_like(y_range, 4.5), y_range, 'r--')
根據最終結果能夠看出,第三種劃分情況能夠最大程度降低MSE,即此時樹模型的第一次生長情況如下:
- 進行多輪迭代
當然,和CART分類樹一樣,接下來,我們就能夠進一步圍繞B1和B2進行進一步劃分。此時B2的MSE已經為0,因此無需再進行劃分,而B1的MSE為0.88,還可以進一步進行劃分。當然B1的劃分過程也和A數據集的劃分過程一致,尋找能夠令子集MSE下降最多的方式進行切分。不過由于B1數據集本身較為簡單,通過觀察不難發現,我們可以以x<= 1.5作為劃分條件對其進行切分,進一步切分出來的子集的MSE都將取值為0。
此外,我們也可以觀察當回歸樹生長了兩層之后,相關規則對原始數據集的劃分情況:
不難發現,回歸樹的對標簽的預測,實際上是一種“分區定值”的預測,建模過程的實際表現是對樣本進行劃分、然后每個區間給定一個預測值,并且樹的深度越深、對樣本空間的劃分次數就越多、樣本空間就會被分割成更多的子空間。在sklearn的說明文檔中也有相關例子:
- 回歸樹的預測過程
而一旦當模型已經構建完成后,回歸樹的預測過程其實和分類樹非常類似,新數據只要根據劃分規則分配到所屬樣本空間,則該空間模型的預測結果就是該數據的預測結果。
至此,我們就在一個極簡的數據集上完成了CART回歸樹的構建。不難發現,回歸樹和分類樹的構建過程大致相同、迭代過程也基本一致,我們可以將其視作同一種建模思想的兩種不同實現形式。
二、CART回歸樹的Scikit-Learn實現方法
1.CART回歸樹的sklearn快速實現
接下來,我們嘗試在sklearn中調用回歸樹評估器圍繞上述數據集進行建模,并對上述過程進行簡單驗證。回歸樹也是在tree模塊下,我們可以通過如下方式進行導入:
from sklearn.tree import DecisionTreeRegressor然后進行模型訓練:
clf = DecisionTreeRegressor().fit(data[:, 0].reshape(-1, 1), data[:, 1])# 同樣可以借助tree.plot_tree進行結果的可視化呈現 plt.figure(figsize=(6, 2), dpi=150) tree.plot_tree(clf)
發現和我們手動實現過程一致。
2.CART回歸樹評估器的參數解釋
接下來,詳細討論關于CART回歸樹評估器中的相關參數。盡管CART回歸樹和分類樹是由不同評估器實現相關過程,但由于兩種模型基本理論一致,因此兩種不同評估器的參數也大都一致。
DecisionTreeRegressor? #Init signature: #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='deprecated', # ccp_alpha=0.0, )不難發現,其中大多數參數我們在Lesson 8.2中都進行了詳細的講解,此處重點講解criterion參數取值。criterion是備選劃分規則的選取指標,對于CART分類樹來說默認基尼系數、可選信息熵,而對于CART回歸樹來說默認mse,同時可選mae和friedman_mse,同時在新版sklearn中,還加入了poisson作為可選參數取值。接下來我們就這幾個參數不同取值進行介紹:
- criterion='mse’情況
當criterion取值為mse時當然是計算誤差平方和再除以樣本總數,其基本計算流程與上述手動實現過程層類似。但有一點可能會對閱讀源碼的同學造成困擾,那就是在源碼中子節點整體的MSE計算公式描述如下:
盡管上述公式看起來像是子節點的整體MSE就等于左右兩個節點的方差只和,但實際上是經過加權之后的方差只和。我們可以通過在手動實現過程中靈活調整min_impurity_decrease參數來進行驗證。
需要注意的是,CART回歸樹的子節點整體MSE的計算方式是加權求和還是簡單求和,不同的材料中有不同的描述,例如由Aurélien Géron等人所著《機器學習實戰,基于Scikit-Learn、Keras和TensorFlow》一書中表示是通過加權求和方式算得(sklearn中也是這樣),而在《統計學習方法》一書中則表示是根據子節點的MSE直接求和得到。
- criterion='mae’情況
和MSE不同,MAE實際上計算的是預測值和真實值的差值的絕對值再除以樣本總數,即可以通過如下公式計算得出:MAE=1m∑i=1m∣(yi?y^i)∣MAE = \frac{1}{m}\sum^m_{i=1}|(y_i-\hat y _i)| MAE=m1?i=1∑m?∣(yi??y^?i?)∣
也就是說,MSE是基于預測值和真實值之間的歐式距離進行的計算,而MAE則是基于二者的街道距離進行的計算,很多時候,MSE也被稱為L2損失,而MAE則被稱為L1損失。
需要注意的是,當criterion取值為mae時,為了讓每一次劃分時子集內的MAE值最小,此時每個子集的模型預測值就不再是均值,而是中位數。此時中位數的選取其實和Lesson 7中介紹的K-Means快速聚類的質心選取過程類似,當距離衡量方法改為街道距離時,能夠讓組內誤差平方和最小的質心其實就是這一組數的中位數。
再次強調,CART回歸樹的criterion不僅是劃分方式挑選時的評估標準,同時也是劃分子數據集后選取預測值的決定因素。也就是說,對于回歸樹來說,criterion的取值其實決定了兩個方面,其一是決定了損失值的計算方式、其二是決定了每一個數據集的預測值的計算方式——數據集的預測值要求criterion取值最小,如果criterion=mse,則數據集的預測值要求在當前數據情況下mse取值最小,此時應該以數據集的標簽的均值作為預測值;而如果criterion=mse,則數據集的預測值要求在當前數據情況下mae取值最小,此時應該以數據集標簽的中位數作為預測值。
并且一般來說,如果希望模型對極端值(非常大或者非常小的值,也被稱為離群值)的忍耐程度比較高,整體建模過程不受極端值影響,可以考慮使用mae參數(就類似于中位數會更少的受到極端值的影響),此時模型一般不會為極端值單獨設置規則。而如果希望模型具備較好的識別極端值的能力,則可以考慮使用mse參數,此時模型會更大程度受到極端值影響(就類似于均值更容易受到極端值影響),更大概率會圍繞極端值單獨設置規則,從而幫助建模者對極端值進行識別。
為什么需要用模型來識別離群點?主要是因為對于高維空間中的樣本點,我們很難通過簡單的大小比較將離群點挑選出來。
- criterion='friedman_mse’情況
friedman_mse是一種基于mse的改進型指標,是由GBDT(梯度提升樹,一種集成算法)的提出者friedman所設計的一種殘差計算方法,是sklearn中樹梯度提樹默認的criterion取值,對于單獨的樹決策樹模型一般不推薦使用,關于friedman_mse的計算方法我們將在集成算法中進行詳細介紹。
總結
以上是生活随笔為你收集整理的Lesson 8.3Lesson 8.4 ID3、C4.5决策树的建模流程CART回归树的建模流程与sklearn参数详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lesson 8.1Lesson 8.2
- 下一篇: LESSON 9.4 集成算法的参数空间