機器學習(6)——決策樹

前言:

通過第前面的學習介紹了機器學習回歸模型創(chuàng)建的流程,并且知道了機器學習要做的事情是找到目標函數(shù)掀鹅,優(yōu)化它怯邪,通過每次迭代都使目標函數(shù)值最小缔莲,最優(yōu)解就是目標函數(shù)最小化時侯對應的模型參數(shù)唱较。而這一章會介紹一種和回歸模型流程相反的模型—決策樹扎唾,它是通過建立樹模型之后,才得到的損失函數(shù)南缓,并且成為衡量決策樹模型的指標胸遇。有時候數(shù)據(jù)特征眾多且巨大,可以利用這種直觀的樹結(jié)構(gòu)對數(shù)據(jù)特征進行切分汉形,然后再構(gòu)建模型纸镊。

本章主要涉及到的知識點有:

  • 信息熵

  • 決策樹

  • 決策樹優(yōu)化

  • 樹剪枝算法

  • 決策樹可視化

算法思想:從決策到?jīng)Q策樹

本節(jié)首先通過我們做決策時候的經(jīng)歷引出決策樹算法的基本思想,然后介紹決策樹的基本概念概疆。

決策

首先來看什么是決策逗威。我們在生活中經(jīng)常會依靠各種信息做出各種決策,比如說選擇大學岔冀,選擇專業(yè)凯旭,找工作,找對象……使套。又或者你過年回家經(jīng)常就會碰到這樣的問題:

母親:給你介紹個對象罐呼。

你:年紀多大了?

母親:26侦高。

你:長的帥不帥嫉柴?

母親:挺帥的。

你:在哪工作矫膨?

母親:和你在一個城市 

你:干什么呢差凹?

母親:聽說是程序員。

你:那好侧馅,我去見見危尿。

這個時候你在做決策的時候就運用了決策樹的核心思想。通過“對象”的許多特征馁痴,你可以決定見或者不見谊娇。

決策的過程為我們理解決策樹的建立提供了很大的幫助。計算機是通過數(shù)據(jù)來對事情做出預測济欢,下面給一個更加直觀的例子如圖:
能否償還債務(wù)表

通過給出10組數(shù)據(jù)來構(gòu)建決策樹判斷是否能償還貸款債務(wù)。

依據(jù)決策畫出決策樹如下:
能否償還債務(wù)決策樹

中紅色結(jié)點(根結(jié)點)表示判斷條件小渊,橙色結(jié)點(葉子結(jié)點)表示決策結(jié)果法褥。通過數(shù)據(jù)得到?jīng)Q策樹的過程叫決策樹的構(gòu)建。
注意:尋找最優(yōu)根節(jié)點和使得葉子節(jié)點最優(yōu)化是決策樹算法的最主要的任務(wù)酬屉。這種注意技巧兩頁必須有一個半等。

決策樹

  1. 定義

基于上面的理解我們可以給出決策樹的定義:

決策樹( Decision tree)是在已知各種情況發(fā)生概率的基礎(chǔ)上,通過構(gòu)建決策樹來進行分析的一種方式,是一種直觀應用概率分析的一種圖解法;決策樹是一種預測模型,代表的是對象屬性與對象值之間的映射關(guān)系;決策樹是-種樹形結(jié)構(gòu),其中每個內(nèi)部節(jié)點表示—個屬性的測試,每個分支表示一個測試輸出,每個葉節(jié)點代表一種類別;決策樹是一種非常常用的有監(jiān)督的分類算法憔狞。

注意:“內(nèi)部節(jié)點”和“葉子節(jié)點”
決策樹的決策過程就是從根節(jié)點開始,測試待分類項中對應的特征屬性,并按照其值選擇輸出分支,直到葉子節(jié)點,將葉子節(jié)點的存放的類別作為決策結(jié)果翘县。
決策樹分為兩大類:分類樹和回歸樹,前者用于分類標簽值,后者用于預測連續(xù)值,常用算法有l(wèi)D3泉瞻、C45咙鞍、CART等

2.決策樹構(gòu)建

決策樹算法的重點就是決策樹的構(gòu)造;決策樹的構(gòu)造就是進行屬性選擇度量,確定各個特征屬性之間的拓撲結(jié)構(gòu)(樹結(jié)構(gòu));構(gòu)建決策樹的關(guān)鍵步驟就是分裂屬性,分裂屬性是指在某個卡點按照某一類特征屬性的不同劃分構(gòu)建不同的分支,其目標就是讓各個分裂子集盡可能的純(讓一個分裂子類中待分類的項盡可能的屬于同一個類別):
注意:尋找“分裂屬性”以及使得“葉子節(jié)點”更“純”
構(gòu)建步驟如下:

q 1.將所有的特征看成一個一個的節(jié)點;

q 2.遍歷每個特征的每一種分割方式,找到最好的分割點;將數(shù)據(jù)劃分為不同的子節(jié)點,eg:N1、N2切距、…朽缎、Nm計算劃分之后所有子節(jié)點的純度信息;

q 3.對第二步產(chǎn)生的分割,選擇出最優(yōu)的特征以及最優(yōu)的劃分方式;得出最終的子節(jié)點:N1、N2.谜悟、……话肖、Nm

q 4對子節(jié)點N1、N22Nm分別繼續(xù)執(zhí)行2-3步,直到每個最終的子節(jié)點都足夠純

3.決策樹屬性類型

根據(jù)特征屬性的類型不同,在構(gòu)建決策樹的時候,采用不同的方式,具體如下:

q 屬性是離散值,而且不要求生成的是二叉決策樹,此時一個屬性就是一個分支

q 屬性是離散值,而且要求生成的是二叉決策樹,此時使用屬性劃分的子集進行測試,按照“屬于此子集”和“不屬于此子集”分成兩個分支

q 屬性是連續(xù)值,可以確定一個值作為分裂點 split point,按照> split point和<= split point生成兩個分支

例如:上面例子中的“年收入”就是連續(xù)型的屬性赌躺,而房產(chǎn)和婚姻狀況就是離散型屬性狼牺。

4.決策樹分割屬性選擇

決策樹算法是一種“貪心"算法策略,只考慮在當前數(shù)據(jù)特征情況下的最好分割方式,不能進行回溯操作羡儿。
對于整體的數(shù)據(jù)集而言,按照所有的特征屬性進行劃分操作,對所有劃分操作的結(jié)果集的“純度”進行比較,選擇“純度”越高的特征屬性作為當前需要分割的數(shù)據(jù)集進行分割操作,持續(xù)迭代,直到得到最終結(jié)果礼患。決策樹是通過“純度”來選擇分割特征屬性點的。

信息熵

決策樹最主要的目的是尋找最合適的根節(jié)點和最純的葉子節(jié)點掠归,本節(jié)先通過比特化這個例子引出信息熵的這個概念缅叠,從而為尋求合適根節(jié)點找到合適的數(shù)學公式。

比特化

我們工作的計算機中用0和1傳遞信息虏冻,假如我們要傳遞這樣一組字母’ABAACADAAA’,用如圖8.2.1.1編碼進行傳遞肤粱,用兩個bit位表示一個隨機變量,傳遞的序列為:00010000100011000000
編碼圖

每個字母平均用兩個用2個bit位厨相。

然而用如圖8.2.2.2編碼進行傳遞领曼,傳遞的序列為:010001100111000
編碼圖2

每個變量平均用的bit位數(shù)量計算如圖8.2.3所示:
編碼公式

這正好香農(nóng)提出的香農(nóng)熵的概念很相似。

信息熵

又叫香農(nóng)熵蛮穿,是香農(nóng)在1948年引入的一個概念庶骄,他指出,一個系統(tǒng)越是有序践磅,信息熵就越低单刁,一個系統(tǒng)越混亂信息熵就越高,信息熵被認為是一個系統(tǒng)有序程度的度量府适。

1.信息量

指一個樣本所蘊含的信息羔飞,如果一個事件發(fā)生的概率越大,那么就認為該事件所蘊含的信息量越少檐春。例如:

極端情況下逻淌,“太陽從東邊升起”,因為是確定事件疟暖,所以不攜帶任何信息卡儒。

“昨兒逛街碰上了周杰倫”,這句話就包含很多信息

2.信息熵

信息熵公式如圖所示:
信息熵公式

隨機變量X中的有m個事件,每個事件平均需要bit位的個數(shù)就是信息熵得概念朋贬。如果某一個事件的概率特別大凯楔,那么該變量蘊含的信息量就會變少,從而信息熵就會變小锦募。例子如下:

賽馬比賽中摆屯,有兩組賽馬共八匹,獲勝的概率如圖:
賽馬信息

對于第一組而言概率一樣糠亩,很難猜測哪匹馬會贏虐骑,對于第二組來說,很明顯可以得出結(jié)論A馬更容易獲勝赎线。算出信息熵第一組H(X)=2;第二組H(X)=1.336

條件熵(H(Y|X))

總體來說就是熵的期望廷没。

1.定義

給定條件X的情況下,隨機變量Y的熵就叫條件熵:

例如圖所示:
專業(yè)信息

專業(yè)(X為數(shù)學時)Y的信息熵H(Y|X=數(shù)學)=1在給定條件X的情況下垂寥,所有不同x值的情況下Y的信息上的平均值叫做條件熵颠黎。上述例子中求得的條件熵的結(jié)果如圖所示:
image.png

決策樹模型構(gòu)建

決策樹量化純度

問題一:前面算法思想里面提到了,決策樹模型的關(guān)鍵是分割屬性使得最終的葉子節(jié)點的純度越“純”滞项,可是如何衡量葉子節(jié)點的純度呢狭归?
問題二:另外屬性的分割是決策樹算法的另一個要面對的重要問題,那么如何進行屬性分割呢文判?
通過上面的問題我們給出信息增益度的概念

1.信息增益度

結(jié)合信息熵的概念可以得知过椎,信息熵越小,葉子節(jié)點中某一事件的概率越大戏仓,我們可以認為此葉子節(jié)點就越純疚宇,所以信息熵可以是衡量葉子節(jié)點純度的一個指標。信息熵公式如上圖所示赏殃。
當計算出各個特征屬性的量化純度值后使用信息增益度來選擇岀當前數(shù)據(jù)集的分割特征屬性;如果信息增益度的值越大,表示在該特征屬性上會損失的純度越大那么該屬性就越應該在決策樹的上層,計算公式為:
Gain=△=H(D)-H(D|A)
Gan為A為特征對訓練數(shù)據(jù)集D的信息增益,它為集合D的經(jīng)驗熵HD)與特征A給定條件下D的經(jīng)驗條件熵HDA)之差敷待。此外我們評估葉子純度指標還有兩個,分別是gini系數(shù)和錯誤率

2.決策樹算法的停止

決策樹構(gòu)建的過程是一個遞歸的過程,所以必須給定停止條件,否則過程將不會迸行停止,一般情況有兩種停止條件:

q 當每個子節(jié)點只有一種類型的時候停止構(gòu)建

q 當前節(jié)點中記錄數(shù)小于某個閾值,同時迭代次數(shù)達到給定值時,停止構(gòu)建過程,此時使用max(P(i)作為節(jié)點的對應類型

方式一可能會使樹的節(jié)點過多,導致過擬合 Overfiting)等問題;比較常用的方式是使用方式二作為停止條件

3.決策樹算法評估

和分類算法一樣嗓奢,可以采用通用的讼撒,準確率,召回率股耽,F(xiàn)1等指標進行評估根盒。

可是和別的分類算法不同的是可以采用葉子節(jié)點的純度來評估算法效果,葉子純度值和越小物蝙,則分類的越清楚炎滞,算法越好,公式如圖:
image.png

當然了诬乞,根據(jù)之前學的損失函數(shù)的定義册赛,該公式可以被叫著損失函數(shù)或者目標函數(shù)钠导,我們的目的就是找到這樣一顆決策樹,使得loss最小森瘪。

4.三種決策樹算法

決策樹一般有下列三種算法,其基本都是運用上面原理構(gòu)建決策樹的:

q ID3

q C4.5

q CART

ID3算法是決策樹的一個經(jīng)典的構(gòu)造算法,內(nèi)部使用信息熵以及信息增益來進行構(gòu)建;每次迭代選擇信息增益最大的特征屬性作為分割屬性牡属。
優(yōu)點是構(gòu)建速度快,實現(xiàn)簡單扼睬。缺點是對于特征數(shù)目較多的數(shù)據(jù)逮栅,效果很差,它不考慮屬性之間的關(guān)系窗宇,抗噪性差措伐,只能是適應于小規(guī)模數(shù)據(jù)集。

C4.5算法是在D3算法的基礎(chǔ)上,進行算法優(yōu)化提出的-種算法(C4.5);
現(xiàn)在C4.5已經(jīng)是特別經(jīng)典的一種決策樹構(gòu)造算法;使用信息增益率來取代|D3算法中的信息增益,在樹的構(gòu)造過程中會進行剪枝操作進行優(yōu)化;能夠自動完成對連續(xù)屬性的離散化處理;C4.5算法在選中分割屬性的時候選擇信息增益率最大的屬性,涉及到的公式為:
P(i)=-∑P(i)log2(P(i))

信息增益率:
image.png

優(yōu)點是準確率高军俊,實現(xiàn)簡單侥加,對特征數(shù)目沒有限制,缺點是效率不如ID3

CART算法最大的區(qū)別是使用二叉樹粪躬,它的特點是屬性特征可以重復性使用担败,是最常用的一種算法,后面的例題中就會使用CART算法短蜕。

5.分類樹和回歸樹的區(qū)別

分類樹采用信息增益氢架、信息增益率傻咖、基尼系數(shù)來評價樹的效果,都是基于概率值迸行判斷的;而分類樹的葉子節(jié)點的預測值一般為葉子節(jié)點中概率最大的類別作為當前葉子的預測值

在回歸樹種,葉子節(jié)點的預測值一般為葉子節(jié)點中所有值的均值來作為當前葉子節(jié)點的預測值朋魔。所以在回歸樹中一般采用MSE作為樹的評價指標,即均方差。
image.png

一般情況下,只會使用CART算法構(gòu)建回歸樹卿操。

決策樹優(yōu)化

一般情況下決策樹優(yōu)化有兩種方法分別是剪枝優(yōu)化和隨機森林警检,這里主要介紹剪枝優(yōu)化,在后面的集成學習中會介紹隨機森林害淤。

剪枝優(yōu)化

決策樹的剪枝是決策樹算法中最基本扇雕、最有用的一種優(yōu)化方案,主要分為兩大類。

1前置剪枝

在構(gòu)建決策樹的過程中,提前停止窥摄。

一般有兩種停止條件:

1) 控制數(shù)的深度

2) 控制葉子節(jié)點中樣本的數(shù)目

2后置剪枝

在決策樹構(gòu)建好后,然后再開始裁剪,一般使用兩種方式:

1) 用單一葉子節(jié)點代替整個子樹,葉節(jié)點的分類采用子樹中最主要的分類;

2) 將一個子樹完全替代另外一棵子樹;后置剪枝的主要問題是計算效率問題镶奉。

后剪枝總體思路(有點類似交叉驗證)完全樹T開始,剪枝部分節(jié)點得到T1,在此剪枝得到T2….直到僅剩樹根的樹T在驗證數(shù)據(jù)集上對這k+1個樹進行評價,選擇最優(yōu)樹Ta(損失函數(shù)最小的樹)

剪枝過程:

對于給定的決策樹T0,步驟如下:

1  計算所有內(nèi)部非葉子節(jié)點的剪枝系數(shù)

2  查找最小剪枝系數(shù)的節(jié)點,將其子節(jié)點進行刪除操作,進行剪枝得到?jīng)Q策樹Tk;如果存在

3  多個最小剪枝系數(shù)節(jié)點,選擇包含數(shù)據(jù)項最多的節(jié)點進行剪枝操作

4  重復上述操作,直到產(chǎn)生的剪枝決策樹T只有1個節(jié)點

5  得到?jīng)Q策樹T0T1T2…Tk

6  使用驗證樣本集選擇最優(yōu)子樹Ta

問題來了崭放,如何計算非葉子節(jié)點的剪枝系數(shù)呢哨苛?通過驗證集選擇最優(yōu)子樹的標準,可以使用原始損失函數(shù)來考慮。原始的損失函數(shù):
image.png

葉子節(jié)點越多币砂,決策樹越復雜建峭,則損失越大,我們添加一個關(guān)于葉子節(jié)點數(shù)目的系數(shù)α决摧,上式可以寫作:
loss= loss +α* leaf
剪枝前后的損失函數(shù)分別為loss(r)和loss(R)亿蒸,為了保證減掉的多余的枝子凑兰,可以認為:
loss(r)-loss(R)=0
帶入上述公式求得系數(shù)為:
α = loss(r)-loss(R)/leaf-1
命名α為剪枝系數(shù),則可以通過求到的α進行決策樹優(yōu)化了边锁。

決策樹可視化

決策樹可視化可以方便我們直觀地觀察所構(gòu)建的模型姑食,它依賴于graphviz服務(wù),可視化之前執(zhí)行如下操作茅坛。

軟件安裝以及環(huán)境配置

1.graphviz服務(wù)安裝

q 下載安裝包矢门,官方網(wǎng)站:http:www.graphviz.org/

q 執(zhí)行下載好的安裝包(雙擊msi安裝包)

q 將bin文件夾添加到PATH環(huán)境變量中

2.安裝python插件

01  pip install graphviz

02  pip install pydotplus

可視化實例

有二種方法可以實現(xiàn)可視化,我們假設(shè)已經(jīng)建好了模型灰蛙,把模型進行可視化輸出代碼如下:

1將模型轉(zhuǎn)化為dot文件祟剔,通過命令行執(zhí)行dot命令: dot -Tpdf iris.dot -o iris.pdf,將dot文件轉(zhuǎn)化為pdf文件


01  /// 引入可視化包

02  from sklearn import tree

03  with open('model.dot', 'w') as f:

04  da = tree.export_graphviz(tre, out_file=None)

05   f.write(da)

然后通過指令轉(zhuǎn)化為pdf格式摩梧,如圖所示:

image.png

2.使用image對象直接顯示圖片


01  /// 引入可視化包

02  import pydotplus

03  from sklearn import tree

04  dot_data= tree.export_graphviz(model, out_file=None)

05  graph = pydotplus.graph_from_dot_data(dot_data)

06  Image(graph.create_png())

注意:“model”是我們已經(jīng)創(chuàng)建好的決策樹模型

在 tree.export_graphviz方法里面可以給定可視化的顏色使得決策樹更加的好看物延。下面是例子中通過上面程序畫出來的決策樹,如圖所示:
決策樹的可視化

每個節(jié)點都有著詳細的信息仅父,包括叛薯,樣本的數(shù)目,特征的數(shù)量笙纤,所屬的特征屬性等耗溜。

綜合示例

本節(jié)將利用回歸部分模型建立的基本步驟和本章決策樹的原理,實現(xiàn)一個完整的示例:
通過鳶尾花數(shù)據(jù)集省容,構(gòu)建出決策樹模型抖拴,并且對新的數(shù)據(jù)進行預測,并且進行可視化展示腥椒。

注意:問什么選鳶尾花數(shù)據(jù)集阿宅?第一,該數(shù)據(jù)是機器學習的經(jīng)典數(shù)據(jù)集笼蛛,是sklearn學習文檔的指定數(shù)據(jù)集洒放,第二,該數(shù)據(jù)集能夠體現(xiàn)決策樹深度對決策樹過擬合的影響滨砍。

決策樹模型構(gòu)建流程

1. 收集并準備數(shù)據(jù)

收集數(shù)據(jù)可以用任務(wù)方法往湿,這里用到的數(shù)據(jù)是從國外經(jīng)典數(shù)據(jù)網(wǎng)站下載的,網(wǎng)址:<u>http://archive.ics.uci.edu/ml/datasets/Iris</u>

數(shù)據(jù)集包含150個數(shù)據(jù)集惋戏,分為3類领追,每類50個數(shù)據(jù),每個數(shù)據(jù)包含4個屬性日川÷可通過花萼長度,花萼寬度龄句,花瓣長度回论,花瓣寬度4個屬性預測鳶尾花卉屬于(Setosa散罕,Versicolour,Virginica)三個種類中的哪一類傀蓉。

  1. 導入數(shù)據(jù)
1.  import pandas as pd

2.  path = "datas/iris.data"

3\.   df = pd.read_csv(path,sep=",",header=None)

查看前五行數(shù)據(jù)如8.6.1所示:
鳶尾花數(shù)據(jù)
  1. 劃分特征屬性和目標屬性

從圖可以看出欧漱,前三列為特征屬性,第四列為目標屬性

1.  x = df.iloc[:,0:4]

2\.   y = df.iloc[:,4]

4. ** 把數(shù)據(jù)集分為訓練集和測試集**

直接引入sklearn中的劃分數(shù)據(jù)集的包

1.  from sklearn.model_selection import train_test_split

2\.   x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=0)

為什么要引入包葬燎?用別人做好的包误甚,代碼很簡潔,寫起來很輕松谱净,自己也能實現(xiàn)數(shù)據(jù)集劃分的源碼窑邦,可非常繁瑣,例如壕探,手寫數(shù)據(jù)集劃分的源碼如下:

def loadDataset(fileName,split,trainingSet=[],textSet=[]):

    with open(fileName, "r") as f:

        reader = csv.reader(f)

        data = list(reader)

        for x in range(len(data) - 1):

            for y in range(4):

                data[x][y] = float(data[x][y])

            if random.random() < split:

                trainingSet.append(data[x])

            else:

                textSet.append(data[x])

        return trainingSet,textSet

        # print(trainingSet)

        # print(textSet)

trainingSet,textSet=loadDataset("irisdata.csv",0.7)

所以機器學習代碼部分冈钦,一般都是調(diào)用sklean中的包

  1. 特征工程

一般指數(shù)據(jù)的預處理,有些特征屬性值的差值非常大李请,為了減少巨大的差值對模型造成的影響瞧筛,一般都會對數(shù)據(jù)做一個標準化,或者歸一化處理导盅,代碼如下:

from sklearn.preprocessing import MinMaxScaler

mm = MinMaxScaler()

x_train = mm.fit_transform(x_train)

x_test = mm.transform(x_test)
  1. 模型構(gòu)建

這里的底層代碼構(gòu)建的二茬樹的形式较幌,主要用的是比較常見的CART算法,根據(jù)前面學到的決策樹原理白翻,可以傳入的超參有乍炉,決策樹的深度max-depth,劃分根節(jié)點的依據(jù)是信息熵還是,gini系數(shù)的criterion參數(shù)嘁字,如果特征屬性過多恩急,可以從一部分特征屬性選擇的max-features參數(shù)等。返回的是模型的參數(shù)纪蜒,正確率,特征屬性的權(quán)重等此叠。

模型構(gòu)建代碼如下:

tre=DecisionTreeClassifier(criterion="entropy",random_state=1,max_depth=3,max_features=2)

tre.fit(x_train,y_train)

y_hat=tre.predict(x_test)

print(tre.score(x_test,y_test))

print(tre.feature_importances_)

輸出的結(jié)果如下:

正確率: 0.9666666666666667

特征屬性權(quán)重 [0.03880183 0\.         0.30589177 0.6553064 ]

可見模型的準確率還是不錯的纯续,而且發(fā)現(xiàn),第一灭袁,第二個特征屬性對目標屬性的影響還是比較小的猬错。因此根據(jù)決策樹的這種特性,也可以做特征的篩選茸歧。

  1. 可視化輸出

代碼和輸出結(jié)果倦炒,如前一小節(jié)。

  1. 模型預測

比如現(xiàn)在給你一組鳶尾花的數(shù)據(jù)软瞎,對其判定種類逢唤,代碼如下:

joblib.dump(mm,"model/mm.m")

joblib.dump(tre,"model/tre.m")

mm = joblib.load("model/mm.m")

tre = joblib.load("model/tre.m")

x=np.array([[6,3,1,0.1]])

y=tre.predict(mm.transform(x))

print(y)

模型可以的話拉讯,先進行模型保存,預測模型的時候再進行加載鳖藕,預測的結(jié)果如下:

預測的結(jié)果是: ['Iris-setosa']

9 通過改變決策樹深度魔慷,來尋求深度對決策樹模型的影響

求不同決策樹深度下的錯誤率,代碼如下:

x_train4, x_test4, y_train4, y_test4 = train_test_split(x, y, train_size=0.7, random_state=10)

depths = np.arange(1, 15)

err_list = []

for d in depths:

    clf = DecisionTreeClassifier(criterion='entropy', max_depth=d,min_samples_split=10)

    clf.fit(x_train4, y_train4)

    ## 計算的是在訓練集上的模型預測能力

    score = clf.score(x_test4, y_test4)

    err = 1 - score

    err_list.append(err)

    print("%d深度著恩,測試集上正確率%.5f" % (d, clf.score(x_train4, y_train4)))

    print("%d深度院尔,訓練集上正確率%.5f\n" % (d, score))

輸出結(jié)果如下:

1深度,訓練集上正確率0.57778

2深度喉誊,測試集上正確率0.71429

2深度邀摆,訓練集上正確率0.71111

3深度,測試集上正確率0.80000

3深度伍茄,訓練集上正確率0.75556

4深度隧熙,測試集上正確率0.81905

4深度,訓練集上正確率0.75556

5深度幻林,測試集上正確率0.81905

5深度贞盯,訓練集上正確率0.71111

6深度,測試集上正確率0.85714

6深度沪饺,訓練集上正確率0.66667

7深度躏敢,測試集上正確率0.85714

7深度,訓練集上正確率0.66667

8深度整葡,測試集上正確率0.85714

8深度件余,訓練集上正確率0.66667

9深度,測試集上正確率0.86667

9深度遭居,訓練集上正確率0.71111

畫圖表示更為直觀啼器,代碼如下:

import matplotlib.pyplot as plt

## 畫圖

plt.figure(facecolor='w')

plt.plot(depths, err_list, 'ro-', lw=3)

plt.xlabel(u'決策樹深度', fontsize=16)

plt.ylabel(u'錯誤率', fontsize=16)

plt.grid(True)

plt.title(u'決策樹層次太多導致的擬合問題(欠擬合和過擬合)', fontsize=18)

plt.show()

結(jié)果輸出如圖8.6.2所示:


決策樹深度對模型的影響

分析:從圖中可以看書,隨著樹的深度的加深俱萍,正確率會提高端壳,達到臨界值之后(樹的深度為6),訓練集正確率達到最高枪蘑,而測試集正確率開始下降损谦,多以決策樹的深度越深就會出現(xiàn)過擬合。從而引出過擬合問題的解決辦法岳颇,只保留深度為2的決策樹的情況下照捡,通過建立很多樹的模型——隨機森林。

本章小結(jié)

本章先介紹了決策樹是通過原始數(shù)據(jù)做出決策的一種算法话侧,它清晰直觀栗精,直接就按照特征屬性來劃分數(shù)據(jù)集。而劃分數(shù)據(jù)集的關(guān)鍵是尋找使得葉子節(jié)點信息熵最小瞻鹏,這是決策樹的基本原理悲立;而后介紹了鹿寨,決策樹的優(yōu)化方法,決策樹的樹的深度對過擬合的影響等级历,通過決策樹的特征屬性的劃分方法释移,我們得知通過構(gòu)建決策樹,可以得到特征屬性對目標屬性影響的權(quán)重寥殖。最后給一個經(jīng)典的例子玩讳,來更好理解決策樹的原理。接下來我們我會解決本章最后提高的問題嚼贡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熏纯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子粤策,更是在濱河造成了極大的恐慌樟澜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叮盘,死亡現(xiàn)場離奇詭異秩贰,居然都是意外死亡,警方通過查閱死者的電腦和手機柔吼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門毒费,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愈魏,你說我怎么就攤上這事觅玻。” “怎么了培漏?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵溪厘,是天一觀的道長。 經(jīng)常有香客問我牌柄,道長畸悬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任友鼻,我火速辦了婚禮傻昙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彩扔。我一直安慰自己,他們只是感情好僻爽,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布虫碉。 她就那樣靜靜地躺著,像睡著了一般胸梆。 火紅的嫁衣襯著肌膚如雪敦捧。 梳的紋絲不亂的頭發(fā)上须板,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音兢卵,去河邊找鬼习瑰。 笑死,一個胖子當著我的面吹牛秽荤,可吹牛的內(nèi)容都是我干的甜奄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼窃款,長吁一口氣:“原來是場噩夢啊……” “哼课兄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晨继,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤烟阐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后紊扬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜒茄,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年餐屎,在試婚紗的時候發(fā)現(xiàn)自己被綠了檀葛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡啤挎,死狀恐怖驻谆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情庆聘,我是刑警寧澤胜臊,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站伙判,受9級特大地震影響象对,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宴抚,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一勒魔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菇曲,春花似錦冠绢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春孵户,著一層夾襖步出監(jiān)牢的瞬間萧朝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工夏哭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留检柬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓竖配,卻偏偏與公主長得像何址,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子械念,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容