決策樹簡介
決策樹是一種樹形結構
樹中每個內部節點表示一個特征上的判斷,每個分支代表一個判斷結果的輸出,每個葉子節點代表一種分類結果
(僅舉例無其他意義或隱喻)就像一個女孩去相親,那么首先詢問是否大于30,大于則不見,不大于再看外貌條件,不丑則在看收入條件等。這些選擇就是這棵樹的特征
決策樹的建立過程
1.特征選擇:選取有較強分類能力的特征。
2.決策樹生成:根據選擇的特征生成決策樹。
3. 決策樹也易過擬合,采用剪枝的方法緩解過擬合
然后我們引入一個特殊的概念:
信息熵
熵 Entropy :信息論中代表隨機變量不確定度的度量
熵越大,數據的不確定性度越高,信息就越多
熵越小,數據的不確定性越低
信息熵的計算方法
例如
信息增益
公式有點難看明白,所以來看個例子8:
了解完熵之后,就可以看后面的了
ID3決策樹
接下來還要了解一些信息增益率
求特征a、b的信息增益率
CART樹
基尼值Gini(D):從數據集D中隨機抽取兩個樣本,其類別標記不一致的概率。故,Gini(D)值越小,數據集D的純度越高
基尼指數Gini_index(D):選擇使劃分后基尼系數最小的屬性作為最優化分屬性。
例子
CRAT分類樹
已知:是否拖欠貸款數據。
需求:計算各特征的基尼指數,選擇最優分裂點
CART回歸樹
平方損失
根據平方損失構建CART回歸樹
但是實際使用中回歸問題還是用線性回歸來做,決策樹容易過擬合
"""
結論:回歸類的問題。即能使用線性回歸,也能使用決策樹回歸優先使用線性回歸,因為決策樹回歸可能比較容易導致過擬合
"""import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeRegressor #回歸決策樹
from sklearn.linear_model import LinearRegression #線性回歸
import matplotlib.pyplot as plt#1、獲取數據
x = np.array(list(range(1, 11))).reshape(-1, 1)
y = np.array([5.56, 5.70, 5.91, 6.40, 6.80, 7.05, 8.90, 8.70, 9.00, 9.05])#2、創建線性回歸 和 決策樹回歸
es1=LinearRegression()
es2=DecisionTreeRegressor(max_depth=1)
es3=DecisionTreeRegressor(max_depth=10)#3、模型訓練
es1.fit(x,y)
es2.fit(x,y)
es3.fit(x,y)#4、準備測試數據 ,用于測試
# 起始, 結束, 步長.
x_test = np.arange(0.0, 10.0, 0.1).reshape(-1, 1)
print(x_test)#5、模型預測
y_predict1=es1.predict(x_test)
y_predict2=es2.predict(x_test)
y_predict3=es3.predict(x_test)#6、繪圖
plt.figure(figsize=(10,5))#散點圖
plt.scatter(x,y,color='gray',label='data')plt.plot(x_test,y_predict1,color='g',label='liner regression')
plt.plot(x_test,y_predict2,color='b',label='max_depth=1')
plt.plot(x_test,y_predict3,color='r',label='max_depth=10')plt.legend()
plt.xlabel("data")
plt.ylabel("target")plt.show()
決策樹剪枝
決策樹剪枝是一種防止決策樹過擬合的一種正則化方法;提高其泛化能力。
把子樹的節點全部刪掉,使用用葉子節點來替換
1.預剪枝:指在決策樹生成過程中,對每個節點在劃分前先進行估計,若當前節點的劃分不能帶來決策樹泛化性能提升,則停止劃分并將當前節點標記為葉節點;
優點:
預剪枝使決策樹的很多分支沒有展開,不單降低了過擬合風險,還顯著減少了決策樹的訓練、測試時間開銷
缺點:
有些分支的當前劃分雖不能提升泛化性能,但后續劃分卻有可能導致性能的顯著提高;
預剪枝決策樹也帶來了欠擬合的風險
2.后剪枝:是先從訓練集生成一棵完整的決策樹,然后自底向上地對非葉節點進行考察,若將該節點對應的子樹替換為葉節點能帶來決策樹泛化性能提升,則將該子樹替換為葉節點。
優點:比預剪枝保留了更多的分支。一般情況下,后剪枝決策樹的欠擬合風險很小,泛化性能往往優于預剪枝
缺點:后剪枝先生成,后剪枝。自底向上地對樹中所有非葉子節點進行逐一考察,訓練時間開銷比未剪枝的決策樹和預剪枝的決策樹都要大得多。