Я заметил, что новый sklearn CalibratedClassifierCV
, кажется, хуже прямого base_estimator
, когда base_estimator
равен GradientBoostingClassifer
(я не тестировал другие классификаторы). Интересно, что если параметры make_classification
:
n_features = 10
n_informative = 3
n_classes = 2
тогда CalibratedClassifierCV
кажется небольшим превышением (оценка потерь в лотерее).
Однако в соответствии со следующим классификационным набором данных CalibratedClassifierCV
кажется, как правило, нижестоящим:
from sklearn.datasets import make_classification
from sklearn import ensemble
from sklearn.calibration import CalibratedClassifierCV
from sklearn.metrics import log_loss
from sklearn import cross_validation
# Build a classification task using 3 informative features
X, y = make_classification(n_samples=1000,
n_features=100,
n_informative=30,
n_redundant=0,
n_repeated=0,
n_classes=9,
random_state=0,
shuffle=False)
skf = cross_validation.StratifiedShuffleSplit(y, 5)
for train, test in skf:
X_train, X_test = X[train], X[test]
y_train, y_test = y[train], y[test]
clf = ensemble.GradientBoostingClassifier(n_estimators=100)
clf_cv = CalibratedClassifierCV(clf, cv=3, method='isotonic')
clf_cv.fit(X_train, y_train)
probas_cv = clf_cv.predict_proba(X_test)
cv_score = log_loss(y_test, probas_cv)
clf = ensemble.GradientBoostingClassifier(n_estimators=100)
clf.fit(X_train, y_train)
probas = clf.predict_proba(X_test)
clf_score = log_loss(y_test, probas)
print 'calibrated score:', cv_score
print 'direct clf score:', clf_score
print
Один проход дал:
Возможно, мне не хватает чего-то о том, как работает CalibratedClassifierCV
, или я не использую его правильно, но у меня создалось впечатление, что если что-либо, передача классификатора в CalibratedClassifierCV
приведет к повышению производительности по сравнению с base_estimator
один.
Может ли кто-нибудь объяснить это наблюдаемое отставание?