Beispiel #1
0
    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
Beispiel #2
0
    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_)
Beispiel #4
0
    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