真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

關(guān)于決策樹算法的Python示例分析

本篇文章給大家分享的是有關(guān)關(guān)于決策樹算法的Python示例分析,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)公司長(zhǎng)期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為達(dá)孜企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)達(dá)孜網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

一. 概述

前面的一篇Python學(xué)習(xí)教程有跟大家介紹了決策樹的一些基本概念,包括樹的基本知識(shí)以及信息熵的相關(guān)內(nèi)容,那么這次,我們就通過一個(gè)例子,來具體展示決策樹的工作原理,以及信息熵在其中承擔(dān)的角色。

有一點(diǎn)得先說一下,決策樹在優(yōu)化過程中,有3個(gè)經(jīng)典的算法,分別是ID3,C4.5,和CART。后面的算法都是基于前面算法的一些不足進(jìn)行改進(jìn)的,我們這次的Python學(xué)習(xí)教程就先跟大家講ID3算法,后面會(huì)再說說它的不足與改進(jìn)。

二. 一個(gè)例子

眾所周知,早上要不要賴床是一個(gè)很深刻的問題。它取決于多個(gè)變量,我每天早上起床都在想今天能不能找個(gè)什么理由不上班啊~哈哈哈,下面就讓我們看看小明的賴床習(xí)慣吧。

關(guān)于決策樹算法的Python示例分析

這里我們隨機(jī)抽了一年中14天小明的賴床情況?,F(xiàn)在我們可以根據(jù)這些數(shù)據(jù)來構(gòu)建一顆決策樹。

可以發(fā)現(xiàn),數(shù)據(jù)中有三個(gè)屬性會(huì)影響到最終的結(jié)果,分別是,季節(jié),時(shí)間是否過8點(diǎn),風(fēng)力情況。

關(guān)于決策樹算法的Python示例分析

要構(gòu)建一顆決策樹,首先我們要找到它的根,按照上一節(jié)所說,我們需要計(jì)算每一個(gè)屬性的信息熵。

在計(jì)算每一個(gè)屬性的信息熵之前,我們需要先根據(jù)歷史數(shù)據(jù),計(jì)算沒有任何屬性影響下的賴床信息熵。從數(shù)據(jù)我們可以知道,14天中,有賴床為8天,不賴床為6天。則

p(賴床) = 8 / 12.

p(不賴床) = 6 / 12.

信息熵為

H(賴床) = -(p(賴床) * log(p(賴床)) + p(不賴床) * log(p(不賴床))) = 0.89

接下來就可以來計(jì)算每個(gè)屬性的信息熵了,這里有三個(gè)屬性,即季節(jié),是否過早上8點(diǎn),風(fēng)力情況,我們需要計(jì)算三個(gè)屬性的每個(gè)屬性在不同情況下,賴床和不賴床的概率,以及熵值。

說得有點(diǎn)繞,我們先以風(fēng)力情況這一屬性來計(jì)算它的信息熵是多少,風(fēng)力情況有三種,我們分別計(jì)算三種情況下的熵值。

關(guān)于決策樹算法的Python示例分析

風(fēng)力情況為 breeze 時(shí),有 4 / 5 的概率會(huì)賴床,而 1 / 5 的概率不會(huì)賴床,它的熵為 entropy(breeze) = -(p(breeze,賴床) * log(p(breeze,賴床)) + p(breeze,不賴床) * log(p(breeze,不賴床))) 0.722。

風(fēng)力情況為 no wind 時(shí),和上面一樣的計(jì)算,熵值為 entropy(no wind) = 0.811

風(fēng)力情況為 gale 時(shí),熵值為 entropy(gale) = 0.918

最終,風(fēng)力情況這一屬性的熵值為其對(duì)應(yīng)各個(gè)值的熵值乘以這些值對(duì)應(yīng)頻率。

H(風(fēng)力情況) = 5/12 * entropy(breeze) + 4/12 * entropy(no wind) + 3/12 * entropy(gale) = 0.801

還記得嗎,一開始什么屬性沒有,賴床的熵是H(賴床)=0.89?,F(xiàn)在加入風(fēng)力情況這一屬性后,賴床的熵下降到了0.801。這說明信息變得更加清晰,我們的分類效果越來越好。

關(guān)于決策樹算法的Python示例分析

以同樣的計(jì)算方式,我們可以求出另外兩個(gè)屬性的信息熵:

H(季節(jié)) = 0.56

H(是否過 8 點(diǎn)) = 0.748

通過它們的信息熵,我們可以計(jì)算出每個(gè)屬性的信息增益。沒錯(cuò),這里又出現(xiàn)一個(gè)新名詞,信息增益。不過它不難理解,信息增益就是拿上一步的信息熵(這里就是最原始賴床情況的信息熵)減去選定屬性的信息熵,即

信息增益 g(季節(jié)) = H(賴床) - H(季節(jié)) = 0.33

這樣我們就能計(jì)算每個(gè)屬性的信息增益,然后選取信息增益最大的那個(gè)作為根節(jié)點(diǎn)就行了,在這個(gè)例子中,很明顯,信息增益最大的是季節(jié)這個(gè)屬性。

選完根節(jié)點(diǎn)怎么辦?把每個(gè)節(jié)點(diǎn)當(dāng)作一顆新的樹,挑選剩下的屬性,重復(fù)上面的步驟就可以啦。

關(guān)于決策樹算法的Python示例分析

當(dāng)全部都遍歷完之后,一顆完整的樹也就構(gòu)建出來了,這個(gè)例子中,我們最終構(gòu)造的樹會(huì)是這個(gè)樣子的:

關(guān)于決策樹算法的Python示例分析

三. 過擬合與剪枝

在構(gòu)建決策樹的時(shí)候,我們的期望是構(gòu)建一顆最矮的決策樹,為什么需要構(gòu)建最矮呢?這是因?yàn)槲覀円苊膺^擬合的情況。

什么是過擬合呢,下圖是一個(gè)分類問題的小例子,左邊是正常的分類結(jié)果,右邊是過擬合的分類結(jié)果。

關(guān)于決策樹算法的Python示例分析

在現(xiàn)實(shí)世界中,我們的數(shù)據(jù)通常不會(huì)很完美,數(shù)據(jù)集里面可能會(huì)有一些錯(cuò)誤的數(shù)據(jù),或是一些比較奇葩的數(shù)據(jù)。如上圖中的藍(lán)色方塊,正常情況下我們是允許一定的誤差,追求的是普適性,就是要適應(yīng)大多數(shù)情況。但過擬合的時(shí)候,會(huì)過度追求正確性,導(dǎo)致普適性很差。

剪枝,即減少樹的高度就是為了解決過擬合,你想想看,過擬合的情況下,決策樹是能夠?qū)o定樣本中的每一個(gè)屬性有一個(gè)精準(zhǔn)的分類的,但太過精準(zhǔn)就會(huì)導(dǎo)致上面圖中的那種情況,喪失了普適性。

而剪枝又分兩種方法,預(yù)剪枝干,和后剪枝。這兩種方法其實(shí)還是蠻好理解的,一種是自頂向下,一種是自底向上。我們分別來看看。

預(yù)剪枝

預(yù)剪枝其實(shí)你可以想象成是一種自頂向下的方法。在構(gòu)建過程中,我們會(huì)設(shè)定一個(gè)高度,當(dāng)達(dá)構(gòu)建的樹達(dá)到那個(gè)高度的時(shí)候呢,我們就停止建立決策樹,這就是預(yù)剪枝的基本原理。

后剪枝

后剪枝呢,其實(shí)就是一種自底向上的方法。它會(huì)先任由決策樹構(gòu)建完成,構(gòu)建完成后呢,就會(huì)從底部開始,判斷哪些枝干是應(yīng)該剪掉的。

注意到預(yù)剪枝和后剪枝的最大區(qū)別沒有,預(yù)剪枝是提前停止,而后剪枝是讓決策樹構(gòu)建完成的,所以從性能上說,預(yù)剪枝是會(huì)更塊一些,后剪枝呢則可以更加精確。

ID3決策樹算法的不足與改進(jìn)

ID3決策樹不足

用ID3算法來構(gòu)建決策樹固然比較簡(jiǎn)單,但這個(gè)算法卻有一個(gè)問題,ID3構(gòu)建的決策樹會(huì)偏袒取值較多的屬性。為什么會(huì)有這種現(xiàn)象呢?還是舉上面的例子,假如我們加入了一個(gè)屬性,日期。一年有365天,如果我們真的以這個(gè)屬性作為劃分依據(jù)的話,那么每一天會(huì)不會(huì)賴床的結(jié)果就會(huì)很清晰,因?yàn)槊恳惶斓臉颖竞苌?,?huì)顯得一目了然。這樣一來信息增益會(huì)很大,但會(huì)出現(xiàn)上面說的過擬合情況,你覺得這種情況可以泛化到其他情況嗎?顯然是不行的!

C4.5決策樹

針對(duì)ID3決策樹的這個(gè)問題,提出了另一種算法C4.5構(gòu)建決策樹。

C4.5決策樹中引入了一個(gè)新的概念,之前不是用信息增益來選哪個(gè)屬性來作為枝干嘛,現(xiàn)在我們用增益率來選!

關(guān)于決策樹算法的Python示例分析

關(guān)于決策樹算法的Python示例分析

這里面,IV(a)這個(gè),當(dāng)屬性可選的值越多(比如一年可取365個(gè)日期)的時(shí)候,它的值越大。

而IV(a)值越大,增益率顯然更小,這就出現(xiàn)新問題了。C4.5決策樹跟ID3決策樹反過來,它更偏袒屬性可選值少的屬性。這就很麻煩了,那么有沒有一種更加公正客觀的決策樹算法呢?有的??!

CART 決策樹

上面說到,ID3決策樹用信息增益作為屬性選取,C4.5用增益率作為屬性選取。但它們都有各自的缺陷,所以最終提出了CART,目前sklearn中用到的決策樹算法也是CART。CART決策樹用的是另一個(gè)東西作為屬性選取的標(biāo)準(zhǔn),那就是基尼系數(shù)。

關(guān)于決策樹算法的Python示例分析

關(guān)于決策樹算法的Python示例分析

第一條公式中pk表示的是每個(gè)屬性的可選值,將這些可選值計(jì)算后累加。這條公式和信息增益的結(jié)果其實(shí)是類似的,當(dāng)屬性分布越平均,也就是信息越模糊的時(shí)候,基尼系數(shù)值會(huì)更大,反之則更小。但這種計(jì)算方法,每次都只用二分分類的方式進(jìn)行計(jì)算。比如說上面例子中的季節(jié)屬性,有春夏秋冬四個(gè)可選值(春,夏,秋,冬)。那么計(jì)算春季的時(shí)候就會(huì)按二分的方式計(jì)算(春,(夏,秋,冬))。而后面其他步驟與ID3類似。通過這種計(jì)算,可以較好得規(guī)避ID3決策樹的缺陷。

所以如果用CART算法訓(xùn)練出來的決策樹,會(huì)和我們上面ID3訓(xùn)練出來的決策樹有些不一樣。

以上就是關(guān)于決策樹算法的Python示例分析,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站題目:關(guān)于決策樹算法的Python示例分析
瀏覽路徑:http://weahome.cn/article/pgjssd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部