def _calibrate_model(self, model, method: str, X_valid: np.array, y_valid: np.array): """ Note that we use _CalibratedClassifier to better deal with the label encoding. Arguments: model {BaseEstimator} -- sklearn model model method {str} -- [description] X_valid {np.array} -- Feature matrix y_valid {np.array} -- Label vector Returns: [_CalibratedClassifier] -- calibrated classifier """ if method == 'isotonic': calibrated = _CalibratedClassifier(model, method='isotonic', classes=self.classes) calibrated.fit(X_valid, y_valid) elif method == 'sigmoid': calibrated = _CalibratedClassifier(model, method='sigmoid', classes=self.classes) calibrated.fit(X_valid, y_valid) elif method == 'none': calibrated = model else: calibrated = _CalibratedClassifier(model, method='sigmoid', classes=self.classes) calibrated.fit(X_valid, y_valid) return calibrated
def _calibrate_model(self, model, method: str, X_valid: np.array, y_valid: np.array): """ Note that we use _CalibratedClassifier to better deal with the label encoding. Arguments: model (BaseEstimator) -- sklearn model model method (str) -- Calibration method "isotonic" or "sigmoid" X_valid (np.array) -- Feature matrix y_valid (np.array) -- Label vector Returns: _CalibratedClassifier -- calibrated classifier """ if method == "isotonic": calibrated = _CalibratedClassifier(model, method="isotonic", classes=self.classes) calibrated.fit(X_valid, y_valid) elif method == "sigmoid": calibrated = _CalibratedClassifier(model, method="sigmoid", classes=self.classes) calibrated.fit(X_valid, y_valid) elif method == "none": calibrated = model else: calibrated = _CalibratedClassifier(model, method="sigmoid", classes=self.classes) calibrated.fit(X_valid, y_valid) return calibrated
def test_calibration_zero_probability(): # Test an edge case where _CalibratedClassifier avoids numerical errors # in the multiclass normalization step if all the calibrators output # are zero all at once for a given sample and instead fallback to uniform # probabilities. class ZeroCalibrator: # This function is called from _CalibratedClassifier.predict_proba. def predict(self, X): return np.zeros(X.shape[0]) X, y = make_blobs(n_samples=50, n_features=10, random_state=7, centers=10, cluster_std=15.0) clf = DummyClassifier().fit(X, y) calibrator = ZeroCalibrator() cal_clf = _CalibratedClassifier(base_estimator=clf, calibrators=[calibrator], classes=clf.classes_) probas = cal_clf.predict_proba(X) # Check that all probabilities are uniformly 1. / clf.n_classes_ assert_allclose(probas, 1.0 / clf.n_classes_)
def _calibrate_model(self, model, method: str, X_valid: np.array, y_valid: np.array): """ Note that we use _CalibratedClassifier to better deal with the label encoding. Arguments: model {BaseEstimator} -- sklearn model model method {str} -- [description] X_valid {np.array} -- Feature matrix y_valid {np.array} -- Label vector Returns: [_CalibratedClassifier] -- calibrated classifier """ if method == "isotonic": calibrated = _CalibratedClassifier(model, method="isotonic", classes=self.classes) calibrated.fit(X_valid, y_valid) elif method == "sigmoid": calibrated = _CalibratedClassifier(model, method="sigmoid", classes=self.classes) calibrated.fit(X_valid, y_valid) elif method == "none": calibrated = model elif method == "spline": warnings.warn("spline is deprecated option!", DeprecationWarning) calibrated = SplineCalibratedClassifierCV(model, cv="prefit") calibrated.fit(X_valid, y_valid) else: calibrated = _CalibratedClassifier(model, method="sigmoid", classes=self.classes) calibrated.fit(X_valid, y_valid) return calibrated