Как рассчитать ошибку обучения и ошибку проверки линейной регрессионной модели? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть модель линейной регрессии, и моя функция стоимости является функцией суммы квадратов ошибок. Я разделил свой полный набор данных на три набора данных: обучение, проверка и тестирование. Я не уверен, как рассчитать ошибку обучения и ошибку проверки (и разницу между ними). ​​

Является ли ошибка обучения ошибкой остаточной суммы квадратов, рассчитанной с использованием набора данных для обучения?

Пример того, что я спрашиваю: так, если я делал это в 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)

1 Ответ

0 голосов
/ 25 апреля 2020

Это упоминается в комментарии к сообщению, но вам нужно разделить на общее количество выборок, чтобы получить число, которое вы можете сравнить между проверочными и тестовыми наборами.

Просто измените код:

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)

Цель этого состоит в том, чтобы вы могли сравнить два разных подмножества данных, используя один и тот же показатель c. Там у вас было деление на 2, что было нормально, так же как и деление на количество сэмплов.

Еще один способ сделать это в Python - использовать научный набор библиотека, она уже имеет функцию .

, см. ниже.

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

Также обычно при таких расчетах лучше и быстрее использовать матричное умножение вместо А для л oop. В контексте этого вопроса 90 записей довольно малы, но когда вы начнете работать с большими объемами выборки, вы можете попробовать что-то вроде этого, используя numpy.

import numpy as np

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

Все 3 способа должны дать вам аналогичные результаты.

...