机器学习笔记四——模型评估与选择2——性能度量(回归问题)


为了说明各性能度量指标,我们以著名的回归任务中波士顿房价数据集为例,模型选择决策树算法,通过 train_test_split() 划分数据集,最后评估各项性能指标。

from sklearn.datasets import load_boston
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split


# 引入数据集
dataset = load_boston()
data = dataset.data
target = dataset.target
features = dataset.feature_names

# 划分数据集以及模型训练
data_train, data_test, target_train, target_test = train_test_split(data, target, test_size=0.33, random_state=7)
model = DecisionTreeRegressor()
model.fit(data_train, target_train)

1、 均方误差

均方误差(mean squared error)是回归问题中最常用的性能度量。

公式:

在这里插入图片描述
均方误差计算过程中可以不用考虑 f(x) - y 的正负性,因为无论是正值还是负值,平方后都为正值。因此,均方误差可以简化计算过程。

但均方误差也存在一个明显的缺陷:假设,现在有三个样本,它们的预测值与真实值的差分别为 3、4、5,通过均方误差的计算公式,我们可以分别计算出这三个样本的误差为 9、16 和 25;第三个样本的误差等于前两个样本的误差和,也就是说样本的预测值离真实值越远,误差也越大,且增长幅度越来越大,这相当于给误差大的样本更大的权重,你可以理解为在原有的误差上再乘以一个权重,而这个权重就是自身,例如差为 5,误差为 5 x 5;差为 4,误差为 4 x 4。

模型为了降低误差,势必会想办法优先让偏差最大的样本尽可能靠近真实值。换言之,偏差越大的样本对模型的影响也越大,如果这个样本是噪声,那么这对模型的精度产生重大负面影响。简单地说,均方误差对噪声不鲁棒。

【代码实现】

from sklearn.metrics import mean_squared_error
print(mean_squared_error(target_test, model.predict(data_test)))
# 输出:23.77700598802395

关于关于 mean_squared_error 更多内容请参考 官方文档

2、平均绝对误差

公式:
在这里插入图片描述
相比均方误差,平均绝对误差对噪声鲁棒,因为无论样本的预测值与真实值的偏差是大还是小,其权重都是相同的。但平均绝对误差也存在一个缺陷,即 |f(x) - y| 函数整体不连续,下图是一个 |x - 1| = y 的绝对值函数。

在这里插入图片描述
可以看到,绝对值函数关于 1 对称,在 [ 1 , + ∞ ) [1, +\infty) [1,+)以及 ( − ∞ , 1 ] (-\infty, 1] (,1] 区间内连续,但在整个区间上不连续,这会产生什么影响呢?

  • 相比均方误差不需要考虑正负性,平均绝对误差需要考虑计算结果的正负性,并将计算结果做绝对值处理;
  • 因为平均绝对误差在整个区间上不连续,因此在使用梯度下降算法优化时,如果恰好落在对称轴所在的位置处(上图该点为 (1, 0)),该点的导数为 0,

【代码实现】:

from sklearn.metrics import mean_absolute_error


mean_absolute_error(target_test, model.predict(data_test))
# 输出:3.3149700598802405

关于 mean_absolute_error 的更多用法请参考官方文档

3、均方对数误差

公式:
在这里插入图片描述
均方对数误差对噪声鲁棒,且在整体区间上连续。

【代码实现】

from sklearn.metrics import mean_squared_log_error
print(mean_squared_log_error(target_test, model.predict(data_test)))
# 输出0.055311262396885434

关于 mean_squared_log_error 的更多用法请参考官方文档

4、决定系数

决定系数,反映因变量的全部变异能通过回归关系被自变量解释的比例。拟合优度越大,自变量对因变量的解释程度越高,自变量引起的变动占总变动的百分比越高,观察点在回归直线附近越密集。如 R2(可决系数) 为 0.8,则表示回归关系可以解释因变量 80% 的变异。换句话说,如果我们能控制自变量不变,则因变量的变异程度会减少 80%。

【决定系数的特点】:

  • 可决系数是非负的统计量。
  • 可决系数的取值范围:0 <= R2 <= 1。
  • 可决系数是样本观测值的函数,是因随机抽样而变动的随机变量。为此,对可决系数的统计的可靠性也应进行检验。

【代码实现】

from sklearn.metrics import r2_score
print(r2_score(target_test, model.predict(data_test)))
# 输出:0.6742057739439729

总结
除了从 sklearn.metrics 包中调用相应的方法外,还可以在 cross_val_score() 中通过指定 scoring 参数来实现,例如:

from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score


kfold = KFold(n_splits=10, random_state=7)
print(cross_val_score(model, data_test, target_test, cv=kfold, scoring='r2'))
# 输出:[0.69938565 0.13038301 0.63933825 0.58607805 0.19645563 0.64605678
 0.46224615 0.42435634 0.63046561 0.88830135]

在这里插入图片描述
参考资料:
1、《机器学习》,周志华 著。即西瓜书。
2、南瓜书,是西瓜书的辅助,对西瓜书的一些公式的推导进行进行了一些详解。
3、sklearn 度量官方文档
4、https://blog.csdn.net/weixin_43378396/article/details/90707234

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值