Kaggle翻译,第十一天:机器学习 4/7

模型验证——机器学习4/7

评价你的模型运行情况,然后你就可以测试并比较其他代替的模型了
你已经建立了一个模型了,但是他有多好呢?
这节课,你将学习模型验证的相关知识,来评价你的模型。评价模型质量是你的模型迭代更新提升质量的关键

什么是模型验证

  • 你想评价你训练的所有模型。在大多数(不是全部)应用中,有关模型质量的参数是预测的准确性。也就是说,模型预测的结果是否与实际情况相符合。
  • 许多人在衡量预测准确性时总会犯巨大的错误,他们使用训练数据来做预测,然后和训练数据中的目标值进行比较。你一会儿会看到这个方法引出的问题和解决方案,我们先想想我们是怎么做的:
  • 你首先需要将模型质量总结成一个能理解的方式。如果你将10,000预测的结果和真实值比较,你会发现里面的预测有好有坏。将10,000条结果从头到尾看下来是没有意义的。我么们需要将他们总结成单一的指标。
  • 有许多指标都可以作为衡量模型质量的标准,我们首先总一个叫 平均绝对误差 (MAE)的指标开始。我们将这个指标拆分理解,首先是 误差:
  • 预测的误差可以表示为
error=actual−predicted
  • 所以,如果真实房价为 $150,000 而你的估计是 $100,000,那么误差等于 $50,000。

  • MAE标准就是说,我们将所有值的误差取绝对值,这样误差就是正数,然后我们随误差取平均。这就可以评估我们模型的质量了。简单来说就是:

    我们的预测偏离真真实值的平均值

  • 要算MAE,我们要用原来的模型:

# 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)
  • 一旦我们有了模型,我们就可以这样计算平均绝对误差:
from sklearn.metrics import mean_absolute_error

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

“样本内”评估的问题

  • 我们刚刚计算的可以被称为“样本内”评估。我们仅使用了一个样本完成了训练和评价两个任务。他的问题出在这里:
  • 想象一下,在大型房地产市场上,门的颜色时域房价无关的。
  • 但是在你训练模型的样本中,所有绿色门的房子都很贵。模型的工作就是找到数字中的规律,所以他发现了这一规律,然后它总时=是为绿色门的房子估高价。
  • 既然这个规律从这个数据集中训练的,那么这个模型就会对这个数据集的测试总显示准确。
  • 但是如果这一规律在别的数据集中站不住脚,那这个模型在实际使用时就会不准确。
  • 既然模型的测试值要来自一个新的数据集,一个不是训练模型的数据集。最直接的方式就是在模型训练是排除一些数据,再用这些没见过的数据做准确性测试。这些测试的数据称 验证集

编码

  • scikit-learn库中由一个函数叫train_test_split,专门用来将数据分成两份。我们将使用其中一份来训练模型,另一部分将用来计算MAE
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
# random_state参数保证我们每次循行这段代码是得到的分割是相同的
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))

哇哦!

  • 你的样本内平均绝对误差只有不到500,而样本外误差竟然超过了250,000
  • 这样的差异对于一个模型来说就差不多,这个模型对于几乎所有的实际应用都是不稳定的。在这个例子里,验证集中的平均房价是11万。所以误差是平均房价的1/4
  • 提升模型质量的方法有很多,例如实施更好的特征集,或使用不同的模型类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值