Оценка значений GridSearchCV - PullRequest
       71

Оценка значений GridSearchCV

0 голосов
/ 16 января 2020

Я новичок в машинном обучении, и в книгах и документации, которые я прочитал, всегда есть значение от 0 до 1, что соответствует точности от 0% до 100%.

На моей собственной машине Изучая код в scikit-learn, я получаю значения баллов от -750.880810 до 5154.771036, что меня смущает.

>>> pipe = Pipeline([("scaler", MinMaxScaler()), ("svr", SVR())])
>>> param_grid = {'svr__C':[0.1, 1, 5], 
              'svr__epsilon':[0.001, 0.01]}
>>> grid = GridSearchCV(estimator=pipe, 
                    param_grid=param_grid,
                    cv=GroupKFold(n_splits=24)
                   )
>>> grid.fit(X, y, groups)
GridSearchCV(cv=GroupKFold(n_splits=24), error_score=nan,
         estimator=Pipeline(memory=None,
                            steps=[('scaler',
                                    MinMaxScaler(copy=True,
                                                 feature_range=(0, 1))),
                                   ('svr',
                                    SVR(C=1.0, cache_size=200, coef0=0.0,
                                        degree=3, epsilon=0.1,
                                        gamma='scale', kernel='rbf',
                                        max_iter=-1, shrinking=True,
                                        tol=0.001, verbose=False))],
                            verbose=False),
         iid='deprecated', n_jobs=None,
         param_grid={'svr__C': [0.1, 1, 5], 'svr__epsilon': [0.001, 0.01]},
         pre_dispatch='2*n_jobs', refit=True, return_train_score=False,
         scoring=None, verbose=0)

>>> grid.best_score_
-750.880810

Может кто-нибудь объяснить мне это?

Редактировать:

Мои входные данные являются измерениями двигателя.

У меня 12 различных отказов двигателя, и каждый сбой измеряется дважды => 12x2 = 24 разных группы (я также попробую 12 групп). Каждая группа состоит из:

  • X данных: 13 различных характеристик (температура, давление, напряжение c и др. c.) С 1200 выборками на группу
  • y данные: 1 функция (давление) с 1200 образцами на группу

1 Ответ

1 голос
/ 16 января 2020

Точность - это обычный метод оценки для задачи классификации. Для задачи регрессии это значение R квадрат.

Для scoring параметра в GridSearchCV,

Если Нет, используется метод оценки оценщика.

Для SVR - оценка по умолчанию значение исходит из RegressorMixin, то есть R^2.

Документация:

Возвращает коэффициент определения R ^ 2 прогноза.

Коэффициент R ^ 2 определяется как (1 - u / v), где u - остаточная сумма квадратов ((y_true - y_pred) ** 2) .sum (), а v - общая сумма квадратов ((y_true - y_true. mean ()) ** 2) .sum ().

Наилучшая возможная оценка - 1,0, и она может быть отрицательной (поскольку модель может быть произвольно хуже).

Постоянная модель, которая всегда предсказывает ожидаемое значение y, независимо от входных функций, получит оценку R ^ 2 0,0.

Следовательно, она звучит зашито, когда вы очень большое / маленькое значение как R ^ 2.

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

from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import GridSearchCV, GroupKFold
from sklearn.pipeline import Pipeline
import numpy as np

np.random.seed(0)
X, y = datasets.make_regression()
groups = np.random.randint(0, 10, len(X))

pipe = Pipeline([("scaler", MinMaxScaler()), ("svr", svm.SVR())])

parameters = {'svr__C': [ 0.1, 1, 5, 100], 'svr__epsilon': [0.001, 0.1]}
svr = svm.SVR()
clf = GridSearchCV(pipe, parameters, cv=GroupKFold(n_splits=2))
clf.fit(X, y, groups)

print(clf.best_score_)
# 0.1239707770092825

Я бы порекомендовал попробовать другой cv и исследовать проблему.

...