資料分析 決策樹

2022-10-11 09:03:11 字數 2939 閱讀 9997

引言高二(1)班的小明同學和小方同學為了準備即將進行的校園羽毛球大賽,準備近乙個月的時間去練習打球。不過,並不是每一天都適合練球。通常,小明和小方需要考慮一些因素來決定今天是否適合打羽毛球,比如:今天是否有場地(若沒有室內場地,就只能選擇室外場地),如果是要在室外練習的話,天氣是否合適,是否會颳風等,例如下表所示:

實際上,上述的問題是乙個典型的智慧型決策問題。首先,它有一些輸入的特徵,比如場地是市內還是室外,氣溫是炎熱,天氣是下雨還是晴天,風速是大還是小;小明和小方通過某種特定的演算法,對這一系列的特徵進行綜合判斷,從而得出今天是否應該打球的決策。可以看到,對乙個智慧型決策系統,它有三個重要的組成部分,即特徵、演算法、決策。下圖體現了乙個典型的智慧型決策系統的組成部門,以及各部分之間的輸入/輸出關係。

決策樹在上面的例子中,場地,天氣,溫度,風速特徵選取完成後,開始進行決策,在我們的問題中,決策的內容實際上是將結果分成兩類,即是(1)否(0)練球。這一類智慧型決策問題稱為分類問題,決策樹是一種簡單的處理分類問題的演算法.

決策樹的本質是由多個判斷節點組成的樹形函式,以乙個樣本的特徵向量x=(x1,x2,x3...xd) 作為輸入,返回乙個「決策」,例如判斷具有該特徵的樣本屬於哪個類別。簡單地說,我們從乙個「樹根「節點開始,每次生出幾個(例如2)分叉節點(稱為子節點),再將子節點當成新的根節點,繼續往下生出新的子節點,如此重複,直到滿足某些停止條件停止決策樹的生長。當一棵決策樹建立完畢後,我們稱最下面的節點(無子節點)為葉節點。其他的節點成為非葉節點。每個非葉節點與乙個特徵屬性相關聯,根據此特徵屬性的值的不同,進行子節點的分叉操作。

決策樹的原理

我們用下圖來說明決策樹的工作原理。首先我們選取天氣值作為判斷變數(作為根節點),根據天氣可以取值(晴天、陰天、雨天)等三個值,我們的決策生成三個分叉。我們發現陰天是最適合打球的天氣(因為即沒有日曬,又不雨淋),因此只要是遇上陰天,我們的決策都是「打球「。此時我們的三個分叉中,相關陰天那個子節點變成了葉節點,不再往下繼續生成(因為走到此節點的所有樣本,都會直接被判為「打球」)。如果遇到晴天或者雨天(即樣本如果走到兩外兩個分叉),我們並不可不可以打球,這時候需要利用另外乙個特徵屬性進行進一步判斷決策。具體的可以參考下圖。

當輸入乙個樣本x=(x1,x2,x3...xd)後,會根據每個節點預設的特徵屬性以及分叉規則,走到下面一層的節點,接著根據這個新定址到的節點的預設特徵屬性以及分叉規則,繼續往決策樹的下一層走,一直到走到某個葉節點,整個行程結束。換句話說,每個樣本在決策樹上都有乙個唯一的,規定好的行走路線(自根節點至葉節點),在葉節點上,完成最終的決策,如分類(如可以根據走到該葉節點上的訓練資料的類別標籤,賦值給新的測試資料)。我們不難發現,以上決策樹的工作過程,有兩個關鍵點:

特徵屬性序列:在決策樹的生成構建中,對於每次分叉選擇那個特徵屬性,對最終形成決策樹的分類效能有影響。例如,為什麼我們要先判斷天氣,再判斷濕度或是否有風?這個次序倒過來,是否對我們的智慧型決策產生影響?

特徵屬性形式:我們觀察到,在上述的例子中,有些輸入特徵屬性是標籤型的,比如天氣的三個種類(晴天、雨天、陰天),也有一些屬性是連續的實數,如溫度,濕度等。不同型別的屬性,決策樹中對應節點的分叉判斷依據也是有所差別。比如對於標籤型別的特徵屬性,我們可以按照標籤的k個型別進行k個子節點分叉。具體的說,根據(xi==晴天 或 xi==雨天 或xi==陰天)這幾個條件來判斷資料樣本的走向。 對於實數型別的特徵屬性,我們可以進行設定閾值的操作。具體地說根據(xi>=閾值 或xi<= 閾值)來決定資料樣本在節點走那支分叉。

決策樹的構建

[使用專家規則]:根據專家的知識,人為的規定來生成決策樹。先考慮哪個特徵,再考慮哪個特徵;同時在設定每個分叉節點的分叉條件時,可以人為地設定我們認為最合適的分叉判別條件。例如,在上述的例子中,通常打羽毛球的高手知道,我們應該先判斷天氣型別,然後根據天氣型別,再考慮濕度,是否有風等因素,進行決策。所有的屬性探索先後順序,以及每個節點分叉條件判別式,都是事先規定好的。

[使用資料訓練]:在很多情況下,我們並不具備「專家」的能力。例如對於某種分類問題,我們可以找到1000多種特徵屬性,顯然「手動地「選擇某個屬性,設定分叉條件顯然是不可能做到的。在這種情況下,我們通常使用大量歷史資料(帶有最終的分類標籤)來自動地進行決策樹的構建。這種方式通常稱作決策樹訓練。決策樹的訓練通常是遞迴地,即一層下一層地訓練每個樹節點(選擇某個屬性,設定某個閾值或分叉條件),具體如下:

1)初始化乙個根節點。令所有的訓練樣本「走「到該根節點上。

2)尋找乙個合適的特徵屬性作為該節點往下分叉的判別變數。並且對該變數設定乙個分叉判別函式。例如我們選擇天氣這個變數,且將判別條件設為(xi==晴天 或 xi==雨天 或xi==陰天)。這裡的關鍵問題是,如何自動地選擇某個屬性?這裡,我們的準則是:我們所選擇的特徵屬性(以及判別條件式子)能使得分叉的左右兩邊的資料樣本盡量根據最終的分類標籤進行分開。例如在我們的例子中,如選擇了「濕度「這個屬性,我們發現如果設判別閾值為70的時候,走到左邊子節點的資料樣本都屬於」不打球「,而右邊都屬於」要打球「。如此,我們的期望達到了,即將資料根據最終的決策標籤分開。

換句話說,在分類問題中,我們希望每一分類節點下的樣例類別一致,即「純度」較高。決策過程中,在每個節點我們都會對很多屬性進行分開特性的「測試」,選取乙個最佳的分開函式。即使得走到左右子節點的樣本資料各自「純度「都較高。

3) 根據剛才獲得的屬性選取以及分叉函式設定,將當前節點上的資料往下面的子節點推送,並重複2)的操作。即遞迴地進行屬性選擇以及判別式設定。

4)當資料達某個節點時,「純度「達到最高(即全部都屬於乙個分類標籤),則這個節點的生成過程結束,並設定該節點的標籤為走到該節點上訓練資料所帶的標籤。

資料分析 決策樹演算法 決策樹的概念

顧名思義,決策樹將以樹狀結構表現出來,被用來輔助作出決策。具體結合例子來說,我們平時做決策時大多會伴隨著層層的選擇,比如找房子的時候,會考慮離工作 上課地點的距離 大小和 光照等等因素。如果乙個房子通勤快 低 光照好 空間大 雖然不太可能存在,但是只要存在這種房子 我們一定會作出 買 租 的決策。將...

資料分析 資料探勘 決策樹

0.決策樹整理 0.0 文章索引 2.書籍案例介紹 資料探勘 你必須知道的32個經典案例 第2版 3.其他。1.python sklearn使用 1.1 過程描述 1.1.1 核心步驟 1.1.2 程式流程解釋 1.2 匯入模組 from sklearn import tree from sklea...

python實戰 資料分析 決策樹

主要包括兩部分資料 訓練集train.csv 和測試集 test.csv 運用sklearn中運用decisiontreeclassifier 分類器來進行 到目前為止,sklearn 中只實現了 id3 與 cart決策樹,在構造 decisiontreeclassifier 類時,其中有乙個引數...