预测房价

是时候把我们的知识应用到现实世界的问题. 让我们应用所有这些原则来估计房价. 这是用来理解回归的最流行的例子之一, 它是一个很好的切入点. 这是直观和相关的, 因此使我们在机器学习中执行更复杂的事情之前更容易理解概念. 我们将使用一个带有AdaBoost的决策树回归来解决这个问题.

准备

决策树是一个树, 其中每个节点做出一个有助于最终输出的简单决策. 叶节点表示输出值, 并且分支表示基于输入特征做出的中间决策. AdaBoost代表自适应boost, 这是一种用于提高另一个系统的结果精度的技术. 这将来自不同版本的算法(称为弱学习器)的输出结合起来, 使用加权求和来获得最终输出. 在AdaBoost算法的每个阶段收集的信息被反馈回系统, 使得后面阶段的学习者专注于难以分类的训练样本. 这是它提高系统的精度的方式.

使用AdaBoost, 我们在数据集上拟合回归. 我们计算误差, 然后根据这个误差估计, 再次在同一个数据集上拟合回归. 我们可以认为这是对回归量的微调, 直到达到所需的精度. 您将获得一个数据集, 其中包含影响房子价格的各种参数. 我们的目标是估计这些参数和房价之间的关系, 以便我们可以使用它来估计给定未知输入参数的价格.

怎么做...?

  • 创建文件housing.py, 并加入如下代码:
import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn import datasets
from sklearn.metrics import mean_squsted_error, explained_veriance_score
from sklearn.utils import shuffle
import matplotlib.pyplot as plt
housing_data = datasets.load_boston()

每个数据点有13个影响房子价格的输入参数. 您可以使用housing_data.data和相应的价格使用housing_data.target访问输入数据.

  • 让我们将它分为输入和输出. 为了使这独立于数据的排序, 让我们随机排列.:
X, y = shuffle(housing_data.data, housing_data.target, random_state=7)
  • random_state参数控制我们如何随机播放数据, 以便我们可以有可重复的结果. 让我们将数据分成训练和测试. 我们将分配80%用于培训, 20%用于测试.
num_training = int(0.8 * len(X))
X_train, y_train = X[:num_training], y[:nu_training]
X_test, y_test = X[num_training:], y[num_training:]
  • 我们现在准备好适合决策树回归模型. 让我们选择一个最大深度为4的树, 这意味着我们不让树变得任意深:
dt_regressor = DecisionTreeRegressor(max_depth=4)
dt_regressor.fit(X_train, y_train)
  • 让我们也用AdaBoost拟合决策树回归模型
ab_regressor = AdaBoostRegressor(
    DecisionTreeRegressor(max_depth=4),
    n_estimators=400,
    random_state=7
)
ab_regressor.fit(X_train, y_train)

这将帮助我们比较结果, 看看AdaBoost如何真正提高决策树回归的性能.

  • 让我们评估决策树回归的性能
y_pred_dt = dt_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred_dt)
evs = explained_variance_score(y_test, y_pred_dt)
print ("#### Decision Tree performance ####")
print ("Mean squared error =", round(mse, 2))
print ("Explained variance score =", round(evs, 2))
  • 现在,让我们评估AdaBoost的性能
y_pred_ab = ab_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred_ab)
evs = explained_variance_score(y_test, y_pred_ab)
print ("#### AdaBoost performance ####")
print ("Mean squared error =", round(mse, 2))
print ("Explained variance score =", round(evs, 2))

以下是输出结果:

#### Decision Tree performance ####
Mean squared error = 14.79
Explained variance score = 0.82

#### AdaBoost performance ####
Mean squared error = 7.54
Explained variance score = 0.91

当我们使用AdaBoost时, 错误较低, 方差分数接近于1, 如前面的输出所示.

results matching ""

    No results matching ""