機器學(xué)習(xí)決策樹實戰(zhàn)演練
譯文譯者 | 朱先忠
審校 | 孫淑娟
機器學(xué)習(xí)中的決策樹
現(xiàn)代機器學(xué)習(xí)算法正在改變我們的日常生活。例如,像BERT這樣的大型語言模型正在為谷歌搜索提供支持,GPT-3正在為許多高級語言應(yīng)用程序提供支持。
另一方面,今天構(gòu)建復(fù)雜的機器學(xué)習(xí)算法比以往任何時候都容易得多。然而,無論機器學(xué)習(xí)算法有多么復(fù)雜,都屬于把它們歸納為以下學(xué)習(xí)類別之一:
- 監(jiān)督學(xué)習(xí)
- 無監(jiān)督學(xué)習(xí)
- 半監(jiān)督學(xué)習(xí)
- 強化學(xué)習(xí)
其實,決策樹算是最古老的有監(jiān)督的機器學(xué)習(xí)算法之一,可以解決廣泛的現(xiàn)實問題。研究表明,決策樹算法的最早發(fā)明可以追溯到1963年。
接下來,讓我們深入研究一下這個算法的細節(jié),看看為什么這類算法今天仍然廣為流行。
什么是決策樹?
決策樹算法是一種流行的有監(jiān)督機器學(xué)習(xí)算法,因為它處理復(fù)雜數(shù)據(jù)集的方法相對簡單得多。決策樹的名字來源于它們與“樹”這種結(jié)構(gòu)的相似性;樹結(jié)構(gòu)包括以節(jié)點和邊緣形式存在的根、枝和葉等幾個組成部分。它們用于決策分析,很像一個基于if-else的決策流程圖,這些決策會產(chǎn)生所需的預(yù)測。決策樹能夠?qū)W習(xí)這些if-else決策規(guī)則,從而拆分數(shù)據(jù)集,最后生成樹狀數(shù)據(jù)模型。
決策樹在分類問題的離散結(jié)果預(yù)測和回歸問題的連續(xù)數(shù)值結(jié)果預(yù)測中得到了應(yīng)用。多年來科學(xué)家們開發(fā)出了許多不同的算法,如CART、C4.5和ensemble算法,如隨機森林和梯度增強樹等。
剖析決策樹的各個組成部分
決策樹算法的目標(biāo)是預(yù)測輸入數(shù)據(jù)集的結(jié)果。樹的數(shù)據(jù)集共劃分為三種形式:屬性、屬性的值和要預(yù)測的種類。與任何監(jiān)督學(xué)習(xí)算法一樣,數(shù)據(jù)集被劃分為訓(xùn)練集和測試集兩種類型。其中,訓(xùn)練集定義了算法學(xué)習(xí)并應(yīng)用于測試集的決策規(guī)則。
在聚集介紹決策樹算法的步驟之前,讓我們先來了解一下決策樹的組成部分:
- 根節(jié)點:它是決策樹頂部的起始節(jié)點,包含所有屬性值。根節(jié)點根據(jù)算法學(xué)習(xí)到的決策規(guī)則分成決策節(jié)點。
- 分支:分支是對應(yīng)于屬性值的節(jié)點之間的連接器。在二進制拆分中,分支表示真路徑和假路徑。
- 決策節(jié)點/內(nèi)部節(jié)點:內(nèi)部節(jié)點是根節(jié)點和葉節(jié)點之間的決策節(jié)點,對應(yīng)于決策規(guī)則及其答案路徑。節(jié)點表示問題,分支顯示基于這些問題的相關(guān)答案的路徑。
- 葉節(jié)點:葉節(jié)點是表示目標(biāo)預(yù)測的終端節(jié)點。這些節(jié)點不會進一步分裂。
以下是決策樹及其上述組件的可視化表示,決策樹算法經(jīng)過以下步驟以達到所需的預(yù)測:
- 算法從具有所有屬性值的根節(jié)點開始。
- 根節(jié)點根據(jù)算法從訓(xùn)練集中學(xué)習(xí)到的決策規(guī)則分成決策節(jié)點。
- 基于問題及其答案路徑,通過分支/邊緣傳遞內(nèi)部決策節(jié)點。
- 繼續(xù)前面的步驟,直到到達葉節(jié)點或使用了所有屬性。
為了在每個節(jié)點上選擇最佳屬性,將根據(jù)以下兩個屬性選擇度量之一進行拆分:
- ??基尼系數(shù)??(Gini index)測量基尼不純度(Gini Impurity),以指示算法對隨機類別標(biāo)簽進行錯誤分類的可能性。
- ??信息增益??測量分割后熵的改善,以避免預(yù)測類的50/50分割。熵是給定數(shù)據(jù)樣本中不純度的數(shù)學(xué)度量。決策樹中的混沌狀態(tài)由接近50/50的劃分表示。
使用決策樹算法的花卉分類案例
在了解了上述基礎(chǔ)知識后,接下來讓我們著手實現(xiàn)一個應(yīng)用案例。在本文中,我們將使用Scikit學(xué)習(xí)庫在Python中實現(xiàn)決策樹分類模型。
關(guān)于數(shù)據(jù)集的簡單說明
本教程的數(shù)據(jù)集是一個鳶尾花數(shù)據(jù)集。Scikit開源庫中已經(jīng)內(nèi)置了這個數(shù)據(jù)集,所以不需要開發(fā)人員再從外部加載它。該數(shù)據(jù)集共包括四個鳶尾屬性及相應(yīng)的屬性值,這些屬性將被輸入到模型中,以便預(yù)測三種類型的鳶尾花之一。
- 數(shù)據(jù)集中的屬性/特征:萼片長度、萼片寬度、花瓣長度、花瓣寬度。
- 數(shù)據(jù)集中的預(yù)測標(biāo)簽/花卉類型:Setosis、Versicolor、Virginica。
接下來,將給出決策樹分類器基于python語言實現(xiàn)的分步代碼說明。
導(dǎo)入庫
首先,通過下面的一段代碼導(dǎo)入執(zhí)行決策樹實現(xiàn)所需的庫。
加載鳶尾花(Iris)數(shù)據(jù)集
以下代碼展示了使用load_iris函數(shù)加載存儲到data_set變量中的sklearn.dataset庫中的鳶尾花數(shù)據(jù)集。接下來的兩行代碼將實現(xiàn)打印鳶尾花類型和特征信息。
分離屬性和標(biāo)簽
下面的代碼行實現(xiàn)了將花的特性和類型信息分離開來,并將它們存儲在相應(yīng)的變量中。其中,shape[0]函數(shù)負責(zé)確定存儲在X_att變量中的屬性數(shù);數(shù)據(jù)集中的屬性值總數(shù)為150。
其實,我們還可以創(chuàng)建一個可視化表格來展示數(shù)據(jù)集中的一部分屬性值,方法是將X_att變量中的值添加到panda庫中的DataFrame函數(shù)中即可。
拆分數(shù)據(jù)集
以下代碼展示了使用train_test_split函數(shù)將數(shù)據(jù)集拆分為訓(xùn)練集和測試集兩部分。其中,此函數(shù)中的random_state參數(shù)用于為函數(shù)提供隨機種子,以便在每次執(zhí)行時為給定數(shù)據(jù)集提供相同的結(jié)果;test_size表示測試集的大??;0.25表示拆分后測試數(shù)據(jù)占25%而訓(xùn)練數(shù)據(jù)占75%。
應(yīng)用決策樹分類函數(shù)
下面的代碼通過使用DecisionTreeClassifier函數(shù)創(chuàng)建一個??分類模型??來實現(xiàn)一棵決策樹,分類標(biāo)準(zhǔn)設(shè)置為“entropy”方式。該標(biāo)準(zhǔn)能夠將屬性選擇度量設(shè)置為信息增益(Information gain)。然后,代碼將模型與我們的屬性和標(biāo)簽訓(xùn)練集相匹配。
計算模型精度
下面的代碼負責(zé)計算并打印決策樹分類模型在訓(xùn)練集和測試集上的準(zhǔn)確性。為了計算準(zhǔn)確度分數(shù),我們使用了predict函數(shù)。測試結(jié)果是:訓(xùn)練集和測試集的準(zhǔn)確率分別為100%和94.7%。
真實世界中的決策樹應(yīng)用程序
當(dāng)今社會,機器學(xué)習(xí)決策樹在許多行業(yè)的決策過程中都得到廣泛應(yīng)用。其中,決策樹的最常見應(yīng)用首先是在金融和營銷部門,例如可用于如下一些子領(lǐng)域:
- 貸款批準(zhǔn)
- 支出管理
- 客戶流失預(yù)測
- 新產(chǎn)品的可行性分析,等等。
如何改進決策樹?
作為本文決策樹主題討論的總結(jié),我們有充分的理由安全地假設(shè):決策樹的可解釋性仍然很受歡迎。決策樹之所以容易理解,是因為它們可以被人類以可視化方式展現(xiàn)并便于解釋。因此,它們是解決機器學(xué)習(xí)問題的直觀方法,同時也能夠確保結(jié)果是可解釋的。機器學(xué)習(xí)中的可解釋性是我們過去討論過的一個小話題,它也與即將到來的人工智能倫理主題存在密切聯(lián)系。
與任何其他機器學(xué)習(xí)算法一樣,決策樹自然也可以加以改進,以避免過度擬合和出現(xiàn)過于偏向于優(yōu)勢預(yù)測類別。剪枝和ensembling技術(shù)是克服決策樹算法缺點方案最常采用的方法。決策樹盡管存在這些缺點,但仍然是決策分析算法的基礎(chǔ),并將在機器學(xué)習(xí)領(lǐng)域始終保持重要位置。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標(biāo)題:??An Introduction to Decision Trees for Machine Learning??,作者:Stylianos Kampakis