在講決策樹之前補充了一些基本概念:位元化、資訊熵、條件熵,重點理解熵的概念。本章開始正式進入機器學習模型-決策樹。
01 決策樹 - 數學理論概述
決策樹 decision tree:在已知各種情況發生概率的基礎上,通過構建決策樹來進行分析的一種方式,是一種__運用概率分析的**法__。
決策樹是乙個**模型,代表物件屬性和物件值的對映關係;每個葉子節點都代表一種類別;
決策樹分為:決策樹可用於__有監督__的分類和回歸演算法,回歸用於**連續值,常用演算法:id3、c4.5、cart等。
決策樹演算法的重點是決策樹的構造,構造過程是進行屬性選擇度量,確定各個特徵屬性之間的樹形關係。
構建決策樹步驟是**屬性,**屬性是指在某個節點按照某一類特徵屬性的不同劃分,構建不同的分支。目的在於:讓各個**子集盡可能$color$。即讓乙個**子類中,待分類的項盡可能的屬於同一類別。
比如:根據乙個人有沒有喉結來判斷是男是女。
通過「是否有喉結」這一屬性分類出的兩個子類:「男」,「女」 。這是乙個比較$color$的分類。原來人的分類是男是女不確定性很高,但根據上述分類之後,男和女的分類相當清晰,此時該系統的不穩定性會比較低。
但是:如果根據乙個人 「是否帶眼鏡」 來判斷是男是女,顯然分類的結果不如根據 「是否有喉結」 進行分類效果好。
此時理解:__構造過程是進行屬性選擇度量,確定各個特徵屬性之間的樹形關係。__ 這句話的含義是不是就清晰多了。
1、將所有特徵看成乙個乙個的節點。
2、遍歷每個特徵的每一種分割方式,找到最好的分割點;將資料劃分為不同的子節點,n1、n2、...、nm,計算劃分之後所有子節點的$color$資訊。
3、對於第2步產生的分割,選擇出最優的特徵以及最優的劃分方式;得出最終的子節點:n1、n2、...、nm;
4、對於子節點n1、n2、...、nm分別繼續執行2~3步,直到每個最終子節點都足夠$color$。
思考決策樹和kd樹的區別:
01 knn演算法 - 概述
02 knn演算法 - kd tree
kd樹是乙個二叉樹,而決策樹每一層的葉子節點可以有多個。
步驟分析:現在有若干特徵x1、x2、... 、xn
__假設1:__特徵x為是否有喉結。
那麼對於特徵值的劃分必然是(0-有,1-沒有),特徵劃分方式只有一種。二叉樹。
__假設2:__特徵x有三種取值:(0,1,2) 那麼分類方式有幾種?
第1種:(0,1,2);三個葉子節點。
第2種:屬於0類,不屬於0類;二叉樹。
第3種:屬於1類,不屬於1類;二叉樹。
第4種:屬於2類,不屬於2類;二叉樹。
在這4中分類方式中,我們可以找到乙個對系統穩定性最佳的分類方式。
然後對於若干特徵x1、x2、... 、xn,我們需要遍歷出每一種特徵__所有__的分類方式,並找到乙個對系統穩定性最佳的分類方式。
再針對上一步已選出的特徵x1、x2、... 、xn中的最佳的分類方式,我們再從這n個分類方式中再找到乙個最佳的分類方式,做為決策樹第一次**。這次的**是所有選擇中最$color$的分割方式,是整個系統中的最優分割方式。
得到第乙個最$color$的分割方式即生成了第1組子節點,我們還可以繼續往下劃分,以此類推。
注意:
1、一切劃分的標準都是基於目標值y的,乙個理想的演算法結果是:每一次分割後的子節點,都更夠更好得體現目標值。
2、如果一次**將子節點分割得太細,如動物分類,我們不是分割到狗就結束,而是一次細分到狗的每乙個品種(金毛、泰迪)。分得太細可能會引起過擬合的問題。
3、針對連續值的劃分:確定乙個值s作為**點,將大於s的值作為一條分支,小於等於s的值作為另一條分支。
決策樹演算法是一種 「貪心演算法」 ,我們只可能考慮到每一次**的最優分割情況,但是無法找出全域性的最優劃分情況。
對於整體資料而言,按照所擁有特徵屬性進行劃分操作,對所有劃分操作的結果集$color$進行比較,選擇$color$越高的屬性作為當前需要分割的資料集進行分割操作。持續迭代,直到得到最終結果。
決策樹是通過$color$來選擇分割特徵屬性點的。
ps:在本文中,唯一沒有深入解釋的術語是$color$,文章中統一使用紅色標註。$color$是非常重要的乙個知識點,會在下一章深入描述。本章中,請先充分認識到$color$在決策樹中的作用和意義。
03 決策樹 - 量化純度、資訊增益度、停止條件、評估
決策樹 初識
決策樹 顯然e a 越小,gain a 的值越大,說明選擇測試屬性a對於分類提供的資訊越大,選擇a之後對分類的分類提供的資訊越大,選擇a之後對分類的不確定成都越小.屬性a的k個不同的值對應樣本集s的k個子集或分支,通過遞迴呼叫上述的過程 不包括已經選擇的屬性 生成其他屬性作為節點和分支來生成整個決策...
決策樹構建
from sklearn import tree import pydotplus x 0,0 1,1 y 0,1 clf tree.decisiontreeclassifier 決策樹分類器 clf clf.fit x,y 對樣本x和對應的類y訓練決策樹 clf.predict 2.2.為乙個新的...
決策樹 ID3構建決策樹
coding utf 8 from math import log import operator 建立訓練資料集 defcreatedataset dataset 1,1,yes 1,1,yes 1,0,no 0,1,no 0,1,no 資料集的最後乙個元素作為該資料的標籤,是否是魚 labels...