Я использую Поддержка векторной регрессии в качестве оценки в GridSearchCV. Но я хочу изменить функцию ошибки: вместо того, чтобы использовать значение по умолчанию (R-squared: коэффициент определения), я хотел бы определить свою собственную функцию пользовательских ошибок.
Я попытался сделать один с make_scorer
, но это не сработало.
Я прочитал документацию и обнаружил, что можно создать пользовательские оценки, но мне не нужно переделывать всю оценку - только error/scoring.
Я думаю, что могу сделать это, определив вызываемый как бомбардир, как он говорит в docs.
Но я не знаю, как использовать оценку: в моем случае SVR. Должен ли я переключиться на классификатор (например, SVC)? И как я буду использовать его?
Моя пользовательская функция ошибки выглядит следующим образом:
def my_custom_loss_func(X_train_scaled, Y_train_scaled):
error, M = 0, 0
for i in range(0, len(Y_train_scaled)):
z = (Y_train_scaled[i] - M)
if X_train_scaled[i] > M and Y_train_scaled[i] > M and (X_train_scaled[i] - Y_train_scaled[i]) > 0:
error_i = (abs(Y_train_scaled[i] - X_train_scaled[i]))**(2*np.exp(z))
if X_train_scaled[i] > M and Y_train_scaled[i] > M and (X_train_scaled[i] - Y_train_scaled[i]) < 0:
error_i = -(abs((Y_train_scaled[i] - X_train_scaled[i]))**(2*np.exp(z)))
if X_train_scaled[i] > M and Y_train_scaled[i] < M:
error_i = -(abs(Y_train_scaled[i] - X_train_scaled[i]))**(2*np.exp(-z))
error += error_i
return error
Переменная M
не равна нулю/нулю. Я просто установил его для нуля для простоты.
Может ли кто-нибудь показать пример приложения этой пользовательской функции подсчета очков? Спасибо за вашу помощь!