監督學習——決策樹

目錄

推薦應用

信息增益

信息增益最大化

隨機森林

超參數

最大深度

每片葉子的最小樣本數

每次分裂的最小樣本數

最大特徵數

sklearn中的決策樹

超參數

練習:

 使用決策樹探索泰坦尼克乘客存活模型


決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構成決策樹來求取淨現值的期望值大於等於零的概率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。由於這種決策分支畫成圖形很像一棵樹的枝幹,故稱決策樹。在機器學習中,決策樹是一個預測模型,他代表的是對象屬性與對象值之間的一種映射關係。決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的測試,每個分支代表一個測試輸出,每個葉節點代表一種類別。

推薦應用

熵,源來自於物理,熱力學中表徵物質狀態的參量之一,其物理意義是體系混亂程度的度量。熵是一種不確定性的度量。集合越穩固或越具有同類性,其熵越低,反之亦然。熵和知識相反,一個集合的知識越高,其熵越低,反之亦然。

對於兩種顏色球的情況,熵的公式如下:

信息增益

在決策樹算法的學習過程中,信息增益是特徵選擇的一個重要指標,它定義爲一個特徵能夠爲分類系統帶來多少信息,帶來的信息越多,說明該特徵越重要,相應的信息增益也就越大。信息增益:熵 - 條件熵。信息增益代表了在一個條件下,信息複雜度(不確定性)減少的程度。信息增益計算方法:父節點的熵與子節點熵平均值之間的差值。

信息增益最大化

瀏覽每列給出的可能的分法,計算其信息增益,並選擇信息增益最大的方法。先計算父結點的熵如下第一幅圖。然後按性別、職業分類,得到的信息增益分別爲0.54、1,按照這個計算,選擇職業分類。第一次分類按照職業,然後再按性別,如最後一張圖建立決策樹。

對於這樣數據可以如下分類。

隨機森林

決策樹經常會過擬合,對於這種現象可以類似於如下操作:隨機從數據中挑選幾列,並根據這些列構建決策樹,然後隨機選取其他幾列,再次構建決策樹,然後讓決策樹進行選擇。如果出現了新用戶,就只需讓所有的決策樹做出預測,並選取結果中顯示最多的,這種方法叫做隨機森林。(下面這個例子最後選擇的是綠色的軟件。)

其實還有比隨機選取列更好的方法,在後面的集成方法部分進行學習。

超參數

在決策樹中有一些相當重要的超參數:

最大深度

決策樹的最大深度指樹根和葉子之間的最大長度。當決策樹的最大深度爲 kk 時,它最多可以擁有 2^k2k 片葉子。

Maximum depth of a decision tree 決策樹的最大深度

每片葉子的最小樣本數

在分裂節點時,很有可能一片葉子上有 99 個樣本,而另一片葉子上只有 1 個樣本。這將使我們陷入困境,並造成資源和時間的浪費。如果想避免這種問題,我們可以設置每片葉子允許的最小樣本數。

                                                                                       每片葉子的最小樣本數

這個數字可以被指定爲一個整數,也可以是一個浮點數。如果它是整數,它將表示這片葉子上的最小樣本數。如果它是個浮點數,它將被視作每片葉子上的最小樣本比例。比如,0.1 或 10% 表示如果一片葉子上的樣本數量小於該節點中樣本數量的 10%,這種分裂將不被允許。

每次分裂的最小樣本數

這個參數與每片葉子上的最小樣本樹相同,只不過是應用在節點的分裂當中。

最大特徵數

有時,我們會遇到特徵數量過於龐大,而無法建立決策樹的情況。在這種狀況下,對於每一個分裂,我們都需要檢查整個數據集中的每一個特徵。這種過程極爲繁瑣。而解決方案之一是限制每個分裂中查找的特徵數。如果這個數字足夠龐大,我們很有可能在查找的特徵中找到良好特徵(儘管也許並不是完美特徵)。然而,如果這個數字小於特徵數,這將極大加快我們的計算速度。

  • 較大的深度往往會導致過擬合,這是因爲過深的決策樹可以記憶數據。而較小的深度會使得模型過於簡單,導致欠擬合。
  • 當每片葉子的樣本數量較小時,葉子上的樣本數量也有可能過於稀少,此時模型將記憶數據,也就是過擬合。當每片葉子的樣本數量較大時,決策樹能夠獲得足夠的彈性進行構建,這也許會導致欠擬合。

sklearn中的決策樹

>>> from sklearn.tree import DecisionTreeClassifier
>>> model = DecisionTreeClassifier()
>>> model.fit(x_values, y_values)

>>> print(model.predict([ [0.2, 0.8], [0.5, 0.4] ]))
[[ 0., 1.]]

超參數

當我們定義模型時,可以指定超參數。在實踐中,最常見的超參數包括:

  • max_depth:樹中的最大層級數量。
  • min_samples_leaf:葉子允許的最低樣本數量。
  • min_samples_split:拆分內部節點所需的最低樣本數量。
  • max_features:尋找最佳拆分方法時要考慮的特徵數量。
>>> model = DecisionTreeClassifier(max_depth = 7, min_samples_leaf = 10)

練習:

1. 構建決策樹模型 *使用 scikit-learn 的 DecisionTree 構建決策樹分類模型,並將其賦值給變量 model

2. 將模型與數據進行擬合

  • 你不需要指定任何超參數,因爲默認的超參數將以 100% 的準確率擬合數據。但是,建議你實驗這些超參數,例如 max_depth 和 min_samples_leaf,並嘗試找到最簡單的潛在模型,即最不太可能過擬合的模型!

3. 使用模型進行預測

  • 預測訓練集的標籤,並將此列表賦值給變量 y_pred

4. 計算模型的準確率

# Import statements 
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
import pandas as pd
import numpy as np

# Read the data.
data = np.asarray(pd.read_csv('data.csv', header=None))
# Assign the features to the variable X, and the labels to the variable y. 
X = data[:,0:2]
y = data[:,2]

# TODO: Create the decision tree model and assign it to the variable model.
# You won't need to, but if you'd like, play with hyperparameters such
# as max_depth and min_samples_leaf and see what they do to the decision
# boundary.
model = DecisionTreeClassifier()

# TODO: Fit the model.
model.fit(X, y)

# TODO: Make predictions. Store them in the variable y_pred.
y_pred = model.predict(X)

# TODO: Calculate the accuracy and assign it to the variable acc.
acc = accuracy_score(y, y_pred)

 使用決策樹探索泰坦尼克乘客存活模型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章