MCPcopy
hub / github.com/scikit-learn/scikit-learn / predict_proba

Method predict_proba

sklearn/calibration.py:781–847  ·  view source on GitHub ↗

Calculate calibrated probabilities. Calculates classification calibrated probabilities for each class, in a one-vs-all manner, for `X`. Parameters ---------- X : ndarray of shape (n_samples, n_features) The sample data. Returns -

(self, X)

Source from the content-addressed store, hash-verified

779 self.method = method
780
781 def predict_proba(self, X):
782 """Calculate calibrated probabilities.
783
784 Calculates classification calibrated probabilities
785 for each class, in a one-vs-all manner, for `X`.
786
787 Parameters
788 ----------
789 X : ndarray of shape (n_samples, n_features)
790 The sample data.
791
792 Returns
793 -------
794 proba : array, shape (n_samples, n_classes)
795 The predicted probabilities. Can be exact zeros.
796 """
797 predictions, _ = _get_response_values(
798 self.estimator,
799 X,
800 response_method=["decision_function", "predict_proba"],
801 )
802 if predictions.ndim == 1:
803 # Reshape binary output from `(n_samples,)` to `(n_samples, 1)`
804 predictions = predictions.reshape(-1, 1)
805
806 n_classes = self.classes.shape[0]
807
808 proba = np.zeros((_num_samples(X), n_classes))
809
810 if self.method in ("sigmoid", "isotonic"):
811 label_encoder = LabelEncoder().fit(self.classes)
812 pos_class_indices = label_encoder.transform(self.estimator.classes_)
813 for class_idx, this_pred, calibrator in zip(
814 pos_class_indices, predictions.T, self.calibrators
815 ):
816 if n_classes == 2:
817 # When binary, `predictions` consists only of predictions for
818 # clf.classes_[1] but `pos_class_indices` = 0
819 class_idx += 1
820 proba[:, class_idx] = calibrator.predict(this_pred)
821 # Normalize the probabilities
822 if n_classes == 2:
823 proba[:, 0] = 1.0 - proba[:, 1]
824 else:
825 denominator = np.sum(proba, axis=1)[:, np.newaxis]
826 # In the edge case where for each class calibrator returns a zero
827 # probability for a given sample, use the uniform distribution
828 # instead.
829 uniform_proba = np.full_like(proba, 1 / n_classes)
830 proba = np.divide(
831 proba, denominator, out=uniform_proba, where=denominator != 0
832 )
833 elif self.method == "temperature":
834 xp, _ = get_namespace(predictions)
835 if n_classes == 2 and predictions.shape[-1] == 1:
836 response_method_name = _check_response_method(
837 self.estimator,
838 ["decision_function", "predict_proba"],

Callers 1

predict_probaMethod · 0.45

Calls 9

_get_response_valuesFunction · 0.90
_num_samplesFunction · 0.90
LabelEncoderClass · 0.90
get_namespaceFunction · 0.90
_check_response_methodFunction · 0.90
divideMethod · 0.80
fitMethod · 0.45
transformMethod · 0.45
predictMethod · 0.45

Tested by

no test coverage detected