DecisionTreeRegressor---回歸樹
一.重要參數
criterion:
1)輸入"mse"使用均方誤差mean squared error(MSE),父節點和葉子節點之間的均方誤差的差額將被用來作為
特征選擇的標准,這種方法通過使用葉子節點的均值來最小化L2損失
2)輸入“friedman_mse”使用費爾德曼均方誤差,這種指標使用弗里德曼針對潛在分枝中的問題改進后的均方誤差
3)輸入"mae"使用絕對平均誤差MAE(mean absolute error),這種指標使用葉節點的中值來最小化L1損失
屬性中最重要的依然是feature_importances_,接口依然是apply, fit, predict, score最核心。
在回歸樹中,MSE不只是我們的分枝質量衡量指標,也是我們最常用的衡
量回歸樹回歸質量的指標,當我們在使用交叉驗證,或者其他方式獲取回歸樹的結果時,我們往往選擇均方誤差作
為我們的評估(在分類樹中這個指標是score代表的預測准確率)。在回歸中,我們追求的是,MSE越小越好。
簡單回歸樹:
from sklearn.datasets import load_boston from sklearn.model_selection import cross_val_score from sklearn.tree import DecisionTreeRegressor boston = load_boston() #這里使用boston數據集 regressor = DecisionTreeRegressor(random_state=0) cross_val_score(regressor, boston.data, boston.target, cv=10, scoring = "neg_mean_squared_error")
交叉驗證概念:
叉驗證是用來觀察模型的穩定性的一種方法,我們將數據划分為n份,依次使用其中一份作為測試集,其他n-1份
作為訓練集,多次計算模型的精確性來評估模型的平均准確程度。訓練集和測試集的划分會干擾模型的結果,因此
用交叉驗證n次的結果求出的平均值,是對模型效果的一個更好的度量。
二.一維回歸的圖像繪制
用回歸樹來擬合正弦曲線,並添加一些噪聲來觀察回歸樹的表現。
1. 導入需要的庫
import numpy as np from sklearn.tree import DecisionTreeRegressor import matplotlib.pyplot as plt
2. 創建一條含有噪聲的正弦曲線
在這一步,我們的基本思路是,先創建一組隨機的,分布在0~5上的橫坐標軸的取值(x),然后將這一組值放到sin函
數中去生成縱坐標的值(y),接着再到y上去添加噪聲。全程我們會使用numpy庫來為我們生成這個正弦曲線。
rng = np.random.RandomState(1) X = np.sort(5 * rng.rand(80,1), axis=0) y = np.sin(X).ravel() y[::5] += 3 * (0.5 - rng.rand(16)) #np.random.rand(數組結構),生成隨機數組的函數 #了解降維函數ravel()的用法 np.random.random((2,1)) np.random.random((2,1)).ravel() np.random.random((2,1)).ravel().shape
3. 實例化&訓練模型
regr_1 = DecisionTreeRegressor(max_depth=2) regr_2 = DecisionTreeRegressor(max_depth=5) regr_1.fit(X, y) regr_2.fit(X, y)
4. 測試集導入模型,預測結果
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis] y_1 = regr_1.predict(X_test) y_2 = regr_2.predict(X_test)
5.繪制圖像
plt.figure() plt.scatter(X, y, s=20, edgecolor="black",c="darkorange", label="data") plt.plot(X_test, y_1, color="cornflowerblue",label="max_depth=2", linewidth=2) plt.plot(X_test, y_2, color="yellowgreen", label="max_depth=5", linewidth=2) plt.xlabel("data") plt.ylabel("target") plt.title("Decision Tree Regression") plt.legend() plt.show()
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]y_1 = regr_1.predict(X_test)y_2 = regr_2.predict(X_test)