0

Scikit имеет CalibratedClassifierCV, что позволяет нам откалибровать наши модели на определенной паре X, y. В нем также четко указано, что data for fitting the classifier and for calibrating it must be disjoint.Scikit правильный способ откалибровки классификаторов с помощью CalibratedClassifierCV

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

model = CalibratedClassifierCV(my_classifier) 
model.fit(X_train, y_train) 

Я боюсь, что с помощью того же набора обучения я разорвать disjoint data правило. Альтернативой может быть наличие валидации

my_classifier.fit(X_train, y_train) 
model = CalibratedClassifierCV(my_classifier, cv='prefit') 
model.fit(X_valid, y_valid) 

У кого есть недостаток в том, чтобы оставлять меньше данных для обучения. Кроме того, если CalibratedClassifierCV должен соответствовать только моделям, установленным на другом учебном наборе, почему бы его использовать по умолчанию: cv=3, который также будет соответствовать базовой оценке? Проверяет ли перекрестная проверка правильное правило непересекающегося?

Вопрос: Каков правильный способ использования CalibratedClassifierCV?

ответ

1

Я уже ответил на это в CrossValidated на тот же вопрос. Я оставляю это здесь, так как для меня неясно, относится ли этот вопрос к CrossVal.

--- Оригинальный ответ ---

Есть упомянутые в CalibratedClassifierCV docs две вещи, которые намекают в сторону пути она может быть использована:

base_estimator: Если резюме = prefit, то классификатор, должно быть, уже поместился в данные.

cv: Если «prefit» передан, предполагается, что base_estimator уже установлен, и все данные используются для калибровки.

я, очевидно, может быть интерпретации это неправильно, но в этом случае вы можете использовать CCCV (сокращенно CalibratedClassifierCV) двумя способами:

номер один:

  • Вы обучаете свою модель, как обычно, , your_model.fit(X_train, y_train).
  • Затем вы создаете экземпляр CCCV, your_cccv = CalibratedClassifierCV(your_model, cv='prefit'). Обратите внимание, что вы установили cv, чтобы указать, что ваша модель уже подойдет.
  • И наконец, вы вызываете your_cccv.fit(X_validation, y_validation). Эти данные валидации используются исключительно для целей калибровки.

Номер два:

  • У вас есть новая, неподготовленной модели.
  • Затем вы создаете your_cccv=CalibratedClassifierCV(your_untrained_model, cv=3). Уведомление cv теперь количество складок.
  • И наконец, вы вызываете cccv_instance.fit(X, y).Поскольку ваша модель не обучена, X и y должны использоваться как для обучения, так и для калибровки. Способ обеспечения данных «непересекающийся» является перекрестной проверкой: для любой заданной складки CCCV будет разделять X и y на ваши данные обучения и калибровки, чтобы они не перекрывались.

TLDR: Метод 1 позволяет вам контролировать, что используется для обучения и калибровки. Второй метод использует перекрестные проверки, чтобы попытаться максимально использовать ваши данные для обеих целей.

Смежные вопросы