Логистическая регрессия — различия между версиями
(→Пример кода для scikit-learn) |
|||
Строка 78: | Строка 78: | ||
y_pred = model.'''predict'''(X_test) | y_pred = model.'''predict'''(X_test) | ||
model.'''score'''(X_test, y_test) | model.'''score'''(X_test, y_test) | ||
+ | == См. также == | ||
+ | * [[Байесовская классификация]] | ||
+ | * [[Линейная регрессия]] | ||
+ | * [[Вариации регрессии]] | ||
+ | * [[Обзор библиотек для машинного обучения на Python]] | ||
+ | * [[Общие понятия]] | ||
+ | * [[Уменьшение размерности]] | ||
+ | |||
+ | == Источники информации == | ||
+ | #[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F курс лекций Воронцова] | ||
+ | #[https://en.wikipedia.org/wiki/Logistic_regression Wikipedia] | ||
+ | #[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html реализация алгоритма на scikit-learn.org] | ||
+ | [[Категория: Машинное обучение]] |
Версия 16:34, 23 января 2019
Логистическая регрессия (англ. logistic regression) — метод построения линейного классификатора[на 23.01.19 не создан], позволяющий оценивать апостериорные вероятности принадлежности объектов классам.
Содержание
Описание
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $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}}$ — сигмоидная функция.
Обоснование
С точки зрения байесовского классификатора
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему
Теорема: |
Пусть
Тогда
|
Доказательство: |
Рассмотрим отношение апостериорных вероятностей классов и воспользуемся тем, что $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)
См. также
- Байесовская классификация
- Линейная регрессия
- Вариации регрессии
- Обзор библиотек для машинного обучения на Python
- Общие понятия
- Уменьшение размерности