4.Model Validation

你已经建立了一个模型。 但它有多好?

在本课程中,您将学习如何使用模型验证来衡量模型的质量。 测量模型质量是迭代改进模型的关键。

What is Model Validation

你几乎要评估你构建的每个模型。在大多数(尽管不是全部)应用中,模型质量的相关测量是预测准确性。换句话说,模型的预测是否接近实际发生的情况。

在测量预测准确性时,许多人犯了一个大错误。他们使用他们的训练数据进行预测,并将这些预测与训练数据中的目标值进行比较。你会看到这种方法的问题以及如何在一瞬间解决它,但让我们考虑一下我们如何首先做到这一点。

您首先需要将模型质量概括为可理解的方式。如果您比较10,000个房屋的预测价值和实际价值,您可能会发现好的和坏的预测混合在一起。查看10,000个预测值和实际值的列表将毫无意义。我们需要将其总结为一个指标

有许多用于总结模型质量的指标,但我们将从一个称为平均绝对误差(也称为MAE)开始。让我们从最后一个单词开始分解这个指标,error。

每个房子的预测错误是:

error=actual−predicted

所以,如果房子花费150,000美元并且你预测它将花费100,000美元,那么误差就是50,000美元。

使用MAE指标,我们获取每个误差的绝对值。 这会将每个误差转换为正数。 然后我们取这些绝对误差的平均值。 这是我们对模型质量的衡量。 用简单的英语,可以说是

     平均而言,我们的预测大约是X.

要计算MAE,我们首先需要一个模型。 下面是一个模型。

【1】

# Data Loading Code Hidden Here
import pandas as pd

# Load data
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
# Filter rows with missing price values
filtered_melbourne_data = melbourne_data.dropna(axis=0)
# Choose target and features
y = filtered_melbourne_data.Price
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 
                        'YearBuilt', 'Lattitude', 'Longtitude']
X = filtered_melbourne_data[melbourne_features]

from sklearn.tree import DecisionTreeRegressor
# Define model
melbourne_model = DecisionTreeRegressor()
# Fit model
melbourne_model.fit(X, y)
DecisionTreeRegressor(criterion='mse', max_depth=None, max_features=None,
           max_leaf_nodes=None, min_impurity_decrease=0.0,
           min_impurity_split=None, min_samples_leaf=1,
           min_samples_split=2, min_weight_fraction_leaf=0.0,
           presort=False, random_state=None, splitter='best')

一旦我们有了模型,这就是我们计算平均绝对误差的方法:

【2】

from sklearn.metrics import mean_absolute_error

predicted_home_prices = melbourne_model.predict(X)
mean_absolute_error(y, predicted_home_prices)

434.71594577146544

The Problem with "In-Sample" Scores

我们刚刚计算的度量可以称为“样本内”得分。我们使用单个房屋“样本”来构建模型并对其进行评估。这就是为什么这很糟糕。

想象一下,在大型房地产市场,门颜色与房价无关。

但是,在用于构建模型的数据样本中,所有带绿色门的房屋都非常昂贵。该模型的工作是找到预测房价的模式,因此它将看到这种模式,它将始终预测绿色房屋的价格高。

由于该模式源自训练数据,因此模型在训练数据中看起来是准确的。

但是,如果在模型看到新数据时这种模式不成立,那么在实际使用时该模型将非常不准确。

由于模型的实用价值来自对新数据的预测,因此我们测量未用于构建模型的数据的性能。最直接的方法是从模型构建过程中排除一些数据,然后使用它们来测试模型对以前没有见过的数据的准确性。该数据称为验证数据

Coding it

scikit-learn库有一个函数train_test_split,可以将数据分成两部分。 我们将使用一些数据作为训练数据来拟合模型,我们将使用其他数据作为验证数据来计算mean_absolute_error。

这是代码:

[3]

from sklearn.model_selection import train_test_split

# split data into training and validation data, for both features and target
# The split is based on a random number generator. Supplying a numeric value to
# the random_state argument guarantees we get the same split every time we
# run this script.
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 0)
# Define model
melbourne_model = DecisionTreeRegressor()
# Fit model
melbourne_model.fit(train_X, train_y)

# get predicted prices on validation data
val_predictions = melbourne_model.predict(val_X)
print(mean_absolute_error(val_y, val_predictions))
255481.2698515171

Wow!

您的样本数据的平均绝对误差约为500美元。 但样本之外超过25万美元。

这是几乎完全正确的模型与大多数实际用途无法使用的模型之间的差异。 作为参考,验证数据中的平均房屋价格为110万美元。 因此,新数据中的误差大约是平均房屋价值的四分之一。

有许多方法可以改进此模型,例如尝试查找更好的特征或不同的模型类型。

Your Turn

在我们改善模型之前,尝试进行模型验证

扫描二维码关注公众号,回复: 3260240 查看本文章

猜你喜欢

转载自blog.csdn.net/cg129054036/article/details/82284486
今日推荐