(第一部分 機(jī)器學(xué)習(xí)基礎(chǔ))
第01章 機(jī)器學(xué)習(xí)概覽
第02章 一個(gè)完整的機(jī)器學(xué)習(xí)項(xiàng)目(上)
第02章 一個(gè)完整的機(jī)器學(xué)習(xí)項(xiàng)目(下)
第03章 分類
第04章 訓(xùn)練模型
第05章 支持向量機(jī)
第06章 決策樹
第07章 集成學(xué)習(xí)和隨機(jī)森林
第08章 降維
(第二部分 神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí))
第9章 啟動(dòng)和運(yùn)行TensorFlow
第10章 人工神經(jīng)網(wǎng)絡(luò)
第11章 訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)(上)
第11章 訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)(下)
第12章 設(shè)備和服務(wù)器上的分布式 TensorFlow
第13章 卷積神經(jīng)網(wǎng)絡(luò)
第14章 循環(huán)神經(jīng)網(wǎng)絡(luò)
第15章 自編碼器
第16章 強(qiáng)化學(xué)習(xí)(上)
第16章 強(qiáng)化學(xué)習(xí)(下)
和支持向量機(jī)一樣正歼, 決策樹是一種多功能機(jī)器學(xué)習(xí)算法跛十, 即可以執(zhí)行分類任務(wù)也可以執(zhí)行回歸任務(wù)求橄, 甚至包括多輸出(multioutput)任務(wù).
它是一種功能很強(qiáng)大的算法传透,可以對(duì)很復(fù)雜的數(shù)據(jù)集進(jìn)行擬合官硝。例如粉私,在第二章中我們對(duì)加利福尼亞住房數(shù)據(jù)集使用決策樹回歸模型進(jìn)行訓(xùn)練侧甫,就很好的擬合了數(shù)據(jù)集(實(shí)際上是過擬合)委煤。
決策樹也是隨機(jī)森林的基本組成部分(見第7章)绷蹲,而隨機(jī)森林是當(dāng)今最強(qiáng)大的機(jī)器學(xué)習(xí)算法之一棒卷。
在本章中,我們將首先討論如何使用決策樹進(jìn)行訓(xùn)練祝钢,可視化和預(yù)測(cè)比规。
然后我們會(huì)學(xué)習(xí)在 Scikit-learn 上面使用 CART 算法,并且探討如何調(diào)整決策樹讓它可以用于執(zhí)行回歸任務(wù)拦英。
最后蜒什,我們當(dāng)然也需要討論一下決策樹目前存在的一些局限性。
決策樹的訓(xùn)練和可視化
為了理解決策樹疤估,我們需要先構(gòu)建一個(gè)決策樹并親身體驗(yàn)它到底如何進(jìn)行預(yù)測(cè)灾常。
接下來的代碼就是在我們熟知的鳶尾花數(shù)據(jù)集上進(jìn)行一個(gè)決策樹分類器的訓(xùn)練。
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)
你可以通過使用export_graphviz()
方法铃拇,通過生成一個(gè)叫做iris_tree.dot
的圖形定義文件將一個(gè)訓(xùn)練好的決策樹模型可視化钞瀑。
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
[1] 中的dot
命令行慷荔,將.dot
文件轉(zhuǎn)換成 PDF 或 PNG 等多種數(shù)據(jù)格式雕什。例如,使用命令行將.dot
文件轉(zhuǎn)換成.png
文件的命令如下:
[1] Graphviz是一款開源圖形可視化軟件包,http://www.graphviz.org/贷岸。
$ dot -Tpng iris_tree.dot -o iris_tree.png
我們的第一個(gè)決策樹如圖 6-1壹士。
開始預(yù)測(cè)
現(xiàn)在讓我們來看看在圖 6-1 中的樹是如何進(jìn)行預(yù)測(cè)的。假設(shè)你找到了一朵鳶尾花并且想對(duì)它進(jìn)行分類凰盔,你從根節(jié)點(diǎn)開始(深度為 0墓卦,頂部):該節(jié)點(diǎn)詢問花朵的花瓣長度是否小于 2.45 厘米。如果是户敬,您將向下移動(dòng)到根的左側(cè)子節(jié)點(diǎn)(深度為 1落剪,左側(cè))。 在這種情況下尿庐,它是一片葉子節(jié)點(diǎn)(即它沒有任何子節(jié)點(diǎn))忠怖,所以它不會(huì)問任何問題:你可以方便地查看該節(jié)點(diǎn)的預(yù)測(cè)類別,決策樹預(yù)測(cè)你的花是 Iris-Setosa(class = setosa
)抄瑟。
現(xiàn)在假設(shè)你找到了另一朵花凡泣,但這次的花瓣長度是大于 2.45 厘米的。你必須向下移動(dòng)到根的右側(cè)子節(jié)點(diǎn)(深度為 1皮假,右側(cè))鞋拟,而這個(gè)節(jié)點(diǎn)不是葉節(jié)點(diǎn),所以它會(huì)問另一個(gè)問題:花瓣寬度是否小于 1.75 厘米惹资? 如果是贺纲,那么你的花很可能是一個(gè) Iris-Versicolor(深度為 2,左)褪测。 如果不是猴誊,那很可能一個(gè) Iris-Virginica(深度為 2,右)侮措,真的是太簡單了懈叹,對(duì)吧!
決策樹的眾多特性之一就是分扎, 它不需要太多的數(shù)據(jù)預(yù)處理澄成, 尤其是不需要進(jìn)行特征的縮放或者歸一化。
節(jié)點(diǎn)的samples
屬性統(tǒng)計(jì)出它應(yīng)用于多少個(gè)訓(xùn)練樣本實(shí)例畏吓。
例如环揽,我們有一百個(gè)訓(xùn)練實(shí)例是花瓣長度大于 2.45 里面的(深度為 1, 右側(cè))庵佣,在這 100 個(gè)樣例中又有 54 個(gè)花瓣寬度小于 1.75cm(深度為 2,左側(cè))汛兜。
節(jié)點(diǎn)的value
屬性告訴你這個(gè)節(jié)點(diǎn)對(duì)于每一個(gè)類別的樣例有多少個(gè)巴粪。
例如:右下角的節(jié)點(diǎn)中包含 0 個(gè) Iris-Setosa,1 個(gè) Iris-Versicolor 和 45 個(gè) Iris-Virginica。
最后肛根,節(jié)點(diǎn)的Gini
屬性用于測(cè)量它的純度:如果一個(gè)節(jié)點(diǎn)包含的所有訓(xùn)練樣例全都是同一類別的辫塌,我們就說這個(gè)節(jié)點(diǎn)是純的(Gini=0
)。
例如派哲,深度為 1 的左側(cè)節(jié)點(diǎn)只包含 Iris-Setosa 訓(xùn)練實(shí)例臼氨,它就是一個(gè)純節(jié)點(diǎn),Gini 指數(shù)為 0芭届。
公式 6-1 顯示了訓(xùn)練算法如何計(jì)算第i
個(gè)節(jié)點(diǎn)的 gini 分?jǐn)?shù) 储矩。例如, 深度為 2 的左側(cè)節(jié)點(diǎn)基尼指數(shù)為:褂乍。另外一個(gè)純度指數(shù)也將在后文很快提到持隧。
公式6-1. Gini分?jǐn)?shù)
-
是第
i
個(gè)節(jié)點(diǎn)中訓(xùn)練實(shí)例為的k
類實(shí)例的比例
Scikit-Learn 用的是 CART 算法, CART 算法僅產(chǎn)生二叉樹:每一個(gè)非葉節(jié)點(diǎn)總是只有兩個(gè)子節(jié)點(diǎn)(只有是或否兩個(gè)結(jié)果)逃片。然而屡拨,像 ID3 這樣的算法可以產(chǎn)生超過兩個(gè)子節(jié)點(diǎn)的決策樹模型。
圖 6-2 顯示了決策樹的決策邊界褥实。粗的垂直線代表根節(jié)點(diǎn)(深度為 0)的決策邊界:花瓣長度為 2.45 厘米呀狼。由于左側(cè)區(qū)域是純的(只有 Iris-Setosa),所以不能再進(jìn)一步分裂损离。然而哥艇,右邊的區(qū)域是不純的,所以深度為 1 的右邊節(jié)點(diǎn)在花瓣寬度為 1.75 厘米處分裂(用虛線表示)草冈。又由于max_depth
設(shè)置為 2她奥,決策樹在那里停了下來。但是怎棱,如果將max_depth
設(shè)置為 3哩俭,兩個(gè)深度為 2 的節(jié)點(diǎn),每個(gè)都將會(huì)添加另一個(gè)決策邊界(用虛線表示)拳恋。
模型小知識(shí):白盒與黑盒
正如我們看到的一樣凡资,決策樹非常直觀,它的決策很容易解釋谬运。這種模型通常被稱為白盒模型隙赁。相反,隨機(jī)森林或神經(jīng)網(wǎng)絡(luò)通常被認(rèn)為是黑盒模型梆暖。他們能做出很好的預(yù)測(cè)伞访,并且您可以輕松檢查它們做出這些預(yù)測(cè)過程中計(jì)算的執(zhí)行過程。然而轰驳,人們通常很難用簡單的術(shù)語來解釋為什么模型會(huì)做出這樣的預(yù)測(cè)厚掷。例如弟灼,如果一個(gè)神經(jīng)網(wǎng)絡(luò)說一個(gè)特定的人出現(xiàn)在圖片上,我們很難知道究竟是什么導(dǎo)致了這一個(gè)預(yù)測(cè)的出現(xiàn):
模型是否認(rèn)出了那個(gè)人的眼睛冒黑? 她的嘴田绑? 她的鼻子?她的鞋抡爹?或者是否坐在沙發(fā)上掩驱? 相反,決策樹提供良好的冬竟、簡單的分類規(guī)則欧穴,甚至可以根據(jù)需要手動(dòng)操作(例如鳶尾花分類)。
估計(jì)分類概率
決策樹還可以估計(jì)某個(gè)實(shí)例屬于特定類k
的概率:首先遍歷樹來查找此實(shí)例的葉節(jié)點(diǎn)诱咏,然后它返回此節(jié)點(diǎn)中類k
的訓(xùn)練實(shí)例的比例苔可。
例如,假設(shè)你發(fā)現(xiàn)了一個(gè)花瓣長 5 厘米袋狞,寬 1.5 厘米的花朵焚辅。相應(yīng)的葉節(jié)點(diǎn)是深度為 2 的左節(jié)點(diǎn),因此決策樹應(yīng)該輸出以下概率:Iris-Setosa 為 0%(0/54)苟鸯,Iris-Versicolor 為 90.7%(49/54)同蜻,Iris-Virginica 為 9.3%(5/54)。當(dāng)然早处,如果你要求它預(yù)測(cè)具體的類湾蔓,它應(yīng)該輸出 Iris-Versicolor(類別 1),因?yàn)樗哂凶罡叩母怕势霭稹N覀兞藴y(cè)試一下:
>>> tree_clf.predict_proba([[5, 1.5]])
array([[ 0. , 0.90740741, 0.09259259]])
>>> tree_clf.predict([[5, 1.5]])
array([1])
完美默责!請(qǐng)注意,估計(jì)概率在任何地方都是相同的咸包, 除了圖 6-2 中右下角的矩形部分桃序,例如花瓣長 6 厘米和寬 1.5 厘米(盡管在這種情況下它看起來很可能是 Iris-Virginica)。
CART 訓(xùn)練算法
Scikit-Learn 用分類回歸樹(Classification And Regression Tree烂瘫,簡稱 CART)算法訓(xùn)練決策樹(也叫“增長樹”)媒熊。這種算法思想真的非常簡單:
首先使用單個(gè)特征k
和閾值 (例如,“花瓣長度≤2.45cm
”)將訓(xùn)練集分成兩個(gè)子集坟比。它如何選擇k
和 呢芦鳍?它尋找一對(duì) ,能夠產(chǎn)生最純粹的子集(通過子集大小加權(quán)計(jì)算)葛账。算法嘗試最小化的損失函數(shù)柠衅,如公式 6-2所示。
當(dāng)它成功的將訓(xùn)練集分成兩部分之后籍琳, 它將會(huì)繼續(xù)使用相同的遞歸式邏輯繼續(xù)的分割子集菲宴,然后是子集的子集魂贬。當(dāng)達(dá)到預(yù)定的最大深度之后將會(huì)停止分裂(由max_depth
超參數(shù)決定),或者是它找不到可以繼續(xù)降低不純度的分裂方法的時(shí)候裙顽。幾個(gè)其他超參數(shù)(之后介紹)控制了其他的停止生長條件(min_samples_split
,min_samples_leaf
宣谈,min_weight_fraction_leaf
愈犹,max_leaf_nodes
)。
警告
正如所見闻丑,CART 算法是一種貪婪算法:它貪婪地搜索最高級(jí)別的最佳分割方式漩怎,然后在每個(gè)深度重復(fù)該過程。 它不檢查分割是否能夠在幾個(gè)級(jí)別中的全部分割可能中找到最佳方法嗦嗡。貪婪算法通常會(huì)產(chǎn)生一個(gè)相當(dāng)好的解決方法勋锤,但它不保證這是全局中的最佳解決方案。
不幸的是侥祭,找到最優(yōu)樹是一個(gè) NP 完全問題:它需要 時(shí)間叁执,即使對(duì)于相當(dāng)小的訓(xùn)練集也會(huì)使問題變得棘手。 這就是為什么我們必須設(shè)置一個(gè)“合理的”(而不是最佳的)解決方案矮冬。
計(jì)算復(fù)雜度
在建立好決策樹模型后谈宛, 做出預(yù)測(cè)需要遍歷決策樹, 從根節(jié)點(diǎn)一直到葉節(jié)點(diǎn)胎署。決策樹通常近似左右平衡吆录,因此遍歷決策樹需要經(jīng)歷大致 個(gè)節(jié)點(diǎn)。由于每個(gè)節(jié)點(diǎn)只需要檢查一個(gè)特征的值琼牧,因此總體預(yù)測(cè)復(fù)雜度僅為 恢筝,與特征的數(shù)量無關(guān)。 所以即使在處理大型訓(xùn)練集時(shí)巨坊,預(yù)測(cè)速度也非城瞬郏快。
然而抱究,訓(xùn)練算法的時(shí)候(訓(xùn)練和預(yù)測(cè)不同)需要比較所有特征(如果設(shè)置了max_features
會(huì)更少一些)恢氯。這就使得訓(xùn)練復(fù)雜度為 。對(duì)于小訓(xùn)練集(少于幾千例)鼓寺,Scikit-Learn 可以通過預(yù)先設(shè)置數(shù)據(jù)(presort = True
)來加速訓(xùn)練勋拟,但是這對(duì)于較大訓(xùn)練集來說會(huì)顯著減慢訓(xùn)練速度。
Gini不純度或信息熵
通常妈候,算法使用 Gini 不純度來進(jìn)行檢測(cè)敢靡, 但是你也可以通過將標(biāo)準(zhǔn)超參數(shù)設(shè)置為"entropy"
來使用熵不純度進(jìn)行檢測(cè)。這里熵的概念是源于熱力學(xué)中分子混亂程度的概念苦银,當(dāng)分子井然有序的時(shí)候啸胧,熵值接近于 0赶站。
熵這個(gè)概念后來逐漸被擴(kuò)展到了各個(gè)領(lǐng)域,其中包括香農(nóng)的信息理論纺念,這個(gè)理論被用于測(cè)算一段信息中的平均信息密度(熵的減少通常稱為信息增益)贝椿。當(dāng)所有信息相同的時(shí)候熵被定義為零。
在機(jī)器學(xué)習(xí)中陷谱,熵經(jīng)常被用作不純度的衡量方式烙博,當(dāng)一個(gè)集合內(nèi)只包含一類實(shí)例時(shí), 我們稱為數(shù)據(jù)集的熵為 0烟逊。
公式 6-3 顯示了第i
個(gè)節(jié)點(diǎn)的熵的定義渣窜,例如,在圖 6-1 中宪躯, 深度為 2 左節(jié)點(diǎn)的熵為 乔宿。
那么我們到底應(yīng)該使用 Gini 指數(shù)還是熵呢? 事實(shí)上大部分情況都沒有多大的差別:它們會(huì)生成類似的決策樹访雪。
基尼指數(shù)計(jì)算稍微快一點(diǎn)详瑞,所以這是一個(gè)很好的默認(rèn)值。但是冬阳,也有的時(shí)候它們會(huì)產(chǎn)生不同的樹蛤虐,基尼指數(shù)會(huì)趨于在樹的分支中將最多的類隔離出來,而熵指數(shù)趨向于產(chǎn)生略微平衡一些的決策樹模型肝陪。
正則化超參數(shù)
決策樹幾乎不對(duì)訓(xùn)練數(shù)據(jù)做任何假設(shè)(與此相反的是線性回歸等模型驳庭,這類模型通常會(huì)假設(shè)數(shù)據(jù)是符合線性關(guān)系的)。
如果不添加約束氯窍,樹結(jié)構(gòu)模型通常將根據(jù)訓(xùn)練數(shù)據(jù)調(diào)整自己饲常,使自身能夠很好的擬合數(shù)據(jù),而這種情況下大多數(shù)會(huì)導(dǎo)致模型過擬合狼讨。
這一類的模型通常會(huì)被稱為非參數(shù)模型贝淤,這不是因?yàn)樗鼪]有任何參數(shù)(通常也有很多),而是因?yàn)樵谟?xùn)練之前沒有確定參數(shù)的具體數(shù)量政供,所以模型結(jié)構(gòu)可以根據(jù)數(shù)據(jù)的特性自由生長播聪。
與此相反的是,像線性回歸這樣的參數(shù)模型有事先設(shè)定好的參數(shù)數(shù)量布隔,所以自由度是受限的离陶,這就減少了過擬合的風(fēng)險(xiǎn)(但是增加了欠擬合的風(fēng)險(xiǎn))。
DecisionTreeClassifier
類還有一些其他的參數(shù)用于限制樹模型的形狀: min_samples_split
(節(jié)點(diǎn)在被分裂之前必須具有的最小樣本數(shù))衅檀,min_samples_leaf
(葉節(jié)點(diǎn)必須具有的最小樣本數(shù))招刨,min_weight_fraction_leaf
(和min_samples_leaf
相同,但表示為加權(quán)總數(shù)的一小部分實(shí)例)哀军,max_leaf_nodes
(葉節(jié)點(diǎn)的最大數(shù)量)和max_features
(在每個(gè)節(jié)點(diǎn)被評(píng)估是否分裂的時(shí)候沉眶,具有的最大特征數(shù)量)打却。增加min_* hyperparameters
或者減少max_* hyperparameters
會(huì)使模型正則化。
筆記
一些其他算法的工作原理是在沒有任何約束條件下訓(xùn)練決策樹模型谎倔,讓模型自由生長柳击,然后再對(duì)不需要的節(jié)點(diǎn)進(jìn)行剪枝。
當(dāng)一個(gè)節(jié)點(diǎn)的全部子節(jié)點(diǎn)都是葉節(jié)點(diǎn)時(shí)片习,如果它對(duì)純度的提升不具有統(tǒng)計(jì)學(xué)意義腻暮,我們就認(rèn)為這個(gè)分支是不必要的。
標(biāo)準(zhǔn)的假設(shè)檢驗(yàn)毯侦,例如卡方檢測(cè),通常會(huì)被用于評(píng)估一個(gè)概率值 -- 即改進(jìn)是否純粹是偶然性的結(jié)果(也叫原假設(shè))
如果 p 值比給定的閾值更高(通常設(shè)定為 5%具垫,也就是 95% 置信度侈离,通過超參數(shù)設(shè)置),那么節(jié)點(diǎn)就被認(rèn)為是非必要的筝蚕,它的子節(jié)點(diǎn)會(huì)被刪除卦碾。
這種剪枝方式將會(huì)一直進(jìn)行,直到所有的非必要節(jié)點(diǎn)都被刪光起宽。
圖 6-3 顯示了對(duì)moons
數(shù)據(jù)集(在第 5 章介紹過)進(jìn)行訓(xùn)練生成的兩個(gè)決策樹模型洲胖,左側(cè)的圖形對(duì)應(yīng)的決策樹使用默認(rèn)超參數(shù)生成(沒有限制生長條件)坯沪,右邊的決策樹模型設(shè)置為min_samples_leaf=4
。很明顯叉弦,左邊的模型過擬合了,而右邊的模型泛用性更好藻糖。
回歸
決策樹也能夠執(zhí)行回歸任務(wù),讓我們使用 Scikit-Learn 的DecisionTreeRegressor
類構(gòu)建一個(gè)回歸樹樱拴,讓我們用max_depth = 2
在具有噪聲的二次項(xiàng)數(shù)據(jù)集上進(jìn)行訓(xùn)練。
from sklearn.tree import DecisionTreeRegressor
tree_reg = DecisionTreeRegressor(max_depth=2)
tree_reg.fit(X, y)
結(jié)果如圖 6-4 所示
這棵樹看起來非常類似于你之前建立的分類樹洋满,它的主要區(qū)別在于晶乔,它不是預(yù)測(cè)每個(gè)節(jié)點(diǎn)中的樣本所屬的分類瘪弓,而是預(yù)測(cè)一個(gè)具體的數(shù)值禽最。例如袱饭,假設(shè)你想對(duì) 的新實(shí)例進(jìn)行預(yù)測(cè)呛占。從根開始遍歷樹,最終到達(dá)預(yù)測(cè)值等于 0.1106 的葉節(jié)點(diǎn)疹味。該預(yù)測(cè)僅僅是與該葉節(jié)點(diǎn)相關(guān)的 110 個(gè)訓(xùn)練實(shí)例的平均目標(biāo)值帜篇。而這個(gè)預(yù)測(cè)結(jié)果在對(duì)應(yīng)的 110 個(gè)實(shí)例上的均方誤差(MSE)等于 0.0151笙隙。
在圖 6-5 的左側(cè)顯示的是模型的預(yù)測(cè)結(jié)果,如果你將max_depth=3
設(shè)置為 3竟痰,模型就會(huì)如 6-5 圖右側(cè)顯示的那樣.注意每個(gè)區(qū)域的預(yù)測(cè)值總是該區(qū)域中實(shí)例的平均目標(biāo)值坏快。算法以一種使大多數(shù)訓(xùn)練實(shí)例盡可能接近該預(yù)測(cè)值的方式分割每個(gè)區(qū)域。
譯者注:圖里面的紅線就是訓(xùn)練實(shí)例的平均目標(biāo)值昧旨,對(duì)應(yīng)上圖中的
value
CART 算法的工作方式與之前處理分類模型基本一樣祥得,不同之處在于啃沪,現(xiàn)在不再以最小化不純度的方式分割訓(xùn)練集,而是試圖以最小化 MSE 的方式分割訓(xùn)練集。
公式 6-4 顯示了該算法試圖最小化的損失函數(shù)殷费。
和處理分類任務(wù)時(shí)一樣械哟,決策樹在處理回歸問題的時(shí)候也容易過擬合殿雪。如果不添加任何正則化(默認(rèn)的超參數(shù)),你就會(huì)得到圖 6-6 左側(cè)的預(yù)測(cè)結(jié)果爸业,顯然,過度擬合的程度非常嚴(yán)重拯爽。而當(dāng)我們?cè)O(shè)置了min_samples_leaf = 10
钧忽,相對(duì)就會(huì)產(chǎn)生一個(gè)更加合適的模型了,就如圖 6-6 所示的那樣桃煎。
不穩(wěn)定性
我希望你現(xiàn)在了解了決策樹到底有哪些特點(diǎn):
它很容易理解和解釋,易于使用且功能豐富而強(qiáng)大备禀。然而奈揍,它也有一些限制男翰,首先纽乱,你可能已經(jīng)注意到了,決策樹很喜歡設(shè)定正交化的決策邊界租冠,(所有邊界都是和某一個(gè)軸相垂直的)薯嗤,這使得它對(duì)訓(xùn)練數(shù)據(jù)集的旋轉(zhuǎn)很敏感,例如圖 6-7 顯示了一個(gè)簡單的線性可分?jǐn)?shù)據(jù)集镜粤。在左圖中玻褪,決策樹可以輕易的將數(shù)據(jù)分隔開带射,但是在右圖中,當(dāng)我們把數(shù)據(jù)旋轉(zhuǎn)了 45° 之后券勺,決策樹的邊界看起來變的格外復(fù)雜。盡管兩個(gè)決策樹都完美的擬合了訓(xùn)練數(shù)據(jù)昧识,右邊模型的泛化能力很可能非常差盗扒。
解決這個(gè)難題的一種方式是使用 PCA 主成分分析(第八章),這樣通常能使訓(xùn)練結(jié)果變得更好一些侣灶。
更加通俗的講褥影,決策時(shí)的主要問題是它對(duì)訓(xùn)練數(shù)據(jù)的微小變化非常敏感,舉例來說校焦,我們僅僅從鳶尾花訓(xùn)練數(shù)據(jù)中將最寬的 Iris-Versicolor 拿掉(花瓣長 4.8 厘米统倒,寬 1.8 厘米),然后重新訓(xùn)練決策樹模型耸成,你可能就會(huì)得到圖 6-8 中的模型浴鸿。正如我們看到的那樣岳链,決策樹有了非常大的變化(原來的如圖 6-2),事實(shí)上左胞,由于 Scikit-Learn 的訓(xùn)練算法是非常隨機(jī)的举户,即使是相同的訓(xùn)練數(shù)據(jù)你也可能得到差別很大的模型(除非你設(shè)置了隨機(jī)數(shù)種子)。
我們下一章中將會(huì)看到躺枕,隨機(jī)森林可以通過多棵樹的平均預(yù)測(cè)值限制這種不穩(wěn)定性拐云。
練習(xí)
在 有100 萬個(gè)實(shí)例的訓(xùn)練集上訓(xùn)練(沒有限制)的決策樹的深度大概是多少?
節(jié)點(diǎn)的基尼指數(shù)比起它的父節(jié)點(diǎn)是更高還是更低膳帕?它是通常情況下更高/更低薇缅,還是永遠(yuǎn)更高/更低泳桦?
如果決策樹過擬合了,減少最大深度是一個(gè)好的方法嗎谒府?
如果決策樹對(duì)訓(xùn)練集欠擬合了浮毯,嘗試縮放輸入特征是否是一個(gè)好主意债蓝?
如果對(duì)包含 100 萬個(gè)實(shí)例的數(shù)據(jù)集訓(xùn)練決策樹模型需要一個(gè)小時(shí),在包含 1000 萬個(gè)實(shí)例的培訓(xùn)集上訓(xùn)練另一個(gè)決策樹大概需要多少時(shí)間呢?
如果你的訓(xùn)練集包含 100,000 個(gè)實(shí)例蹦锋,設(shè)置
presort=True
會(huì)加快訓(xùn)練的速度嗎欧芽?-
對(duì)
moons
數(shù)據(jù)集進(jìn)行決策樹訓(xùn)練并優(yōu)化模型千扔。通過語句
make_moons(n_samples=10000, noise=0.4)
生成moons
數(shù)據(jù)集通過
train_test_split()
將數(shù)據(jù)集分割為訓(xùn)練集和測(cè)試集。-
進(jìn)行交叉驗(yàn)證厘唾,并使用網(wǎng)格搜索法尋找最好的超參數(shù)值(使用
GridSearchCV
類的幫助文檔)提示: 嘗試各種各樣的
max_leaf_nodes
值 使用這些超參數(shù)訓(xùn)練全部的訓(xùn)練集數(shù)據(jù)龙誊,并在測(cè)試集上測(cè)量模型的表現(xiàn)。你應(yīng)該獲得大約 85% 到 87% 的準(zhǔn)確度铣焊。
-
生成森林
接著前邊的練習(xí)罕伯,現(xiàn)在,讓我們生成 1,000 個(gè)訓(xùn)練集的子集坟募,每個(gè)子集包含 100 個(gè)隨機(jī)選擇的實(shí)例婿屹。提示:你可以使用 Scikit-Learn 的
ShuffleSplit
類推溃。使用上面找到的最佳超參數(shù)值铁坎,在每個(gè)子集上訓(xùn)練一個(gè)決策樹。在測(cè)試集上測(cè)試這 1000 個(gè)決策樹扩所。由于它們是在較小的集合上進(jìn)行了訓(xùn)練朴乖,因此這些決策樹可能會(huì)比第一個(gè)決策樹效果更差买羞,只能達(dá)到約 80% 的準(zhǔn)確度。
見證奇跡的時(shí)刻到了期丰!對(duì)于每個(gè)測(cè)試集實(shí)例吃挑,生成 1,000 個(gè)決策樹的預(yù)測(cè)結(jié)果舶衬,然后只保留出現(xiàn)次數(shù)最多的預(yù)測(cè)結(jié)果(您可以使用 SciPy 的
mode()
函數(shù))。這個(gè)函數(shù)使你可以對(duì)測(cè)試集進(jìn)行多數(shù)投票預(yù)測(cè)植阴。在測(cè)試集上評(píng)估這些預(yù)測(cè)結(jié)果,你應(yīng)該獲得了一個(gè)比第一個(gè)模型高一點(diǎn)的準(zhǔn)確率憾朴,(大約 0.5% 到 1.5%)众雷,恭喜做祝,你已經(jīng)弄出了一個(gè)隨機(jī)森林分類器模型!
(第一部分 機(jī)器學(xué)習(xí)基礎(chǔ))
第01章 機(jī)器學(xué)習(xí)概覽
第02章 一個(gè)完整的機(jī)器學(xué)習(xí)項(xiàng)目(上)
第02章 一個(gè)完整的機(jī)器學(xué)習(xí)項(xiàng)目(下)
第03章 分類
第04章 訓(xùn)練模型
第05章 支持向量機(jī)
第06章 決策樹
第07章 集成學(xué)習(xí)和隨機(jī)森林
第08章 降維
(第二部分 神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí))
第9章 啟動(dòng)和運(yùn)行TensorFlow
第10章 人工神經(jīng)網(wǎng)絡(luò)
第11章 訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)(上)
第11章 訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)(下)
第12章 設(shè)備和服務(wù)器上的分布式 TensorFlow
第13章 卷積神經(jīng)網(wǎng)絡(luò)
第14章 循環(huán)神經(jīng)網(wǎng)絡(luò)
第15章 自編碼器
第16章 強(qiáng)化學(xué)習(xí)(上)
第16章 強(qiáng)化學(xué)習(xí)(下)