決策樹的value是什么意思_從零開始的機器學習實用指南(六):決策樹

3925e2d22bf170099e38a7e6c56544d7.png

類似SVM,決策樹也是非常多功能的機器學習算法,可以分類,回歸,甚至可以完成多輸出的任務,能夠擬合復雜的數據集(比如第二章的房價預測例子,雖然是過擬合了=。=)

決策樹也是很多集成學習的組件,比如隨機森林和梯度提升樹等等

決策樹的訓練和可視化

還是以熟悉的iris數據集為例:

首先訓練一個決策樹模型,然后做一些可視化,使用export_graphviz()方法,通過生成一個叫做iris_tree.dot

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X = iris.data[:, 2:] # petal length and width 
y = iris.target
tree_clf = DecisionTreeClassifier(max_depth=2)
tree_clf.fit(X, y)from sklearn.tree import export_graphviz
export_graphviz(tree_clf,out_file=image_path("iris_tree.dot"),feature_names=iris.feature_names[2:],class_names=iris.target_names,rounded=True,filled=True)

可以利用graphviz package(http://www.graphviz.org/) 中的dot命令行,將.dot文件轉換成 PDF 或 PNG 等多種數據格式。

$ dot -Tpng iris_tree.dot -o iris_tree.png

f79ac81c4d93bef413a6db1eeb1be62b.png

我們將從這個圖開始,簡單分析決策樹是怎么樣工作的

從根節點出發,首先要判斷花瓣長度是否小于 2.45 厘米,如果小于移動到左子節點,會判斷這個花是Iris-Setosa。如果大于2.45cm,會移動到右子節點,判斷寬度是否小于等于1.75cm

,如果是的,會到它的左子節點,判斷為versicolor,否則到右子節點,判斷為,virginica。

過程是非常清晰簡單的

決策樹的眾多特性之一就是, 它不需要太多的數據預處理, 尤其是不需要進行特征的縮放或者歸一化。

圖中還有一些屬性

  • samples屬性統計出它應用于多少個訓練樣本實例。如,開始有150組例子
  • value屬性告訴你這個節點對于每一個類別的樣例有多少個。如:右下角的節點中包含 0 個 Iris-Setosa,1 個 Iris-Versicolor 和 45 個 Iris-Virginica。
  • Gini屬性用于測量它的純度:如果一個節點包含的所有訓練樣例全都是同一類別的,我們就說這個節點是純的(Gini=0)。基尼不純度的公式在下面,具體的用處我們稍后再說。

12b08d2355b9d1d81aadbc94fe259dfc.png
Sklearn 用的是 CART 算法, CART 算法僅產生二叉樹(是或否)。然而,像 ID3 這樣的算法可以產生超過兩個子節點的決策樹模型。

下面的圖展示了決策邊界,第一次的邊界是在length=2.45,左面是純的,不用再分了。右面是不純的,再在width=1.75做了分割,如果樹高可以為3的話,會繼續分割下去(如虛線)

49171dc690137290d46fd1af67ca948a.png
從圖中可以看出,決策樹是典型的白盒模型,可以提供清楚的分類依據。分類具有很強的可解釋性

另外,決策樹可以很容易的給出分類的概率

比如你發現了一個花瓣長 5 厘米,寬 1.5 厘米的花朵,對應上圖6-1的綠色那一塊

Iris-Setosa 為 0%(0/54),Iris-Versicolor 為 90.7%(49/54),Iris-Virginica 為 9.3%(5/54)

測試結果完全符合預期

>>> tree_clf.predict_proba([[5, 1.5]])
array([[ 0. , 0.90740741, 0.09259259]])
>>> tree_clf.predict([[5, 1.5]])
array([1])

CART樹算法

SkLearn 用分裂回歸樹(Classification And Regression Tree, CART)算法訓練決策樹

原理非常簡單

每次分裂都要找到特征k和閾值tk(比如特征=寬度,閾值=2.45),CART會尋找一個分裂方法,讓分裂后兩邊的基尼不純度按照節點數量加權盡可能的小,損失函數為

126f2032d9e6572ccffb6d5262dd7ac6.png

然后遞歸的,對于子集,子集的子集,按照同樣的方法進行分裂

可以看出,每次分割是貪心算法,不能保證這是全局上最好的解。這是因為找到最優樹是一個 NP 完全問題,需要超出多項式的復雜度,我們需要找一個合理的(而不是最佳的)方案

CART停止的條件是達到預定的最大深度之后將會停止分裂(由max_depth超參數決定)

,或者是它找不到可以繼續降低不純度的分裂方法的時候(所有節點都是同一個類了)。幾個其他超參數(之后介紹)控制了其他的停止生長條件。

復雜度計算

建立好決策樹后,預測的速度是非常快的。決策樹是一個近似平衡的樹,大概只需要O(logm)的復雜度(m樣本數),因此是非常快的。

但是訓練上因為要比較多種的分裂可能,有了O(nmlogm)的復雜度。過程是比較慢的。對于小型的數據集(少于幾千),可以用預排序來加速(presort = True)但是大數據反而會降低速度。

基尼不純度/信息熵

通常,算法使用 Gini 不純度來進行檢測, 但是你也可以設置為"entropy"來使用熵不純度進行檢測。

熵的概念是源于熱力學中分子混亂程度的概念,當分子井然有序的時候,熵值接近于 0。后來推廣到信息論中,當所有信息相同的時候熵被定義為零。

03bcc1bdf3880f2df68943b2ed8379ff.png

在機器學習中,熵經常被用作不純度的衡量方式,當一個集合內只包含一類實例時, 我們稱為數據集的熵為 0。 熵的減少通常稱為信息增益。

通常來說Gini不純度和信息熵的結果是類似的,基尼指數計算稍微快一點,所以這是一個很好的默認值。但是,也有的時候它們會產生不同的樹,基尼指數會趨于在樹的分支中將最多的類隔離出來,而熵指數趨向于產生略微平衡一些的決策樹模型。

正則化

決策樹不對數據做任何的假設,如果任由決策樹無限制的擬合數據,必然會造成嚴重的過擬合。

這樣的模型稱為非參數模型,沒有參數數量的限制,可以自由的去擬合數據。線性回歸等這類有參數的模型,自由度受到一定的限制,本身就有一些抵御過擬合的能力(也增加了欠擬合的風險)

除了限制樹的高度可以顯著的限制模型過擬合,SKlearn還有一些其他的正則化相關的超參數:

  • min_samples_split(節點在被分裂之前必須具有的最小樣本數)
  • min_samples_leaf(葉節點必須具有的最小樣本數)
  • min_weight_fraction_leaf(和min_samples_leaf相同,但表示為加權總數的一小部分實例)
  • max_leaf_nodes(葉節點的最大數量)
  • max_features(在每個節點被評估是否分裂的時候,具有的最大特征數量)
增加min_開頭的超參數或者減小max開頭的超參數會讓模型更正則化
還有一些其他的決策樹算法采用后剪枝形式,先生成足夠大的樹,再刪去一些不必要的節點

下圖展示了正則化對決策邊界的影響,左面顯然是過擬合了。

5bbd563a30b11edf7fd2a299bff5af2a.png

回歸

決策樹也可以處理回歸的問題

from sklearn.tree import DecisionTreeRegressor
tree_reg = DecisionTreeRegressor(max_depth=2)
tree_reg.fit(X, y)

得到了一棵這樣的樹

8a4f91872a8f7cf5d6dcf9d9eeda78bf.png

可以看出,和分類相比,區別在于,不再最小化不純度了,而是最小化MSE

57820e3787158dcfdc4d64b2a4f7ee36.png

直觀的看,每一個子集的紅線代表了value值,即這個子集的平均

247cbfd5a95d746d3f3027f786fe1456.png

同樣,正則化可以帶來幫助

c886dc331e3a66bb16ecde27f8c85b97.png

不穩定性

決策樹是一類非常強大的模型,但是也有一些局限性

首先,決策樹的決策邊界和坐標軸是垂直的,這樣的性質導致對數據的旋轉很敏感,如圖,左右兩個雖然都可以分割開,但是右面的泛化顯然不如左邊好(可以用PCA來解決這樣的問題,見第八章)

41e048b84be1ff7e315d47a5721233d8.png

其次,決策樹對一些數據的微小變化可能非常敏感,一點點的區別可能導致決策邊界截然不同的,而且,SKlearn中許多方法都有偶然性,除非設置了隨機種子,這也會帶來許多不穩定性。下一章中將會看到,隨機森林可以通過多棵樹的平均預測值限制這種不穩定性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542508.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542508.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542508.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hive中生成隨機唯一標識ID的方法

2019獨角獸企業重金招聘Python工程師標準>>> HIVE中處理的數據往往比較多,在處理數據的時候希望給處理得到的數據一個ID標識,這時候可以用到UUID。 UUID的算法的核心思想是結合機器的網卡、當地時間、一個隨即數來生成UUID。從理論上講&#…

php從網頁獲得數據,php根據URL獲得網頁內容

php 中根據url來獲得網頁內容非常的方便,可以通過系統內置函數file_get_contents(),傳入url,即可返回網頁的內容,比如獲得百度首頁的內容代碼為:$html file_get_contents(http://www.baidu.com/);echo $html;就可以顯示出百度首頁的內容&…

2020知道python語言應用答案_2020知到Python語言應用答案章節期末答案

組合管理理論最早由哈維馬科維茲于1962年系統的提出,他開創了對投資進行整體管理的先 公司型基金和契約型基金的區別,下列不包括()。 A.資金的性質B.基金的營運依據C.基 我國(&#…

如何在Bootstrap中使用Jumbotron和頁面標頭類?

Introduction 介紹 In the previous article, we have learned how Responsive column, Nesting Columns and offset Columns work and how to use them? I hope now, you all are comfortable with the grid system; what is it, how to use it and how we can use it for c…

python中的數字類型格式與運算,python數字數據類型

python數字數據類型1. 數字在我們很小的時候,父母便開始教我們數數,從1數到10,聰明的孩子可以數的更多。python支持3中數值類型整型(int),通常稱之為整型或整數,這個概念與我們小學時學過的整數是相同的,py…

getprocaddress得到為0_基于ZU+系列MPSoC芯片的USB3.0/2.0接口硬件設計

本文主要介紹Zynq UltraScale MPSoC系列芯片的USB3.0/2.0接口硬件設計。ZU系列MPSoC要實現USB3.0/2.0的全部功能,需要同時使用MIO和GTR。因為GTR接口中的USB接口只支持USB3.0,對USB2.0的支持需要通過MIO接口外接USB PHY實現。ZU系列MPSoC包括兩個USB接口…

如何設置單詞第一個字母大寫_大寫一行中每個單詞的第一個和最后一個字母

如何設置單詞第一個字母大寫Problem statement: 問題陳述: Given an input line, capitalize first and last letter of each word in the given line. Its provided that the input line is in lowercase. 給定輸入行, 將給定行中每個單詞的第一個和最…

php如何編造簡歷,在簡歷里編造內容需要注意哪些問題?

在個人簡歷里編造內容可得有一定依據才行,總得為自己后期做個準備工作是不是?你編造的東西不只是給企業看一看而已,企業還會對這些內容作出進一步的判斷,并且可能就其對你進行提問,如果你答不出來而曝光自己是在欺騙企…

Java LinkedList公共對象pollLast()方法(帶示例)

LinkedList公共對象pollLast()方法 (LinkedList public Object pollLast() method) This method is available in package java.util.LinkedList.pollLast(). 軟件包java.util.LinkedList.pollLast()中提供了此方法。 This method is used to retrieves the last or ending ele…

python編寫學生成績排序_Python實現按學生年齡排序的實際問題詳解

前言 本文主要給大家了關于利用Python按學生年齡排序的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹: 問題:定義一個Class:包含姓名name、性別gender、年齡age,需要按…

前方危險-讓很多“高逼格”高管深刻反思的文章

在很多的時候,現實會讓我們每個人迷惑,周邊的人和事可以讓人極度的膨脹,你可以想吃了迷藥一樣,分不清是現實還是虛幻。很久以前,在公司的一次會議上,某主管告訴我們說,“他一個同事,…

oracle實例的概念組成,oracle體系結構的兩個基本概念:數據庫和實例

您可能感興趣的話題:oracle核心提示:要了解oracle體系結構必須先了解兩個基本的概念: 數據庫和實例.要了解oracle體系結構必須先了解兩個基本的概念: 數據庫和實例.一: 數據庫數據庫(database)是一個數據集合.無論數據庫是采用關系結構還是面向對象結構,…

c#二維數據最大最小值_C#| 打印類型,各種數據類型的最大值和最小值

c#二維數據最大最小值In the below example – we are printing types, min value, max value of various data types in C#, like integer data types, floating point data types, Boolean data type, Reference types, Nullable types. 在下面的示例中-我們正在打印C&#x…

自定義taglib引入失敗_小程序拼團總失敗?看看微信官方和開發者們怎么說

閱讀時間:6m最懂小程序生態商業的自媒體可怕... 剛過國慶,南方還在短袖短裙,北方竟然都下雪了!什么叫一天之內感受四季?曉程序觀察(yinghoo-tech)的小伙伴們算是深刻體驗了,穿著短袖上飛機,抵達…

微信公眾平臺開發5:翻譯功能

思路分析首先對用戶發送過來的消息進行判斷,判斷消息里是否含有“翻譯”關鍵字,如果有,則提取翻譯內容,然后調用網絡上開放的翻譯API 進行翻譯。我們用有道翻譯API:http://fanyi.youdao.com/openapi?pathdata-mode記下…

Linux之基礎I/O

目錄 一、C語言中的文件操作 二、系統文件操作I/O 三、文件描述符fd 1、文件描述符的引入 2、對fd的理解 3、文件描述符的分配規則 四、重定向 1、重定向的原理 2、重定向的系統調用dup2 五、Linux下一切皆文件 一、C語言中的文件操作 1、打開和關閉 在C語言的文…

moore和mealy_Mealy機和Moore機的比較研究 目錄

moore和mealyFinite automata may also have outputs corresponding to each input symbol. Such finite automata are known as finite automata with the output. 有限自動機還可以具有與每個輸入符號相對應的輸出。 這種有限自動機稱為輸出的有限自動機。 There are two fi…

oracle sys連接不上,oracle – 為什么我不能在SYS擁有的對象上創建觸發器?

在嘗試創建名為ghazal_current_bef_upd_row的觸發器時&#xff1a;create trigger ghazal_current_bef_upd_rowbefore update on ghazal_currentfor each rowwhen (new.Rating < old.Rating)begininsert into ghazal_current_audit(GhazalName,Old_Rating,New_Rating)values…

大一python編程題_請教python編程問題(作業就剩這幾道題了)

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓1. def cleanword(word):(用Python寫出程序&#xff0c;使程序可以通過下面的doctest)""">>> cleanword(what?)what>>> cleanword("now!")now>>> cleanword(?"word!,$…

Linux筆記1-5 --用戶

## 1 ## 用戶理解用戶就是系統使用者的身份在系統中用戶存儲為若干竄字符若干個系統配置文件用戶信息涉及到的系統配置文件&#xff1a;/etc/passwd ###用戶信息用戶&#xff1a;密碼&#xff1a;uid&#xff1a;gid&#xff1a;說明&#xff1a;家目錄&#xff1a;用戶使用…