Как работает функция предсказания_проба в MLP в sklearn?

Я пытаюсь понять, как MLP Classifier sklearn извлекает его результаты для своей predict_proba функции.

На сайте просто перечислено:

Вероятностные оценки

Хотя многие другие, такие как логистическая регрессия, есть более подробные ответы: Вероятностные оценки.

Возвращенные оценки для всех классов упорядочены по метке классов.

Для задачи multi_class, если multi_class установлен как «мультиномиальный», функция softmax используется для нахождения прогнозируемой вероятности каждого класса. В противном случае используйте подход «один против остальных», то есть рассчитайте вероятность каждого класса, предполагая, что она положительна, с помощью логистической функции. и нормализовать эти значения по всем классам.

Другие типы моделей также имеют более подробную информацию. Возьмем, к примеру, классификатор машинных векторов поддержки

И есть также этот очень хороший пост о переполнении стека который объясняет это подробно.

Вычислите вероятности возможных результатов для образцов в X.

Модель должна иметь информацию о вероятности, вычисленную во время обучения: соответствие с вероятностью атрибута, установленной на True.

Другие примеры

Случайный лес :

Предскажите вероятности классов для X.

Прогнозируемые вероятности классов входной выборки вычисляются как средние предсказанные вероятности классов деревьев в лесу. Вероятность класса одного дерева - это доля образцов одного и того же класса в листе.

Гауссовский классификатор процессов:

Я хочу понять то же, что и в предыдущем сообщении, но для MLPClassifier. Как MLPClassifier работает внутри?


person wundermahn    schedule 23.04.2020    source источник


Ответы (1)


Заглянув в исходный код, я нашел:

def _initialize(self, y, layer_units):

    # set all attributes, allocate weights etc for first call
    # Initialize parameters
    self.n_iter_ = 0
    self.t_ = 0
    self.n_outputs_ = y.shape[1]

    # Compute the number of layers
    self.n_layers_ = len(layer_units)

    # Output for regression
    if not is_classifier(self):
        self.out_activation_ = 'identity'
    # Output for multi class
    elif self._label_binarizer.y_type_ == 'multiclass':
        self.out_activation_ = 'softmax'
    # Output for binary class and multi-label
    else:
        self.out_activation_ = 'logistic'

Кажется, что MLP Classifier использует логистическую функцию для двоичной классификации и функцию softmax для классификации с несколькими метками, чтобы построить выходной слой. Это говорит о том, что выход сети является вектором вероятности, на основе которого сеть делает прогнозы.

Если я посмотрю на метод predict_proba:

def predict_proba(self, X):
    """Probability estimates.
    Parameters
    ----------
    X : {array-like, sparse matrix} of shape (n_samples, n_features)
        The input data.
    Returns
    -------
    y_prob : ndarray of shape (n_samples, n_classes)
        The predicted probability of the sample for each class in the
        model, where classes are ordered as they are in `self.classes_`.
    """
    check_is_fitted(self)
    y_pred = self._predict(X)

    if self.n_outputs_ == 1:
        y_pred = y_pred.ravel()

    if y_pred.ndim == 1:
        return np.vstack([1 - y_pred, y_pred]).T
    else:
        return y_pred

Это подтверждает действие softmax или логистической функции активации для выходного слоя, чтобы иметь вектор вероятности.

Надеюсь, это поможет тебе.

person Giuseppe Angora    schedule 23.04.2020