《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难问题,即在有限时间内无法找到最优解的问题,因此所使用类似贪婪算法的解法只能找到一些次优解,这也是为什么经常借助集成模型,在多个次优解中寻觅更高的模型性能。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值