Tuesday, July 19, 2022

Plot multinomial and One-vs-Rest Logistic Regression

Полиномиальная логистическая регрессия.Логистическая регрессия - это алгоритм классификации.

Он предназначен для наборов данных, которые имеют числовые входные переменные и категориальную целевую переменную, имеющую два значения или класса. Задачи этого типа называются задачами бинарной классификации. Логистическая регрессия предназначена для задач двух классов, моделирующих цель с использованием биномиальной функции распределения вероятностей. Метки класса сопоставляются с 1 для положительного класса или результата и 0 для отрицательного класса или результата. Подходящая модель предсказывает вероятность того, что пример принадлежит классу 1. По умолчанию логистическая регрессия не может использоваться для задач классификации, которые имеют более двух меток классов, так называемая мультиклассовая классификация. Вместо этого требуется модификация для поддержки задач классификации нескольких классов.

Один из популярных подходов к адаптации логистической регрессии к задачам классификации с несколькими классами состоит в том, чтобы разделить проблему классификации с несколькими классами на несколько задач бинарной классификации и подобрать стандартную модель логистической регрессии для каждой подзадачи. Методы этого типа включают модели оболочки «один против остальных» и «один против одного». Альтернативный подход включает изменение модели логистической регрессии для прямой поддержки предсказания нескольких меток классов. В частности, чтобы предсказать вероятность того, что входной пример принадлежит каждой известной метке класса. Распределение вероятностей, которое определяет многоклассовые вероятности, называется полиномиальным распределением вероятностей. Модель логистической регрессии, адаптированная для изучения и прогнозирования полиномиального распределения вероятностей, называется полиномиальной логистической регрессией. Точно так же мы можем называть стандартную или стандартную логистическую регрессию биномиальной логистической регрессией. Биномиальная логистическая регрессия: стандартная логистическая регрессия, предсказывающая биномиальную вероятность (т. е. для двух классов) для каждого входного примера. Полиномиальная логистическая регрессия: модифицированная версия логистической регрессии, которая предсказывает полиномиальную вероятность (т. е. более двух классов) для каждого входного примера.

Дискретные распределения вероятностей для машинного обучения

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

(.env) boris@boris-All-Series:~/MultinomlogisticRegression$ cat plotLogistRegMultinom.py

"""

Plot multinomial and One-vs-Rest Logistic Regression

Постройте поверхность решений полиномиальной и логистической регрессии «один против остальных». Гиперплоскости, соответствующие трем классификаторам «один против остальных» (OVR), представлены пунктирными линиями.

"""

import numpy as np

import matplotlib.pyplot as plt

from sklearn.datasets import make_blobs

from sklearn.linear_model import LogisticRegression

from sklearn.inspection import DecisionBoundaryDisplay

# make 3-class dataset for classification

centers = [[-5, 0], [0, 1.5], [5, -1]]

X, y = make_blobs(n_samples=1000, centers=centers, random_state=40)

transformation = [[0.4, 0.2], [-0.4, 1.2]]

X = np.dot(X, transformation)

for multi_class in ("multinomial", "ovr"):

    clf = LogisticRegression(

        solver="sag", max_iter=100, random_state=42, multi_class=multi_class

    ).fit(X, y)

    # print the training scores

    print("training score : %.3f (%s)" % (clf.score(X, y), multi_class))

    _, ax = plt.subplots()

    DecisionBoundaryDisplay.from_estimator(

        clf, X, response_method="predict", cmap=plt.cm.Paired, ax=ax

    )

    plt.title("Decision surface of LogisticRegression (%s)" % multi_class)

    plt.axis("tight")

    # Plot also the training points

    colors = "bry"

    for i, color in zip(clf.classes_, colors):

        idx = np.where(y == i)

        plt.scatter(

            X[idx, 0], X[idx, 1], c=color, cmap=plt.cm.Paired, edgecolor="black", s=20

        )

    # Plot the three one-against-all classifiers

    xmin, xmax = plt.xlim()

    ymin, ymax = plt.ylim()

    coef = clf.coef_

    intercept = clf.intercept_

    def plot_hyperplane(c, color):

        def line(x0):

            return (-(x0 * coef[c, 0]) - intercept[c]) / coef[c, 1]

        plt.plot([xmin, xmax], [line(xmin), line(xmax)], ls="--", color=color)

    for i, color in zip(clf.classes_, colors):

        plot_hyperplane(i, color)

plt.show()































No comments:

Post a Comment