決策樹簡介
決策樹是一種特殊的樹形結構,一般由節點和有向邊組成。其中,節點表示特徵、屬性或者一個類。而有向邊包含有判斷條件。如圖所示,決策樹從根節點開始延伸,經過不同的判斷條件後,到達不同的子節點。而上層子節點又可以作為父節點被進一步劃分為下層子節點。一般情況下,我們從根節點輸入數據,經過多次判斷後,這些數據就會被分為不同的類別。這就構成了一顆簡單的分類決策樹。
特徵選擇
特徵選擇是建立決策樹之前十分重要的一步。如果是隨機地選擇特徵,那麼所建立決策樹的學習效率將會大打折扣。舉例來講,銀行採用決策樹來解決信用卡審批問題,判斷是否向某人發放信用卡可以根據其年齡、工作單位、是否有不動產、歷史信貸情況等特徵決定。而選擇不同的特徵,後續生成的決策樹就會不一致,這種不一致最終會影響到決策樹的分類效率。
通常我們在選擇特徵時,會考慮到兩種不同的指標,分別為:信息增益和信息增益比。要想弄清楚這兩個概念,我們就不得不提到資訊理論中的另一個十分常見的名詞 —— 熵。
熵(Entropy)是表示隨機變量不確定性的度量。簡單來講,熵越大,隨機變量的不確定性就越大。而特徵 A 對於某一訓練集 D 的信息增益 g(D, A) 定義為集合 D 的熵 H(D) 與特徵 A 在給定條件下 D 的熵 H(D/A) 之差。
實現代碼
from sklearn import datasets
import matplotlib.pyplot as plt
import numpy as np
from sklearn import tree
# Iris數據集是常用的分類實驗數據集,
# 由Fisher, 1936收集整理。Iris也稱鳶尾花卉數據集,
# 是一類多重變量分析的數據集。數據集包含150個數據集,
# 分為3類,每類50個數據,每個數據包含4個屬性。
# 可通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預測鳶尾花卉屬於(Setosa,Versicolour,Virginica)三個種類中的哪一類。
#載入數據集
iris=datasets.load_iris()
iris_data=iris['data']
iris_label=iris['target']
iris_target_name=iris['target_names']
X=np.array(iris_data)
Y=np.array(iris_label)
#訓練
clf=tree.DecisionTreeClassifier(max_depth=3)
clf.fit(X,Y)
#這裡預測當前輸入的值的所屬分類
print('類別是',iris_target_name[clf.predict([[7,1,1,1]])[0]])