Scikit-learn перекрестная проверка для регрессии

Как использовать cross_val_score для регрессии? Оценка по умолчанию, по-видимому, является точностью, что не очень важно для регрессии. Предположительно, я хотел бы использовать среднеквадратическую ошибку, можно ли указать, что в cross_val_score?

Пробовал следующие два, но не работает:

scores = cross_validation.cross_val_score(svr, diabetes.data, diabetes.target, cv=5, scoring='mean_squared_error') 

и

scores = cross_validation.cross_val_score(svr, diabetes.data, diabetes.target, cv=5, scoring=metrics.mean_squared_error)

Первый генерирует список отрицательных чисел, а средняя квадратичная ошибка всегда должна быть неотрицательной. Второй жалуется, что:

mean_squared_error() takes exactly 2 arguments (3 given)

Ответ 1

У меня нет репутации для комментариев, но я хочу предоставить эту ссылку для вас и/или прохожих, где обсуждается отрицательный вывод MSE в изучении scikit - https://github.com/scikit-learn/scikit-learn/issues/2439

Кроме того, чтобы сделать это реальным ответом, ваш первый вариант верен в том, что MSE не только показатель, который вы хотите использовать для сравнения моделей, но R ^ 2 не может быть рассчитан в зависимости (я думаю) от типа креста -val вы используете.

Если вы выберете MSE в качестве бомбардира, он выведет список ошибок, которые вы затем можете использовать для этого:

# Doing linear regression with leave one out cross val

from sklearn import cross_validation, linear_model
import numpy as np

# Including this to remind you that it is necessary to use numpy arrays rather 
# than lists otherwise you will get an error
X_digits = np.array(x)
Y_digits = np.array(y)

loo = cross_validation.LeaveOneOut(len(Y_digits))

regr = linear_model.LinearRegression()

scores = cross_validation.cross_val_score(regr, X_digits, Y_digits, scoring='mean_squared_error', cv=loo,)

# This will print the mean of the list of errors that were output and 
# provide your metric for evaluation
print scores.mean()

Ответ 2

Первый правильный. Он выводит отрицательный результат MSE, поскольку он всегда пытается максимизировать счет. Пожалуйста, помогите нам, предложив улучшить документацию.