決策樹的過擬合問題

決策樹的過擬合問題

決策樹是一種分類器,通過ID3,C4.5和CART等算法可以通過訓練數據構建一個決策樹。但是,算法生成的決策樹非常詳細并且龐大,每個屬性都被詳細地加以考慮,決策樹的樹葉節點所覆蓋的訓練樣本都是“純”的。因此用這個決策樹來對訓練樣本進行分類的話,你會發現對于訓練樣本而言,這個樹表現完好,誤差率極低且能夠正確得對訓練樣本集中的樣本進行分類。訓練樣本中的錯誤數據也會被決策樹學習,成為決策樹的部分,但是對于測試數據的表現就沒有想象的那么好,或者極差,這就是所謂的過擬合(Overfitting)問題。

決策樹的剪枝

決策樹的剪枝有兩種思路:預剪枝(Pre-Pruning)和后剪枝(Post-Pruning)

預剪枝(Pre-Pruning)

在構造決策樹的同時進行剪枝。所有決策樹的構建方法,都是在無法進一步降低熵的情況下才會停止創建分支的過程,為了避免過擬合,可以設定一個閾值,熵減小的數量小于這個閾值,即使還可以繼續降低熵,也停止繼續創建分支。但是這種方法實際中的效果并不好。

后剪枝(Post-Pruning)

決策樹構造完成后進行剪枝。剪枝的過程是對擁有同樣父節點的一組節點進行檢查,判斷如果將其合并,熵的增加量是否小于某一閾值。如果確實小,則這一組節點可以合并一個節點,其中包含了所有可能的結果。后剪枝是目前最普遍的做法。后剪枝的剪枝過程是刪除一些子樹,然后用其葉子節點代替,這個葉子節點所標識的類別通過大多數原則(majority class criterion)確定。所謂大多數原則,是指剪枝過程中, 將一些子樹刪除而用葉節點代替,這個葉節點所標識的類別用這棵子樹中大多數訓練樣本所屬的類別來標識,所標識的類 稱為majority class ,(majority class 在很多英文文獻中也多次出現)。

后剪枝算法

后剪枝算法有很多種,這里簡要總結如下:

Reduced-Error Pruning (REP,錯誤率降低剪枝)

這個思路很直接,完全的決策樹不是過度擬合么,我再搞一個測試數據集來糾正它。對于完全決策樹中的每一個非葉子節點的子樹,我們嘗試著把它替換成一個葉子節點,該葉子節點的類別我們用子樹所覆蓋訓練樣本中存在最多的那個類來代替,這樣就產生了一個簡化決策樹,然后比較這兩個決策樹在測試數據集中的表現,如果簡化決策樹在測試數據集中的錯誤比較少,那么該子樹就可以替換成葉子節點。該算法以bottom-up的方式遍歷所有的子樹,直至沒有任何子樹可以替換使得測試數據集的表現得以改進時,算法就可以終止。

Pessimistic Error Pruning (PEP,悲觀剪枝)

PEP剪枝算法是在C4.5決策樹算法中提出的, 把一顆子樹(具有多個葉子節點)用一個葉子節點來替代(我研究了很多文章貌似就是用子樹的根來代替)的話,比起REP剪枝法,它不需要一個單獨的測試數據集。

PEP算法首先確定這個葉子的經驗錯誤率(empirical)為(E+0.5)/N,0.5為一個調整系數。對于一顆擁有L個葉子的子樹,則子樹的錯誤數和實例數都是就應該是葉子的錯誤數和實例數求和的結果,則子樹的錯誤率為e,這個e后面會用到

子樹的錯誤率
然后用一個葉子節點替代子樹,該新葉子節點的類別為原來子樹節點的最優葉子節點所決定(這句話是從一片論文看到的,但是論文沒有講什么是最優,通過參考其他文章,貌似都是把子樹的根節點作為葉子,也很形象,就是剪掉所有根以下的部分),J為這個替代的葉子節點的錯判個數,但是也要加上0.5,即KJ+0.5。最終是否應該替換的標準為:

被替換子樹的錯誤數-標準差 > 新葉子錯誤數

出現標準差,是因為我們的子樹的錯誤個數是一個隨機變量,經過驗證可以近似看成是二項分布,就可以根據二項分布的標準差公式算出標準差,就可以確定是否應該剪掉這個樹枝了。子樹中有N的實例,就是進行N次試驗,每次實驗的錯誤的概率為e,符合B(N,e)的二項分布,根據公式,均值為Ne,方差為Ne(1-e),標準差為方差開平方。(二項分布的知識在文章最后)網上找到這個案例,來自西北工業大學的一份PPT,我個人覺得PPT最后的結論有誤

PEP案例

這個案例目的是看看T4為根的整個這顆子樹是不是可以被剪掉。樹中每個節點有兩個數字,左邊的代表正確,右邊代表錯誤。比如T4這個節點,說明覆蓋了訓練集的16條數據,其中9條分類正確,7條分類錯誤。我們先來計算替換標準不等式中,關于子樹的部分:子樹有3個葉子節點,分別為T7、T8、T9,因此L=3子樹中一共有16條數據(根據剛才算法說明把三個葉子相加),所以N=16子樹一共有7條錯誤判斷,所以E=7那么根據e的公式e=(7+0.5×3)/ 16 = 8.5 /16 = 0.53根據二項分布的標準差公式,標準差為(16×0.53×(1-0.53))^0.5 = 2.00子樹的錯誤數為“所有葉子實際錯誤數+0.5調整值” = 7 + 0.5×3 = 8.5把子樹剪枝后,只剩下T4,T4的錯誤數為7+0.5=7.5這樣, 8.5-2 < 7.5, 因此不滿足剪枝標準,不能用T4替換整個子樹。

Cost-Complexity Pruning(CCP,代價復雜度剪枝)

CART決策樹算法中用的就是CCP剪枝方法。也是不需要額外的測試數據集。

Minimum Error Pruning(MEP)
Critical Value Pruning(CVP)
Optimal Pruning(OPP)
Cost-Sensitive Decision Tree Pruning(CSDTP)

附錄

二項分布 Binomial Distribution

考察由n次隨機試驗組成的隨機現象,它滿足以下條件:

  • 重復進行n次隨機試驗;
  • n次試驗相互獨立;
  • 每次試驗僅有兩個可能結果;
  • 每次試驗成功的概率為p,失敗的概率為1-p。

在上述四個條件下,設X表示n次獨立重復試驗中成功出現的次數,顯然X是可以取0,1,…,n等n+1個值的離散隨機變量,且它的概率函數為:

二項分布概率公式

這個分布稱為二項分布,記為b(n,p)。

  • 二項分布的均值:E(X)=np
  • 二項分布的方差:Var(X)=np(1-p)。
  • 標準差就是方差開平方

舉個例子比較好理解。扔好多次硬幣就是一個典型的二項分布,符合四項條件:

  • 扔硬幣看正反面是隨機的,我們重復進行好多次,比如扔5次
  • 每次扔的結果沒有前后關聯,相互獨立
  • 每次扔要么正面,要么反面
  • 每次正面(看作成功)概率1/2, 反面(看作失敗)概率1-1/2 = 1/2 ,即這里p=0.5

于是這個實驗就符合B(5,0.5)的二項分布。那么計算扔5次硬幣,出現2次正面的概率,就可以帶入公式來求:P(X=2)= C(5,2)×(0.5)2×(0.5)3 = 31.25%這個實驗的的期望(均值)為np=5×0.5=2.5,意思是:每扔5次,都記錄正面次數,然后扔了好多好多的“5次”,這樣平均的正面次數為2.5次這個實驗的方差為np(1-p)=5×0.5×0.5=1.25,表示與均值的誤差平方和,表示波動情況。多說一句,二項分布在n很大時,趨近于正態分布。

作者:程sir 鏈接:http://www.jianshu.com/p/794d08199e5e 來源:簡書 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387353.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387353.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387353.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡與協議

計算機網絡&#xff1a; TCP/IP中只要是能夠設定IP地址的計算機就成為主機 網絡按其規模可分為&#xff1a; WAN&#xff08;廣域網&#xff09;&#xff1a;覆蓋多個遠距離區域的遠程網絡 MAN&#xff08;城域網&#xff09;&#xff1a;比廣域網小一級&#xff0c;連接整個城…

3.10 十進制轉換為二進制

將十進制整數轉換成二進制數 對于每個n&#xff0c;以11位的寬度右對齊輸出n值&#xff0c;然后輸出"-->"&#xff0c;然后輸出二進制數。 輸入樣例&#xff1a; 2 0 -12 1 輸出樣例&#xff1a; 2-->10 0-->0 -12-->-1100 1-->1 #include<…

對線性回歸、邏輯回歸、各種回歸的概念學習

回歸問題的條件/前提&#xff1a; 1&#xff09; 收集的數據 2&#xff09; 假設的模型&#xff0c;即一個函數&#xff0c;這個函數里含有未知的參數&#xff0c;通過學習&#xff0c;可以估計出參數。然后利用這個模型去預測/分類新的數據。 1. 線性回歸 假設 特征 和 結果 都…

redis的源碼編譯安裝+發布訂閱+RDB持久化

redis的源碼編譯安裝發布訂閱RDB持久化轉載于:https://www.cnblogs.com/zwq-/p/10420455.html

Shell基礎1

0 Shell基礎 0.1 Shell是什么 0.1.1 Shell是什么 Shell是一個命令行解釋器&#xff0c;它為用戶提供了一個向Linux內核發送請求以便運行程序的界面系統級程序&#xff0c;用戶可以用Shell來啟動、掛起、停止甚至編寫一些程序。 硬件 <-內核 <- Shell命令解釋器<-外層應…

centos7自帶數據庫MariaDB重啟和修改密碼

1&#xff1a;MariaDB和mysql差不多是mysql的一個分支&#xff0c;完全兼容mysql的命令。 2&#xff1a;centos 7 中自帶MariaDB&#xff0c; 需要在centos中安裝mysql的時候就需要多注意了。 3&#xff1a;啟動 停止 重啟 MariaDB systemctl start mariadb.service #啟動Maria…

Shell基礎2

0.12 數值運算與運算符 aa11 bb22 cc$aa$bb echo $cc #1122&#xff0c;因為變量默認是字符串類型 1、declare聲明變量類型 declare /- 選項 變量名 選項&#xff1a; - 給變量設定類型屬性 取消變量的類型屬性 -i 將變量聲明為整數型 -x 將變量聲明為環境變量 …

XGBoost入門及實戰

kaggle比賽必備算法XGBoost入門及實戰 xgboost一直在kaggle競賽江湖里被傳為神器&#xff0c;它在對結構化數據的應用占據主導地位&#xff0c;是目前開源的最快最好的工具包&#xff0c;與常見的工具包算法相比速度提高了10倍以上&#xff01; XGBoost is an implementation o…

幾個常用算法的適應場景及其優缺點

機器學習算法太多了&#xff0c;分類、回歸、聚類、推薦、圖像識別領域等等&#xff0c;要想找到一個合適算法真的不容易&#xff0c;所以在實際應用中&#xff0c;我們一般都是采用啟發式學習方式來實驗。通常最開始我們都會選擇大家普遍認同的算法&#xff0c;諸如SVM&#x…

p1012拼數題解

#include<iostream> #include<algorithm> using namespace std; bool cmp(string b,string a) {return ba>ab;}//靈魂在這 int main() {string a[21];int n;cin>>n;for(int i1;i<n;i)cin>>a[i];sort(a1,an1,cmp);for(int i1;i<n;i)cout<&l…

常見算法及問題場景——圖

最短路徑 現實場景 1、一批貨從北京到廣州的的最快&#xff0c;或最省錢的走法。 把路線中各城市當作圖的頂點&#xff0c;各城市之間的花費時間&#xff0c;或金錢當作邊的權重&#xff0c;求兩點之間的最短路徑。 2、在城市群中建一個倉儲基地&#xff0c;建在什么位置可以…

EF ++屬性會更新實體

var lastBaby await _babyRepository.FirstOrDefaultAsync(); lastBaby.sort; -- sort原本為1 -- 最終會生成一條語句更新sort字段 exec sp_executesql NSET NOCOUNT ON;UPDATE [Babies] SET [BirthOrder] p0, [LastModificationTime] p1WHERE [Id] p2;SELECT ROWCOUNT; ,N…

分類算法應用場景實例二十則

1 O2O優惠券使用預測 以優惠券盤活老用戶或吸引新客戶進店消費是O2O的一種重要營銷方式。然而隨機投放的優惠券對多數用戶造成無意義的干擾。對商家而言&#xff0c;濫發的優惠券可能降低品牌聲譽&#xff0c;同時難以估算營銷成本。個性化投放是提高優惠券核銷率的重要技術&am…

Shell03

查看字符數的方法&#xff1a; seq -s " " 100 #以空格為分隔符&#xff0c;輸出從1到100 seq 100 #以換行為分隔符 charsseq -s " " 100 echo $chars echo ${#chars} #統計字符數 echo $(expr length "$chars") #統計字符數 echo $cha…

luogu P3244 [HNOI2015]落憶楓音

傳送門 md這題和矩陣樹定理沒半毛錢關系qwq 首先先不考慮有環,一個\(DAG\)個外向樹個數為\(\prod_{i2}^{n}idg_i(\)就是\(indegree_i)\),因為外向樹每個點入度為一,對于一個點有入度個父親可選,然后乘法原理起來就是答案 現在可能加一條邊會有環,那么答案可以考慮總方案減不合法…

EM算法 案例量則

例子一&#xff1a;理論&#xff1a; 簡版&#xff1a;猜&#xff08;E-step&#xff09;,反思&#xff08;M-step&#xff09;,重復&#xff1b; 啰嗦版&#xff1a; 你知道一些東西&#xff08;觀察的到的數據&#xff09;&#xff0c; 你不知道一些東西&#xff08;觀察不到…

遠程拷貝代碼 指定端口

將本地testdir拷貝到遠程服務器tmp目錄下 scp -r -p 9022 testdir xiaoming192.168.0.2:/tmp/ 轉載于:https://www.cnblogs.com/sea-stream/p/10436199.html

C#編寫TensorFlow人工智能應用 TensorFlowSharp

TensorFlowSharp入門使用C#編寫TensorFlow人工智能應用學習。 TensorFlow簡單介紹 TensorFlow 是谷歌的第二代機器學習系統&#xff0c;按照谷歌所說&#xff0c;在某些基準測試中&#xff0c;TensorFlow的表現比第一代的DistBelief快了2倍。 TensorFlow 內建深度學習的擴展支持…

簡單的MVC與SQL Server Express LocalDB

M模式&#xff1a; 類&#xff0c;表示數據的應用程序和使用驗證邏輯以強制實施針對這些數據的業務規則。V視圖&#xff1a; 應用程序使用動態生成 HTML 響應的模板文件。C控制器&#xff1a; 處理傳入的瀏覽器請求的類中檢索模型數據&#xff0c;然后指定將響應返回到瀏覽器的…

馬爾可夫鏈 (Markov Chain)是什么鬼

作者&#xff1a;紅猴子鏈接&#xff1a;https://www.zhihu.com/question/26665048/answer/157852228來源&#xff1a;知乎著作權歸作者所有。商業轉載請聯系作者獲得授權&#xff0c;非商業轉載請注明出處。馬爾可夫鏈 &#xff08;Markov Chain&#xff09;是什么鬼 它是隨機…