机器学习系列(四)——利用模型评估方法
何为模型评估?
几乎所有你所构建的模型都需要被评估。一般来说,衡量模型质量最相关指标莫过于其预测准确性,换句话说就是模型的预测结果与真实值之间的差距有多少。
许多人在计算预测准确率的时候,容易犯一个严重的错误,那就是对训练数据中的样本进行预测,然后与训练样本中的目标值进行比对。正确的开启模式应该是这样的......
首先要理解模型质量评估本质。假如观察了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万美元。 因此,新数据中的错误大约是平均房屋价值的四分之一。这个误差还是非常大的,距离模型投产使用的目标相差甚远。
对于机器学习来说,利用模型评估方法来评判模型的好坏,已经成为数据分析领域最常用到的方法之一,评判出的数据也较为可靠,如果需要深入的学习有关于机器学习的内容,后期也会整理给大家,环球网校小编祝大家学习顺利。
最新资讯
- 数据分析汇总报告有哪些组成?这才是数据分析师能力的体现2020-07-17
- 什么是EOI框架?这对于数据分析师竟然这么重要2020-07-17
- 如何进行业务核心数据分析?这对于数据分析师来说竟如此重要2020-07-16
- 有哪些数据分析实践的概念?不会这个的数据分析师都转行了2020-07-13
- 数据的分析思路是什么?正确的分析思路可以帮助数据分析师进步2020-07-10
- 什么是数据回归分析方法?这才是数据分析师要用到的利器2020-07-10
- 数据相关的分析方法是什么?这三种才是数据分析师的救星2020-07-10
- 高级数据分析方法是什么?这才是数据分析师进阶的必备技能2020-07-09
- 提出数据假设的方法是什么?这才是数据分析师应该明白的东西2020-07-09
- 如何找出数据优化指标?优秀的数据分析师都在这样思考2020-07-09