1

我有一个线性回归模型,我的成本函数是平方和误差函数。我已将我的完整数据集拆分为三个数据集:训练、验证和测试。我不确定如何计算训练误差和验证误差(以及两者之间的差异)。

训练误差是使用训练数据集计算的残差平方和吗?

我要问的一个例子:所以如果我在 Python 中这样做,假设我在训练数据集中有 90 个数据点,那么这是训练错误的正确代码吗?

y_predicted = f(X_train, theta) #predicted y-value at point x, where y_train is the actual y-value at x
training_error = 0
for i in range(90):
  out = y_predicted[i] - y_train[i] 
  out = out*out 
  training_error+=out

training_error = training_error/2
print('The training error for this regression model is:', training_error)
4

1 回答 1

1

这篇文章的评论中提到了这一点,但您需要除以样本总数才能获得一个可以在验证集和测试集之间进行比较的数字。

只需更改代码即可:

y_predicted = f(X_train, theta) #predicted y-value at point x, where y_train is the actual y-value at x
training_error = 0
for i in range(90):
  out = y_predicted[i] - y_train[i] 
  out = out*out 
  training_error+=out

#change 2 to 90 
training_error = training_error/90
print('The training error for this regression model is:', training_error)

这样做的目的是让您可以使用相同的指标比较两个不同的数据子集。您在那里除以 2 是可以的,只要您还除以样本数即可。

在 Python 中执行此操作的另一种方法是使用 sci-kit 学习库,它已经具有函数.

见下文。

from sklearn.metrics import mean_squared_error
training_error = mean_squared_error(y_train,y_predicted)

通常在进行这样的计算时,使用矩阵乘法而不是 for 循环会更好更快。在上下文中,这个问题的 90 条记录非常小,但是当您开始使用更大的样本量时,您可以尝试使用 numpy.

import numpy as np

training_error = np.mean(np.square(np.array(y_predicted)-np.array(y_train)))

所有 3 种方式都应该得到类似的结果。

于 2020-04-25T13:10:20.970 回答