《Python機器學習及實踐:從零開始通往Kaggle競賽之路》第2章 基礎篇 學習筆記(十)2.1.2.4迴歸樹總結

目錄

2.1.2.4迴歸樹

1、模型介紹

2、數據描述

(1)美國波士頓地區房價數據描述

(2)美國波士頓地區房價數據分割

(3)美國波士頓地區房價數據標準化處理

3、編程實踐

4、性能測評

5、特點分析


2.1.2.4迴歸樹

1、模型介紹

迴歸樹在選擇不同特徵作爲分裂節點的策略上,與決策樹的思路類似。不同之處在於,迴歸樹葉節點的數據類型不是離散型,而是連續型。決策樹每個葉節點依照訓練數據表現的概率傾向決定了其最終的預測類型;而回歸樹的葉節點卻是一個個具體的值,從預測值連續這個意義上嚴格地講,迴歸樹不能稱爲“迴歸算法”。因爲迴歸樹的葉節點返回的是“一團”訓練數據的均值,而不是具體的,連續的預測值。

2、數據描述

(1)美國波士頓地區房價數據描述

# 代碼34:美國波士頓地區房價數據描述
# 從sklearn.datasets導入波士頓房價數據讀取器。
from sklearn.datasets import load_boston

# 從讀取房價數據存儲在變量boston中。
boston = load_boston()
# 輸出數據描述。
print(boston.DESCR)

本地輸出:

.. _boston_dataset:

Boston house prices dataset
---------------------------

**Data Set Characteristics:**  

    :Number of Instances: 506 

    :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.

    :Attribute Information (in order):
        - CRIM     per capita crime rate by town
        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.
        - INDUS    proportion of non-retail business acres per town
        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
        - NOX      nitric oxides concentration (parts per 10 million)
        - RM       average number of rooms per dwelling
        - AGE      proportion of owner-occupied units built prior to 1940
        - DIS      weighted distances to five Boston employment centres
        - RAD      index of accessibility to radial highways
        - TAX      full-value property-tax rate per $10,000
        - PTRATIO  pupil-teacher ratio by town
        - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
        - LSTAT    % lower status of the population
        - MEDV     Median value of owner-occupied homes in $1000's

    :Missing Attribute Values: None

    :Creator: Harrison, D. and Rubinfeld, D.L.

This is a copy of UCI ML housing dataset.
https://archive.ics.uci.edu/ml/machine-learning-databases/housing/


This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.

The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic
prices and the demand for clean air', J. Environ. Economics & Management,
vol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics
...', Wiley, 1980.   N.B. Various transformations are used in the table on
pages 244-261 of the latter.

The Boston house-price data has been used in many machine learning papers that address regression
problems.   
     
.. topic:: References

   - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.
   - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.

結論:總體而言,該數據共有506條美國波士頓地區房價的數據,每條數據包括對指定房屋的13項數值型特徵描述和目標房價。另外,數據中沒有缺失的屬性/特徵值,更加方便了後續的分析。

(2)美國波士頓地區房價數據分割

# 代碼35:美國波士頓地區房價數據分割
# 從sklearn.model_selection導入數據分割器。
from sklearn.model_selection import train_test_split
# 導入numpy並重命名爲np。
import numpy as np

X = boston.data
y = boston.target

# 隨機採樣25%的數據構建測試樣本,其餘作爲訓練樣本。
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.25)

# 分析迴歸目標值的差異。
print("The max target value is", np.max(boston.target))
print("The min target value is", np.min(boston.target))
print("The average target value is", np.mean(boston.target))

備註:原來的導入模型from sklearn.cross_validation import train_test_split的時候,提示錯誤:

from sklearn.cross_validation import train_test_split
ModuleNotFoundError: No module named 'sklearn.cross_validation'

需要替換cross_validation:

from sklearn.model_selection import train_test_split

本地輸出:

The max target value is 50.0
The min target value is 5.0
The average target value is 22.532806324110677

結論:預測目標房價之間的差異較大,因此需要對特徵以及目標值進行標準化處理。

備註:讀者無需質疑將真實房價做標準化處理的做法。事實上,儘管在標準化之後,數據有了很大的變化。但是依然可以使用標準化器中的inverse_transform函數還原真實的結果;並且,對於預測的迴歸值也可以採用相同的做法進行還原。

(3)美國波士頓地區房價數據標準化處理

# 代碼36:訓練與測試數據標準化處理
# 從sklearn.preprocessing導入數據標準化模塊。
from sklearn.preprocessing import StandardScaler

# 分別初始化對特徵和目標值的標準化器。
ss_X = StandardScaler()
ss_y = StandardScaler()

# 分別對訓練和測試數據的特徵以及目標值進行標準化處理。
X_train = ss_X.fit_transform(X_train)
X_test = ss_X.transform(X_test)
y_train = ss_y.fit_transform(y_train.reshape(-1, 1))
y_test = ss_y.transform(y_test.reshape(-1, 1))

備註:原來的會報錯,是因爲工具包版本更新造成的;故採用以下方法。

根據錯誤的提示相應的找出原來出錯的兩行代碼:

y_train = ss_y.fit_transform(y_train)
y_test = ss_y.transform(y_test)

問題出現在上面的兩行代碼中,例如數據格式爲[1, 2, 3, 4]就會出錯,如果把這行數據轉換成[[1], [2], [3], [4]]就不會出錯了。所以要對上面導致出錯的兩行代碼做出修改:

y_train = ss_y.fit_transform(y_train.reshape(-1, 1))
y_test = ss_y.transform(y_test.reshape(-1,1))

3、編程實踐

使用Scikit-learn中的DecisionTreeRegressor對“美國波士頓房價”數據進行迴歸預測。

# 代碼43:使用迴歸樹對美國波士頓房價訓練數據進行學習,並對測試數據進行預測
# 從sklearn.tree中導入DecisionTreeRegressor。
from sklearn.tree import DecisionTreeRegressor

# 使用默認配置初始化DecisionTreeRegressor。
dtr = DecisionTreeRegressor()
# 用波士頓房價的訓練數據構建迴歸樹。
dtr.fit(X_train, y_train)
# 使用默認配置的單一回歸樹對測試數據進行預測,並將預測值存儲在變量dtr_y_predict中。
dtr_y_predict = dtr.predict(X_test)

4、性能測評

對默認配置的迴歸樹在測試集上的性能做出評估。

# 代碼44:對單一回歸樹模型在美國波士頓房價測試數據上的預測性能進行評估
# 使用R-squared、MSE以及MAE指標對默認配置的迴歸樹在測試集上進行性能評估。
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error

print('R-squared value of DecisionTreeRegressor:', dtr.score(X_test, y_test))
print('The mean squared error of DecisionTreeRegressor:', mean_squared_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(dtr_y_predict)))
print('The mean absolute error of DecisionTreeRegressor:', mean_absolute_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(dtr_y_predict)))

備註:原來沒有導入工具包,有誤;故導入工具包。

from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error

本地輸出:

R-squared value of DecisionTreeRegressor: 0.6911160694746086
The mean squared error of DecisionTreeRegressor: 23.951259842519693
The mean absolute error of DecisionTreeRegressor: 3.2433070866141733

結論:該代碼的輸出結果優於“2.1.2.1線性迴歸器總結”中的LinearRegression與SGDRegressor的性能表現。因此,可以初步判斷,“美國波士頓房價預測”問題的特徵與目標值之間存在一定的非線性關係。

5、特點分析

在系統地介紹了決策(分類)樹與迴歸樹之後,可以總結這類樹模型的優點:

①樹模型可以解決非線性特徵的問題。

②樹模型不要求對特徵標準化和統一量化,即數值型和類別型特徵都可以直接被應用在樹模型的構建和預測過程中。

③因爲上述原因,樹模型也可以直觀地輸出決策過程,使得預測結果具有可解釋性。

同時,樹模型也有一些顯著的缺陷:

①正是因爲樹模型可以解決複雜的非線性擬合問題,所以更加容易因爲模型搭建過於複雜而喪失對新數據預測的精度(泛化力)。

②樹模型從上之下的預測流程會因爲數據細微的更改而發生較大的結構變化,因此預測穩定性較差。

③依託訓練數據構建最佳的樹模型是NP難問題,即在有限時間內無法找到最優解的問題,因此所使用類似貪婪算法的解法只能找到一些次優解,這也是爲什麼經常藉助集成模型,在多個次優解中尋覓更高的模型性能。

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