白話決策樹

2022-03-02 20:55:03 字數 3209 閱讀 2905

有一天,小明無聊,對宿舍玩cs的舍友進行統計,結果剛記下四行,被舍友認為影響發揮,給踢到床下去了,讓我們看看可憐的小明的記錄:

-----------------------------

** | 子彈數量 | 血 | 行為

-----------------------------

機槍 |    多    | 少 | 戰鬥

機槍 |    少    | 多 | 逃跑

小刀 |    少    | 多 | 戰鬥

小刀 |    少    | 少 | 逃跑

-----------------------------

為了對得起小明記錄的這四條記錄,我們對其進行決策樹分析,從資料中看:

1. 如果乙個玩家子彈很多,那麼即使血少他也會戰鬥,如果子彈少的話,即使血多,他也會逃跑隱蔽起來;

2. 那我們再看子彈少的情況下,**靠刀子,當血多時候,他還是會打一打得,但是血少,就立即逃跑隱蔽了。

這是我們大腦直覺上去分析,既然本文我是想聊一聊決策樹,那麼我們就用決策樹來對小明的這些資料小試牛刀一下,順便來慰藉一下小明(從小到大我們已經看過無數的小明了,這裡再借用一下大度的小明)。

我們現在將資料分為兩塊:

x =

y =

我們建立這顆決策樹的目的就是,讓計算機自動去尋找最合適的對映關係,即:y = f(x),所謂聽上去大雅的「資料探勘」學科,幹得也差不多就是這回事,x我們稱之為樣本(sample),y我們稱之為結果(action)(行為/類)。

樣本是多維的,x = ,如本例:x = ,我們就是要通過這些不同維度的觀測記錄資料,和應對的不同結果,找到規律(對映關係),舉個例子:

x = -> y =

x = -> y =

這樣來說,x的多維不同的資料,大個比方,更像是很多大臣,那麼我們就是要根據這些大臣的意見,來決策,如本例:

>> 左大臣:**型別

>> 中大臣:子彈數量

>> 右大臣:血

這些大臣每個人都有想法,左右著皇帝繼續戰鬥還是撤退,但是三個也不能全信,那麼我們就要根據他們的陳年老帳(訓練樣本)來評判他們的話語的重要性,當然,優先順序高的肯定話語是有重量的,我們先提前來預覽一下這個例子訓練出來的決策樹的樣子:

這個根據小明的資料訓練出來的決策樹是不是和我們剛才拍腦門分析出來的結果差不多呢?看,子彈多就開打,子彈少,在看看用什麼**,如果又沒子彈又用機槍,那鐵定跑,如果用小刀,在掂量一下自己血厚不厚,厚則打,不厚則逃,看來決策樹分析的結果還是可以的啊,接下來,我們來研究研究,計算機(這個只會重複人們給它設定的**的傢伙)是如何實現這樣的分析的。

既然是三個大臣提意見,那麼我們要分析一下歷史資料(訓練資料)他們哪個話更靠譜:

我們先單純的看看左大臣的歷史戰績(統計訓練樣本):

機槍 -> 戰鬥

機槍 -> 逃跑

小刀 -> 戰鬥

小刀 -> 逃跑

用機槍,你戰鬥逃跑的概率都是50%,用刀子,你亦似打似逃!看來這個大臣立場不堅定啊!

再看看中大臣的:

子彈多 -> 戰鬥

子彈少 -> 逃跑

子彈少 -> 戰鬥

子彈少 -> 逃跑

用機槍,你戰鬥概率是100%,用刀子,你33.3%打,你66.6%撤!這位大臣似乎堅定了一些。

再看看右大臣的:

血少 -> 戰鬥

血多 -> 逃跑

血多 -> 戰鬥

血少 -> 逃跑

和左大臣一樣,立場不堅定,50:50啊!

這樣,中大臣的話的重量就提公升了,因此決策書的第一層就重用中大臣吧(中大臣變成一品大員)

計算機是怎麼來做到這一步的呢?且讓我一步一步講:

決策樹訓練中,有乙個很重要的尺子,來衡量大臣的可信度,這個尺子,就是資訊理論的熵(entropy),這個熵是何許人也,竟然朝廷大臣的可信度竟然用次來衡量,讓我們對他做個自我介紹吧:

熵,洋名為(entropy),乃測量資訊的混亂程度為職,縱橫科學界各門學術之中,為人低調,儉樸,就乙個很短的公式:e = sum(-p(i)*log(p(i)))【注:好像是錯的】,i=1:n(n類結果,如本例兩種,戰鬥或逃跑),當資訊一致,所有樣本都屬於乙個類別i,那麼熵為0,如果樣本完全隨機,那麼熵為1,表明這個臣子對這種狀態的**就是胡言亂語。【注:p表示概率,log的底數是可能結果的種類麼?】

ok,熵,告訴我你對這個資料的看法:

e(機槍) = -(1/2)log2(1/2) - (1/2)log(1/2) = 0.5 + 0.5 = 1

e(小刀) = -(1/2)log2(1/2) - (1/2)log(1/2) = 0.5 + 0.5 = 1

e(子彈多) = -(1/1)log2(1/1) - (0/1)log(0/1) = 0 + 0 = 0

e(子彈少) = -(1/3)log2(1/3) - (2/3)log(2/3) = 0.5283 + 0.39 = 0.9183

e(血多) = -(1/2)log2(1/2) - (1/2)log(1/2) = 0.5 + 0.5 = 1

e(血少) = -(1/2)log2(1/2) - (1/2)log(1/2) = 0.5 + 0.5 = 1

那麼我們怎麼用這個熵來衡量大臣(每維資料)的可信度呢,這裡還要再引出一位仁兄,其是熵的上級,他熟知熵的能力,很會用熵,他就是資訊增益(information gain),我們來看看這位上級是如何用熵來衡量的:

gain(sample,action) = e(sample) - sum(|sample(v)|/sample * e(sample(v)))

【注:e(s)恆等於1麼?sample(v)/sample:出現v結果/行為的概率】

ok,information gain,說說你是怎麼評估這個例子的三位大臣的!

gain(**型別) = e(s) - (2/4)*e(機槍) - (2/4)*e(小刀) = 1 - (2/4)*1 - (2/4)*1 = 0

gain(子彈數量) = e(s) - (1/4)*e(子彈多) - (3/4)*e(子彈少) = 1 - (1/4)*0 - (3/4)*0.9183 = 0.3113

gain(血量) = e(s) - (2/4)*e(血多) - (2/4)*e(血少) = 1 - (2/4)*1 - (2/4)*1 = 0

接著,計算機通過資訊增益結果,選擇最大的,作為一品大員

且看一品大員對子彈多的情況下料事如神(暫且不說本例樣本少),但是其在子彈少的情況下,決策還是不行的,那麼,再用同樣的方法,再去選擇二品,三品,這就是決策樹的訓練,呵呵,不知有沒有幫助各位理解

摘自:

gini係數 決策樹 白話決策樹 評價

首先輸入以下 from sklearn.datasets import load winefrom sklearn.model selection import train test splitfrom sklearn import treefrom six import stringioimpor...

大白話決策樹分類

3 決策樹的減枝處理 4 決策樹中的連續值和缺失值 5 多變數的決策樹 6 sklearn中的決策樹 總結決策樹 decision tree 是一種基本的分類與回歸方法,此處主要討論分類的決策樹。但是對於決策樹回歸,跟決策樹分類差不多,是在決策樹分類的基礎下,獲取各各葉子結點 類 的均值。1 構建根...

決策樹和CART決策樹

首先簡單介紹下決策樹 說到決策樹肯定離不開資訊熵 什麼是資訊熵 不要被這名字唬住,其實很簡單 乙個不太可能的時間居然發生了,要比乙個非常可能的時間發生提供更多的資訊。訊息說 今天早上太陽公升起 資訊量是很少的,以至於沒有必要傳送。但另一條訊息說 今天早上日食 資訊量就很豐富。概率越大資訊量就越少,與...