謝邀, 盡量用通俗易懂的語言描述一下, 希望能夠幫助大家理解這玩意.
1. 決策樹本質上是按照某種方法/某些條件對資料進行分類. 正如一般的樹結構, 這個分類是可以不斷巢狀, 按層逐級細分的, 直到滿足某個/某些條件為止. 乙個最簡單的例子是, 對某個資料按照乙個條件進行分類, 這就是最簡單的樹, 可以用很簡單的**實現.
例如有個資料集, 其中乙個指標的直方圖如圖所示, 如果按照該指標將資料集分為a和b兩類的話, 最簡單的方式就是給定乙個閾值40, 小於該閾值的, 則為b, 大於等於該閾值的, 則為a.
**簡單的寫成:
當然, 這個分類的效果很一般, 大概正確率是 79%. 詳細情況見圖:
這種最簡單的分類情況, 就是乙個只有兩個節點的樹, 看起來就是:
在這裡, 簡單粗暴, 但效果並不太好. 於是, 我們燒著樹, 吃著火鍋唱著歌 "決策燃棵樹, 樹在鍋下泣, 本來要生長, 奈何燒太急".
2. 為了讓"決策樹"的決策做的更好, 我們不能滿足於"兩條腿"的樹, 於是, 我們給這棵樹澆灌, 讓它茁壯成長. 比如, 下面就是一棵長得更好的樹:
問題在於怎樣長出這麼一棵"好看"的樹出來呢? 其中一種方法是"貪婪", 也就是, 先設定好規則, 然後不斷進行二分**, 知道滿足預定的條件就截止.
3. "貪婪"演算法還算不錯, 但有其固有的缺陷, 也就是有可能陷入區域性最優的情況. 乙個可能的例子是, 對於某個節點, 再次**會使得整棵樹的效果變差, 那麼這個時候, 樹的生長就該停止了. 但其實這個時候, 如果某個子節點再次生長(**), 效果能夠更好. 比如:
比如上圖, 在case 0的時候, 嘗試對ab進行**, **成ab1和ab2, 見case 1, 發現效果變差, 那麼貪婪演算法就會停止在這個分支的生長. 但其實如果對ab1繼續**, 見case 2, 這時效果有可能變得更好. 但貪婪演算法一般不會嘗試這一步, 於是乎, 錯過了人生中更加美好的時刻.
4. 為了解決"貪婪"存在的一些問題, 一種辦法是, 先"生成"一棵足夠大的樹, 然後對其進行剪枝,看看是否效果能夠更好.如果能夠更好的話, 就把"該枝"給剪了, 留下"殘缺"的樹. 大概的樣子是:
在case 0 的時候, 先生成一棵較大的樹. 然後嘗試著對ab2這個點進行剪枝, 剪去3和4兩個葉子節點, 測試一下效果如何? 測試的結果是效果變差了, 於是該剪去的枝得保留. 然後呢嘗試著對5,6 和7,8 等節點進行剪枝, 發現效果變好, 就繼續,一直剪到保留ac為止, 就是case 2的情況.
5. 怎麼剪枝呢? 當然不能想上述一眼傻傻的一點點試, 有乙個流行的方法叫"成本-複雜度剪枝". 大概是先生成一棵足夠大的樹t0, 然後將這棵樹進行剪枝, 然後通過設定好的標準來衡量何時終止剪枝. 這個標準就是題主截屏中的公式:
在這個公式中,
6. 接下來說
7. 通過前面的敘述, 大概能夠總結出,
8. 繼續6對
這裡的k是分類的類別, 表示的是多(k)分類的情況, 如果k=2的話就是二分類了.
上圖中mce是指誤分率, 由於中間有個折點(在0.5的位置), 導致了其不可分. 而熵則是平滑的曲線.
差不多就這樣了, 希望看到的朋友能夠立即. 如有問題歡迎討論.
決策樹的損失函式是什麼?怎麼理解?
在學習決策樹的過程中,會存在損失函式。損失函式是什麼呢?如何理解?為了避免出現過擬合的現象,我們要對決策樹進行剪枝。決策樹的剪枝類似一種引數正則化的過程,其選擇正則化的引數是樹的葉子節點的個數。設決策樹 t 的葉子節點個數為 t t 是樹 t 的葉子節點,該葉節點有 nt 個樣本點,其中 k 類的樣...
gbdt決策樹的理解
參考 1 2 3 cart回歸樹建立節點時,是最小化均方誤差來求,cart回歸樹的度量目標是,對於任意劃分特徵a,對應的任意劃分點s兩邊劃分成的資料集d1和d2,求出使d1和d2各自集合的均方差最小,同時d1和d2的均方差之和最小所對應的特徵和特徵值劃分點。所以最後求的值為均值。gbdt在建立單棵樹...
Python 比較樸素貝葉斯 決策樹 K均值效能
演算法效能的比較 1 分別讀取 連續屬性 資料夾中的七個資料集合 2 對於每個資料集分別利用決策樹 樸素貝葉斯以及近鄰分類演算法建模 近鄰數k如何確定呢?並利用五折交叉驗證計算每個模型的分類精度。3 分別利用符號秩檢驗,比較一下決策樹與樸素貝葉斯之間 決策樹與k近鄰分類演算法之間 樸素貝葉斯與k近鄰...