Логистическая регрессия — различия между версиями
(→Обоснование) |
(→Пример кода для scikit-learn) |
||
Строка 56: | Строка 56: | ||
}} | }} | ||
− | == | + | == Примеры кода == |
+ | ==== scikit-learn ==== | ||
Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.'''LogisticRegression'''] имеет несколько параметров, например: | Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.'''LogisticRegression'''] имеет несколько параметров, например: | ||
* '''solver''' $-$ алгоритм, использующийся для оптимизации | * '''solver''' $-$ алгоритм, использующийся для оптимизации | ||
Строка 81: | Строка 82: | ||
y_pred = model.'''predict'''(X_test) | y_pred = model.'''predict'''(X_test) | ||
model.'''score'''(X_test, y_test) | model.'''score'''(X_test, y_test) | ||
+ | |||
+ | ==== [[Примеры кода на Scala # Логистическая регрессия|Пример кода на Scala]] ==== | ||
== См. также == | == См. также == |
Версия 08:45, 25 января 2019
Логистическая регрессия (англ. logistic regression) — метод построения линейного классификатора, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.
Содержание
Описание
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество независимых переменных на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.
Итак, пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ»
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left<x, w\right>$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.
Задача обучения линейного классификатора заключается в том, чтобы по выборке $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида:После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:
где $\sigma(z) = \frac1{1+e^{-z}}$ — сигмоидная функция.
Обоснование
С точки зрения байесовского классификатора[на 25.01.19 не создан]
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему
Теорема: |
Пусть
Тогда
|
Доказательство: |
Рассмотрим отношение апостериорных вероятностей классов и воспользуемся тем, что $p_y(x)$ — экспонентные плотности с параметрами $\theta_y$ и $\delta$: где $\mathrm{P}_+$ $-$ априорные вероятности, $p_+(x)$ $-$ функции правдоподобия $w=c_+(\delta)\theta_+-c_-(\delta)\theta_- = const(x)$ Здесь вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов при признаках. Все слагаемые под экспонентой, не зависящие от $x$, можно считать аддитивной добавкой к коэффициенту при константном признаке. Поскольку свободные коэффициенты настраиваются по обучающей выборке, вычислять эту аддитивную добавку нет никакого смысла, и её можно включить в $\langle w, x\rangle$. Следовательно, Используя формулу полной вероятности выразим апостериорные вероятности Объединяя эти два равенства в одно, получаем требуемое: Разделяющая поверхность в байесовском решающем правиле определяется уравнением которое равносильно |
Примеры кода
scikit-learn
Классификатор sklearn.linear_model.LogisticRegression имеет несколько параметров, например:
- solver $-$ алгоритм, использующийся для оптимизации
- multi_class $-$ классификация на 2 или много классов
- Импортируем нужные библиотеки
from sklearn.linear_model import LogisticRegression from sklearn import datasets from sklearn.model_selection import train_test_split
- Выберем тренировочное и тестовое множества
iris = datasets.load_iris() X = iris.data y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
- Обучение
clf = LogisticRegression(random_state=0, solver='lbfgs', multi_class='multinomial') model = clf.fit(X_train, y_train)
- Предсказание
y_pred = model.predict(X_test) model.score(X_test, y_test)
Пример кода на Scala
См. также
- Байесовская классификация
- Линейная регрессия
- Вариации регрессии
- Обзор библиотек для машинного обучения на Python
- Общие понятия
- Уменьшение размерности
Источники информации
- Логистическая регрессия $-$ курс лекций Воронцова
- Logistic regression $-$ Wikipedia
- sklearn.linear_model.LogisticRegression $-$ реализация алгоритма на scikit-learn.org