版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 數(shù)據(jù)分析實戰(zhàn)45講首 頁 | 18丨決策樹(中):CART,一棵是回歸樹,另一棵是分類樹2019-01-23 陳旸講述:陳旸時長 11:24 大小 26.13M上節(jié)課我們講了決策樹,基于信息度量的不同方式,我們可以把決策樹分為 ID3 算法、C4.5 算法和 CART 算法。今天我來帶你學習 CART 算法。CART 算法,英文全稱叫做Classification And Regression Tree,中文叫做分類回歸樹。ID3 和 C4.5 算法可以生成二叉樹或多叉樹,而 CART 只支持二叉樹。同時 CART 決策樹比較特殊,既可以作分類樹, 又可以作回歸樹。那么你首先需要了解的是,什
2、么是分類樹,什么是回歸樹呢?我用下面的訓練數(shù)據(jù)舉個例子,你能看到不同職業(yè)的人,他們的年齡不同,學習時間也不 同。如果我構造了一棵決策樹,想要基于數(shù)據(jù)判斷這個人的職業(yè)身份,這個就屬于分類樹,因為是從幾個分類中來做選擇。如果是給定了數(shù)據(jù),想要預測這個人的年齡,那就屬 于回歸樹。分類樹可以處理離散數(shù)據(jù),也就是數(shù)據(jù)種類有限的數(shù)據(jù),它輸出的是樣本的類別,而回歸樹可以對連續(xù)型的數(shù)值進行預測,也就是數(shù)據(jù)在某個區(qū)間內(nèi)都有取值的可能,它輸出的是一個數(shù)值。CART 分類樹的工作流程通過上一講,我們知道決策樹的核心就是尋找純凈的劃分,因此引入了純度的概念。在屬性選擇上,我們是通過統(tǒng)計“不純度”來做判斷的,ID3 是
3、基于信息增益做判斷,C4.5 在ID3 的基礎上做了改進,提出了信息增益率的概念。實際上 CART 分類樹與 C4.5 算法類似,只是屬性選擇的指標采用的是基尼系數(shù)。你可能在經(jīng)濟學中聽過說基尼系數(shù),它是用來衡量一個國家收入差距的常用指標。當基尼系數(shù)大于 0.4 的時候,說明財富差異懸殊?;嵯禂?shù)在 0.2-0.4 之間說明分配合理,財富差距不大?;嵯禂?shù)本身反應了樣本的不確定度。當基尼系數(shù)越小的時候,說明樣本之間的差異性小,不確定程度低。分類的過程本身是一個不確定度降低的過程,即純度的提升過程。所 以 CART 算法在構造分類樹的時候,會選擇基尼系數(shù)最小的屬性作為屬性的劃分。我們接下來詳解了解
4、一下基尼系數(shù)?;嵯禂?shù)不好懂,你最好跟著例子一起手動計算下。假設 t 為節(jié)點,那么該節(jié)點的 GINI 系數(shù)的計算公式為:這里 p(Ck|t) 表示節(jié)點 t 屬于類別 Ck 的概率,節(jié)點 t 的基尼系數(shù)為 1 減去各類別 Ck 概率平方和。通過下面這個例子,我們計算一下兩個集合的基尼系數(shù)分別為多少: 集合 1:6 個都去打籃球;集合 2:3 個去打籃球,3 個不去打籃球。針對集合 1,所有人都去打籃球,所以 p(Ck|t)=1,因此 GINI(t)=1-1=0。針對集合 2,有一半人去打籃球,而另一半不去打籃球,所以,p(C1|t)=0.5, p(C2|t)=0.5,GINI(t)=1-(0.5
5、*0.5+0.5*0.5)=0.5。通過兩個基尼系數(shù)你可以看出,集合 1 的基尼系數(shù)最小,也證明樣本最穩(wěn)定,而集合 2 的樣本不穩(wěn)定性更大。在 CART 算法中,基于基尼系數(shù)對特征屬性進行二元分裂,假設屬性 A 將節(jié)點 D 劃分成了 D1 和 D2,如下圖所示:節(jié)點 D 的基尼系數(shù)等于子節(jié)點 D1 和 D2 的歸一化基尼系數(shù)之和,用公式表示為:歸一化基尼系數(shù)代表的是每個子節(jié)點的基尼系數(shù)乘以該節(jié)點占整體父親節(jié)點 D 中的比例。上面我們已經(jīng)計算了集合 D1 和集合 D2 的 GINI 系數(shù),得到:所以節(jié)點 D 的基尼系數(shù)為:節(jié)點 D 被屬性 A 劃分后的基尼系數(shù)越大,樣本集合的不確定性越大,也就是
6、不純度越高。如何使用 CART 算法來創(chuàng)建分類樹通過上面的講解你可以知道,CART 分類樹實際上是基于基尼系數(shù)來做屬性劃分的。在Python 的 sklearn 中,如果我們想要創(chuàng)建 CART 分類樹,可以直接使用DecisionTreeClassifier 這個類。創(chuàng)建這個類的時候,默認情況下 criterion 這個參數(shù)等于gini,也就是按照基尼系數(shù)來選擇屬性劃分,即默認采用的是 CART 分類樹。下面,我們來用 CART 分類樹,給 iris 數(shù)據(jù)集構造一棵分類決策樹。iris 這個數(shù)據(jù)集,我在 Python 可視化中講到過,實際上在 sklearn 中也自帶了這個數(shù)據(jù)集。基于 iri
7、s 數(shù)據(jù)集, 構造 CART 分類樹的代碼如下: 復制代碼 1 # encoding=utf-82 from sklearn.model_selection import train_test_split3 from sklearn.metrics import accuracy_score4 from sklearn.tree import DecisionTreeClassifier5 from sklearn.datasets import load_iris6 # 準備數(shù)據(jù)集 7 iris=load_iris()8 # 獲取特征集和分類標識 9 features = iris.data
8、10 labels = iris.target11 # 隨機抽取 33% 的數(shù)據(jù)作為測試集,其余為訓練集 12 train_features, test_features, train_labels, test_labels = train_test_split(features, la13 # 創(chuàng)建 CART 分類樹 14 clf = DecisionTreeClassifier(criterion=gini)15 # 擬合構造 CART 分類樹 16 clf = clf.fit(train_features, train_labels)17 # 用 CART 分類樹做預測 18 test_
9、predict = clf.predict(test_features)19 # 預測結果與測試集結果作比對 20 score = accuracy_score(test_labels, test_predict)21 print(CART 分類樹準確率 %.4lf % score)運行結果: 復制代碼 1 CART 分類樹準確率 0.9600如果我們把決策樹畫出來,可以得到下面的圖示:首先 train_test_split 可以幫助我們把數(shù)據(jù)集抽取一部分作為測試集,這樣我們就可以得到訓練集和測試集。使用 clf = DecisionTreeClassifier(criterion=gini)
10、 初始化一棵 CART 分類樹。這樣你就可以對 CART 分類樹進行訓練。使用 clf.fit(train_features, train_labels) 函數(shù),將訓練集的特征值和分類標識作為參數(shù)進行擬合,得到 CART 分類樹。使用 clf.predict(test_features) 函數(shù)進行預測,傳入測試集的特征值,可以得到測試結果test_predict。最后使用 accuracy_score(test_labels, test_predict) 函數(shù),傳入測試集的預測結果與實際的結果作為參數(shù),得到準確率 score。我們能看到 sklearn 幫我們做了 CART 分類樹的使用封裝,
11、使用起來還是很方便的。CART 回歸樹的工作流程CART 回歸樹劃分數(shù)據(jù)集的過程和分類樹的過程是一樣的,只是回歸樹得到的預測結果是連續(xù)值,而且評判“不純度”的指標不同。在 CART 分類樹中采用的是基尼系數(shù)作為標準, 那么在 CART 回歸樹中,如何評價“不純度”呢?實際上我們要根據(jù)樣本的混亂程度,也就是樣本的離散程度來評價“不純度”。樣本的離散程度具體的計算方式是,先計算所有樣本的均值,然后計算每個樣本值到均值的差值。我們假設 x 為樣本的個體,均值為 u。為了統(tǒng)計樣本的離散程度,我們可以取差值的絕對值,或者方差。其中差值的絕對值為樣本值減去樣本均值的絕對值:方差為每個樣本值減去樣本均值的平
12、方和除以樣本個數(shù):所以這兩種節(jié)點劃分的標準,分別對應著兩種目標函數(shù)最優(yōu)化的標準,即用最小絕對偏差(LAD),或者使用最小二乘偏差(LSD)。這兩種方式都可以讓我們找到節(jié)點劃分的方法,通常使用最小二乘偏差的情況更常見一些。我們可以通過一個例子來看下如何創(chuàng)建一棵 CART 回歸樹來做預測。如何使用 CART 回歸樹做預測這里我們使用到 sklearn 自帶的波士頓房價數(shù)據(jù)集,該數(shù)據(jù)集給出了影響房價的一些指標,比如犯罪率,房產(chǎn)稅等,最后給出了房價。根據(jù)這些指標,我們使用 CART 回歸樹對波士頓房價進行預測,代碼如下: 復制代碼 1 # encoding=utf-82 from sklearn.me
13、trics import mean_squared_error3 from sklearn.model_selection import train_test_split4 from sklearn.datasets import load_boston5 from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error6 from sklearn.tree import DecisionTreeRegressor7 # 準備數(shù)據(jù)集 8 boston=load_boston()9 # 探索數(shù)據(jù) 10 prin
14、t(boston.feature_names)11 # 獲取特征集和房價 12 features = boston.data13 prices = boston.target14 # 隨機抽取 33% 的數(shù)據(jù)作為測試集,其余為訓練集 15 train_features, test_features, train_price, test_price = train_test_split(features, pric16 # 創(chuàng)建 CART 回歸樹 17 dtr=DecisionTreeRegressor()18 # 擬合構造 CART 回歸樹 19 dtr.fit(train_features,
15、 train_price)20 # 預測測試集中的房價 21 predict_price = dtr.predict(test_features)22 # 測試集的結果評價 23 print(回歸樹二乘偏差均值:, mean_squared_error(test_price, predict_price)24 print(回歸樹絕對值偏差均值:, mean_absolute_error(test_price, predict_price)運行結果(每次運行結果可能會有不同): 復制代碼 1 CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO BL
16、STAT2 回歸樹二乘偏差均值: 23.807844311377243 回歸樹絕對值偏差均值: 3.040119760479042如果把回歸樹畫出來,可以得到下面的圖示(波士頓房價數(shù)據(jù)集的指標有些多,所以樹比較大):你可以在這里下載完整 PDF 文件。我們來看下這個例子,首先加載了波士頓房價數(shù)據(jù)集,得到特征集和房價。然后通過train_test_split 幫助我們把數(shù)據(jù)集抽取一部分作為測試集,其余作為訓練集。使用 dtr=DecisionTreeRegressor() 初始化一棵 CART 回歸樹。使用 dtr.fit(train_features, train_price) 函數(shù),將訓練集
17、的特征值和結果作為參數(shù)進行擬合,得到 CART 回歸樹。使用 dtr.predict(test_features) 函數(shù)進行預測,傳入測試集的特征值,可以得到預測結果predict_price。最后我們可以求得這棵回歸樹的二乘偏差均值,以及絕對值偏差均值。我們能看到 CART 回歸樹的使用和分類樹類似,只是最后求得的預測值是個連續(xù)值。CART 決策樹的剪枝CART 決策樹的剪枝主要采用的是 CCP 方法,它是一種后剪枝的方法,英文全稱叫做cost- complexity prune,中文叫做代價復雜度。這種剪枝方式用到一個指標叫做節(jié)點的表面誤差率增益值,以此作為剪枝前后誤差的定義。用公式表示則
18、是:其中 Tt 代表以 t 為根節(jié)點的子樹,C(Tt) 表示節(jié)點 t 的子樹沒被裁剪時子樹 Tt 的誤差, C(t) 表示節(jié)點 t 的子樹被剪枝后節(jié)點 t 的誤差,|Tt|代子樹 Tt 的葉子數(shù),剪枝后,T 的葉子數(shù)減少了|Tt|-1。所以節(jié)點的表面誤差率增益值等于節(jié)點 t 的子樹被剪枝后的誤差變化除以剪掉的葉子數(shù)量。因為我們希望剪枝前后誤差最小,所以我們要尋找的就是最小值對應的節(jié)點,把它剪掉。這時候生成了第一個子樹。重復上面的過程,繼續(xù)剪枝,直到最后只剩下根節(jié)點,即為最后一個子樹。得到了剪枝后的子樹集合后,我們需要用驗證集對所有子樹的誤差計算一遍??梢酝ㄟ^計算每個子樹的基尼指數(shù)或者平方誤差,
19、取誤差最小的那個樹,得到我們想要的結果??偨Y今天我給你講了 CART 決策樹,它是一棵決策二叉樹,既可以做分類樹,也可以做回歸樹。你需要記住的是,作為分類樹,CART 采用基尼系數(shù)作為節(jié)點劃分的依據(jù),得到的是離散的結果,也就是分類結果;作為回歸樹,CART 可以采用最小絕對偏差(LAD),或者最小二乘偏差(LSD)作為節(jié)點劃分的依據(jù),得到的是連續(xù)值,即回歸預測結果。最后我們來整理下三種決策樹之間在屬性選擇標準上的差異:ID3 算法,基于信息增益做判斷;C4.5 算法,基于信息增益率做判斷;CART 算法,分類樹是基于基尼系數(shù)做判斷。回歸樹是基于偏差做判斷。實際上這三個指標也是計算“不純度”的三
20、種計算方式。在工具使用上,我們可以使用 sklearn 中的 DecisionTreeClassifier 創(chuàng)建 CART 分類樹, 通過 DecisionTreeRegressor 創(chuàng)建 CART 回歸樹。你可以用代碼自己跑一遍我在文稿中舉到的例子。最后給你留兩道思考題吧,你能說下 ID3,C4.5,以及 CART 分類樹在做節(jié)點劃分時的區(qū)別嗎?第二個問題是,sklearn 中有個手寫數(shù)字數(shù)據(jù)集,調(diào)用的方法是 load_digits(),你能否創(chuàng)建一個 CART 分類樹,對手寫數(shù)字數(shù)據(jù)集做分類?另外選取一部分測試集,統(tǒng)計下分類樹的準確率?歡迎你在評論下面留言,與我分享你的答案。也歡迎點擊“請
21、朋友讀”,把這篇文章分享給你的朋友或者同事,一起交流。 版權歸極客邦科技所有,未經(jīng)許可不得轉(zhuǎn)載上一篇17 丨決策樹(上):要不要去打籃球?決策樹來告訴你下一篇19丨決策樹(下):泰坦尼克乘客生存預測 寫留言精選留言 (19)胡 52019-01-31cart分類樹的決策樹那副圖看不懂。展開 梁林松 42019-01-23老師 那個打籃球的例子里 D1/D和D2/D為什么是6/9和2/9呢?如果是子節(jié)點占父節(jié)點的比例不是應該是各1/2嗎? L20e1e9-01-24 2# encoding=utf-8from sklearn.model_selection import train_test_s
22、plit from sklearn.metrics import accuracy_scorefrom sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_digits展開 jake 12019-02-24首先想問一個問題 就是在講到基尼系數(shù)那里 有一個圖那里的例子 什么D: 9個打籃球 3個不打籃球那里那里的D的基尼系數(shù)用到了子節(jié)點歸一化基尼系數(shù)之和這個方法求 請問D的基尼系數(shù)不能直接用 上面那個公式 也就是1 - p(ck|t)2那個公式計算嗎 我用這個公式計算出D的展開 王彬成 1201
23、9-02-171、ID3,C4.5,以及 CART 分類樹在做節(jié)點劃分時的區(qū)別嗎?ID3是基于信息增益來判斷,信息增益最大的,選取作為根節(jié)點。C4.5采用信息增益率來判斷,信息增益率最大的,選取作為根節(jié)點。CART分類樹采用基尼系數(shù)最小的屬性作為屬性劃分2、sklearn 中有個手寫數(shù)字數(shù)據(jù)集,調(diào)用的方法是 load_digits(),你能否創(chuàng)建一個 CAR展開 Chino 12019-02-01首先想問一個問題 就是在講到基尼系數(shù)那里 有一個圖那里的例子 什么D: 9個打籃球 3個不打籃球那里那里的D的基尼系數(shù)用到了子節(jié)點歸一化基尼系數(shù)之和這個方法求 請問D的基尼系數(shù)不能直接用 上面那個公式
24、 也就是1 - p(ck|t)2那個公式計算嗎 我用這個公式計算出D的基尼系數(shù)為 1 - (9/12 * 9/12 + 3/12 * 3/12) = 6/16展開 make some. 2019-03-01老師你好,決策的數(shù)是怎么生成的?展開 littlePerf. 2019-02-21探索數(shù)據(jù)那一行代碼有什么作用? print(boston.feature_names)xfoolin 2019-02-19ID3 是通過信息增益,選取信息增益最大的特征;C4.5 是通過信息增益率,選取,CART 是通過基尼系數(shù),選取基尼系數(shù)最小的特征。from sklearn.model_selection
25、import train_test_split#訓練集和測試集展開 小熊貓 2019-02-15ID3:以信息增益作為判斷標準,計算每個特征的信息增益,選取信息增益最大的特征,但是容易選取到取值較多的特征C4.5:以信息增益比作為判斷標準,計算每個特征的信息增益比,選取信息增益比最大的特征CART:分類樹以基尼系數(shù)為標準,選取基尼系數(shù)小的的特征展開 柚子 2019-02-15from sklearn.model_selection import train_test_split from sklearn.datasets import load_digitsfrom sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score展開 rainman 2019-02-15對于 CART 回歸樹的可視化,可以先在電腦上安裝 graphviz;然后 pip install graphviz,這是安裝python的庫,需要依賴前面安裝的 graphviz??梢暬a如下:from sklearn.tree import export_graphvi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年水利工程建設安全生產(chǎn)知識題庫安全B證
- 2026年心理醫(yī)生咨詢題集機器人心理評估與治療技術
- 2026年建筑行業(yè)結構化面試如何評估候選人的專業(yè)水平
- 2026年會計職稱考試題庫中級會計實務
- 2026年榆林職業(yè)技術學院單招綜合素質(zhì)考試題庫及答案1套
- 2026年山西職業(yè)技術學院單招職業(yè)適應性測試題庫及答案1套
- 2026年河北交通職業(yè)技術學院單招職業(yè)技能測試題庫必考題
- 2026年財務管理核心知識點測試題庫
- 2026年職場禮儀與職業(yè)操守知識考試試題庫
- 2026年健康體檢知識競賽藥物對體檢數(shù)據(jù)的影響
- GB/T 9944-2025不銹鋼絲繩
- GB/T 14071-2025林木品種審定規(guī)范
- 水庫防洪防汛培訓課件
- 陜西省西安市愛知中學2024-2025學年七年級上學期期末考試數(shù)學試卷(含答案)
- 養(yǎng)生會所店長的日常職責
- 2025年北京市中考數(shù)學試卷深度評析及2026年備考策略
- 2025垃圾發(fā)電企業(yè)安全生產(chǎn)標準化實施規(guī)范
- 檢驗檢測機構資質(zhì)認定評審員培訓教程(2023版)
- 2024年線上卸妝品類消費趨勢洞察
- 2025年四川省南充市中考生物真題(解析版)
- 海爾洗衣機MS75188BZ31使用說明書
評論
0/150
提交評論