Skip to content

Latest commit

 

History

History
179 lines (109 loc) · 6.83 KB

決策樹.md

File metadata and controls

179 lines (109 loc) · 6.83 KB

決策樹

Agenda

Note

簡介

推薦應用

87

  • 如何讓machine來學習構建這樣的決策樹?
  • 哪個feature(occupation, gender)在何時需要被抽取出來當作決策?

學生錄取資格

88

  • 在看另外一個例子,如何用決策樹來解決之前說的的學生錄取問題。
  • 利用多個直線段一一切割(x=5, y=7, y=2),再來構建出決策樹。

Entropy

  • 是一個物理概念。

89

  • Entropy可以精準測量一個粒子的自由程度。
  • 水蒸氣的Entropy最高,冰的Entropy最低。
  • 用機率來解釋。

90

  • 最左邊的桶子,不管我們怎樣重新擺放球的位置,都是一樣的結果,所以Entropy最低。
  • 最右邊的桶子,隨著重新擺放球的位置,擁有多種的可能性,所以Entropy最高。

集合越穩固或越具有同類性其Entropy越低

  • 用知識來解釋。

91

  • 最左邊的桶子,我們非常確定球一定是紅色,所以是high knowledge,對應的Entropy最低。
  • 最右邊的桶子,確定球是紅色越低,所以是low knowledge,對應的Entropy最高。

熵公式

92

  • 從每個桶子都抽出4顆球(抽完都放回去),其顏色組合跟桶子內的球原本的顏色組合一樣就贏。
  • 最左邊的桶子,贏的機率最高。
  • 最右邊的桶子,贏的機率最低。

93

利用log函數讓這些機率乘積改成和,方便計算

94

  • 最後一行就是我們的Entropy。

95

  • 多幾顆球的Entropy計算例子。

96

  • 熵公式(公式“m-n" 应该为"m+n")。

信息增益

Information Gain

97

  • Information Gain就是將**"老爸的Entropy減掉兒子們的Entropy平均"**。

98

  • 決策樹在構建過程中,會根據Information Gain來決定如何構建,在這個例子決策樹會選擇最右邊的構建方式。

信息增益最大化

99

  • 先算出根節點的Entropy(3個pokemon, 2個whatapp, 1個snapchat)。

100

101

102

  • 分別計算出以occupation跟gender所得到information gain。
  • 決定會先從gender(information gain高)開始建構決策樹。

隨機森林

103

104

  • 隨著特徵數據量的變多,決策樹很容易遇到overfitting的問題。

105

  • 隨機森林: 利用表中隨機挑選不同的特徵值來構建多個決策樹
  • 讓多個決策樹同時進行決策,並選取結果中顯示最多的。

超參數

  • 最大深度(max_depth)
  • 每片叶子的最小样本数(min_samples_leaf)
    • 在分裂节点时,很有可能一片叶子上有 99 个样本,而另一片叶子上只有 1 个样本。这将使我们陷入困境,并造成资源和时间的浪费。如果想避免这种问题,我们可以设置每片叶子允许的最小样本数。
    • 这个数字可以被指定为一个整数,也可以是一个浮点数。如果它是整数,它将表示这片叶子上的最小样本数。如果它是个浮点数,它将被视作每片叶子上的最小样本比例。比如,0.1 或 10% 表示如果一片叶子上的样本数量小于该节点中样本数量的 10%,这种分裂将不被允许。
  • 每次分裂的最小样本数(min_samples_split)
    • 这个参数与每片叶子上的最小样本树相同,只不过是应用在节点的分裂当中。
  • 最大特征数(max_features)
    • 限制每个分裂中查找的特征数。如果这个数字足够庞大,我们很有可能在查找的特征中找到良好特征(尽管也许并不是完美特征)。然而,如果这个数字小于特征数,这将极大加快我们的计算速度。

sklearn 中的決策樹

# 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.
# 如果不設置超參數,默认的超参数将以 100% 的准确率拟合数据
# 盡量調整这些超参数,例如 max_depth 和 min_samples_leaf
# 并尝试找到最简单的潜在模型,不要太过拟合模型!
model = DecisionTreeClassifier()
# DecisionTreeClassifier(max_depth = 7, min_samples_leaf = 10)

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

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

使用决策树探索泰坦尼克乘客存活模型

使用决策树探索泰坦尼克乘客存活模型