导航
  • 报考
  • 备考
  • 政策

报考

备考

复习资料

政策

行业动态

机器学习系列(四)——利用模型评估方法

环球网校·2019-09-27 11:09:26浏览60 收藏12

请输入下面的图形验证码

提交验证

预约成功

我知道了
摘要 上一节中,已经构建了一个决策树模型,并用它实现了房价的预测。但如果问你模型结果表现的怎么样,你该怎么评判呢?在这一节中,将学习如何利用模型评估方法来评判模型质量的好坏。模型质量的测量方法是迭代优化模型的关键。

何为模型评估?

几乎所有你所构建的模型都需要被评估。一般来说,衡量模型质量最相关指标莫过于其预测准确性,换句话说就是模型的预测结果与真实值之间的差距有多少。

许多人在计算预测准确率的时候,容易犯一个严重的错误,那就是对训练数据中的样本进行预测,然后与训练样本中的目标值进行比对。正确的开启模式应该是这样的......

首先要理解模型质量评估本质。假如观察了10000个房子价格的预测结果,你会发现有的预测结果与真实值相差无几,而有的预测结果与真实值相差甚远。也就是说,这些结果中既有预测的比较准的,也有预测的非常不准的,模型的表现参差不齐。当然就这么随便看一眼是不足以说明问题的,明智的做法是用一个可以度量的指标来衡量这个问题。

事实上有很多种维度可以度量模型质量的好坏,这次先采用一个叫平均绝对误差(Mean Absolute Error)的方法。对于每一次预测,其对应的误差为:

error = actual - predicted

例如,一个房子的真实价格为$150,000,而模型对其预测的价格为$100,000,那么此次预测的误差为$50,000。

在平均绝对误差计算中,首先将对每次预测的误差取绝对值,得到的一个非负数,然后再计算所有绝对误差的算数平均值。

sklearn库中也封装了计算平均绝对误差的方法,直接引入mean_absolute_error方法进行计算即可,代码如下所示:

import pandas as pd
#
加载数据
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path)
# 剔除缺失值,axis=0,剔除的是数据记录
filtered_melbourne_data = melbourne_data.dropna(axis=0)
# 选择特征
y = filtered_melbourne_data.Pricemelbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 'YearBuilt', 'Lattitude', 'Longtitude']
X = filtered_melbourne_data[melbourne_features]from sklearn.tree import DecisionTreeRegressor
# 构建模型melbourne_model = DecisionTreeRegressor()
# 模型拟合melbourne_model.fit(X, y)

构建和拟合了模型之后,接下来介绍如何计算MAE。

接下来解密本节开篇提到的—用训练样本来评估模型质量的问题所在。这种做法的本质是在拟合模型和评估模型时,使用的是同一套样本数据。

想象一下在大型房地产市场中,显然房门的颜色与房价是无关的。但是在你用来构建模型的样本中,所有房门是绿色的房子价格都比较高。而机器学习模型的任务就是从学习样本中发现可能存在的模式,也就是模式识别(pattern recognition),它发现了这个模式后,就会对拥有绿色房门的房子预测一个相对高的价格。

由于这个模式是机器从训练数据中学来的,所以用它对训练样本进行预测,与训练样本的目标值会比较接近,即模型表现优秀。

但事实上这个模式在新的数据中并不存在,所以当对新的房子价格进行预测时,结果就相差甚远。

由于模型的实用价值来自于其对新的数据的预测,所以,在衡量模型表现的好坏时,必须要用那些构建模型时没有使用过的数据来衡量。最直接的做法是,在构建模型的过程中,从数据集中拆分出一部分样本数据出来,这部分样本不会被用来构建模型,而只会被用来校验模型的准确性。这部分数据就是我们常说的校验数据(validation data)。

编码实现

scikit-learn库中也封装了一个train_test_split方法,可以将数据分为两部分。其中一部分样本用来构建和拟合模型,另一部分样本用来计算mean_absolute_error。代码如下所示:

from sklearn.model_selection import train_test_split
# 拆分训练样本与校验样本
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 0)
# 定义模型
melbourne_model = DecisionTreeRegressor()
# 拟合模型
melbourne_model.fit(train_X, train_y)
# 预测房价,计算MAE
val_predictions = melbourne_model.predict(val_X)print(mean_absolute_error(val_y, val_predictions))

哇喔,对比了一下发现样本内的平均绝对误差只有500美元,而校验样本中的平均绝对误差MAE却高达25000美元。

这就是差距!同样一个模型,训练数据几乎预测准确,而对于新的实用场景却远未达标。作为参考,校验数据中的平均房屋价值为110万美元。 因此,新数据中的错误大约是平均房屋价值的四分之一。这个误差还是非常大的,距离模型投产使用的目标相差甚远。

对于机器学习来说,利用模型评估方法来评判模型的好坏,已经成为数据分析领域最常用到的方法之一,评判出的数据也较为可靠,如果需要深入的学习有关于机器学习的内容,后期也会整理给大家,环球网校小编祝大家学习顺利。

展开剩余
资料下载
历年真题
精选课程
老师直播

注册电脑版

版权所有©环球网校All Rights Reserved