隨機森林基本原理

2021-09-26 16:36:34 字數 2004 閱讀 3504

整合學習(ensemble)思想是為了解決單個模型或者某一組引數的模型所固有的缺陷,從而整合起更多的模型,取長補短,避免侷限性。隨機森林就是整合學習思想下的產物,將許多棵決策樹整合成森林,並合起來用來**最終結果。

首先,介紹自助法(bootstrap),這個奇怪的名字**於文學作品 the adventures of baron munchausen(吹牛大王歷險記),這個作品中的乙個角色用提著自己鞋帶的方法把自己從湖底下提了上來。因此採用意譯的方式,叫做自助法。自助法顧名思義,是這樣一種方法:即從樣本自身中再生成很多可用的同等規模的新樣本,從自己中產生和自己類似的,所以叫做自助,即不借助其他樣本資料。自助法的具體含義如下:

如果我們有個大小為n的樣本,我們希望從中得到m個大小為n的樣本用來訓練。那麼我們可以這樣做:首先,在n個樣本裡隨機抽出乙個樣本x1,然後記下來,放回去,再抽出乙個x2,… ,這樣重複n次,即可得到n的新樣本,這個新樣本裡可能有重複的。重複m次,就得到了m個這樣的樣本。實際上就是乙個有放回的隨機抽樣問題。每乙個樣本在每一次抽的時候有同樣的概率(1/n)被抽中。

這個方法在樣本比較小的時候很有用,比如我們的樣本很小,但是我們希望留出一部分用來做驗證,那如果傳統方法做train-validation的分割的話,樣本就更小了,bias會更大,這是不希望的。而自助法不會降低訓練樣本的規模,又能留出驗證集(因為訓練集有重複的,但是這種重複又是隨機的),因此有一定的優勢。

至於自助法能留出多少驗證,或者說,m個樣本的每個新樣本裡比原來的樣本少了多少?可以這樣計算:每抽一次,任何乙個樣本沒抽中的概率為 (1-1/n),一共抽了n次,所以任何乙個樣本沒進入新樣本的概率為(1-1/n)^n。那麼從統計意義上來說,就意味著大概有(1-1/n)^n這麼大比例的樣本作為驗證集。當n→inf時,這個值大概是1/e,36.8%。以這些為驗證集的方式叫做包外估計(out of bag estimate)

bagging的名稱**於 (b**ootstrap **agg**regat**ing),意思是自助抽樣整合,這種方法將訓練集分成m個新的訓練集,然後在每個新訓練集上構建乙個模型,各自不相干,最後**時我們將這個m個模型的結果進行整合,得到最終結果。整合方式就是:分類問題用majority voting,回歸用均值。

bagging和boosting是整合學習兩大陣營,之後在總結兩者的異同。

決策樹是用樹的結構來構建分類模型,每個節點代表著乙個屬性,根據這個屬性的劃分,進入這個節點的兒子節點,直至葉子節點,每個葉子節點都表徵著一定的類別,從而達到分類的目的。

常用的決策樹有id4,c4.5,cart等。在生成樹的過程中,需要選擇用那個特徵進行剖分,一般來說,選取的原則是,分開後能盡可能地提公升純度,可以用資訊增益,增益率,以及基尼係數等指標來衡量。如果是一棵樹的話,為了避免過擬合,還要進行剪枝(prunning),取消那些可能會導致驗證集誤差上公升的節點。

隨機森林實際上是一種特殊的bagging方法,它將決策樹用作bagging中的模型。首先,用bootstrap方法生成m個訓練集,然後,對於每個訓練集,構造一顆決策樹,在節點找特徵進行**的時候,並不是對所有特徵找到能使得指標(如資訊增益)最大的,而是在特徵中隨機抽取一部分特徵,在抽到的特徵中間找到最優解,應用於節點,進行**。隨機森林的方法由於有了bagging,也就是整合的思想在,實際上相當於對於樣本和特徵都進行了取樣(如果把訓練資料看成矩陣,就像實際中常見的那樣,那麼就是乙個行和列都進行取樣的過程),所以可以避免過擬合。

prediction階段的方法就是bagging的策略,分類投票,回歸均值。

2023年02月23日23:47:44

reference:

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...

8 2 1 基本原理

乙個舞台動畫物件在包含許多舞台資訊 出現在何處,佔多大面積,處在什麼角度,是否可見 這些資訊分別儲存在動畫物件的屬性中。在 中讀取這些屬性可以了解物件的位置 大小 角度等狀態資訊 修改這些屬性可以改變物件的位置 大小 角度等狀態。如果從資料的角度去理解,動畫就是在固定時間間隔點不斷修改動畫物件某項屬...

Csocket基本原理

我通過幾個採用 csocket 類編寫並基於 client server 客戶端 服務端 的網路聊天和傳輸檔案的程式 在除錯這些程式的過程中,追蹤深入至 csocket 類核心原始碼 sockcore.cpp 對於csocket 類的執行機制可謂是一覽無遺,並且對於阻塞和非阻塞方式下的 socket...