Редактирование: Логистическая регрессия

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
  
'''Логистическая регрессия''' (англ. ''logistic regression'') — метод построения линейного классификатора, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.
+
'''Логистическая регрессия''' (англ. ''logistic regression'') — метод построения [[Линейный классификатор|линейного классификатора]]<sup>[на 23.01.19 не создан]</sup>, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.
 
== Описание ==
 
== Описание ==
 
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество [[Независимые случайные величины|независимых]] переменных <tex>x_1, ... x_n</tex> на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.
 
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество [[Независимые случайные величины|независимых]] переменных <tex>x_1, ... x_n</tex> на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.
  
Итак, пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ {{---}} конечное множество меток классов и задана обучающая выборка пар «объект-ответ» <tex>X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.</tex>
+
Итак, пусть объекты задаются $n$ числовымы признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» <tex>X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.</tex>
  
 
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида  
 
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида  
<center><tex>a(x, w) = \mathrm{sign}\left(\sum\limits_{j=1}^n w_j f_j(x) - w_0 \right)=\mathrm{sign}\left<x, w\right></tex>,</center>
+
<center><tex>a(x, w) = \mathrm{sign}\left(\sum\limits_{j=1}^n w_j f_j(x) - w_0 \right)=\mathrm{sign}\left<x, w\right></tex></center>
 
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left<x, w\right>$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.
 
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left<x, w\right>$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.
  
Задача обучения линейного классификатора заключается в том, чтобы по выборке  $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида: <center><tex>Q(w) = \sum\limits_{i=1}^m \ln\left( 1 + \exp( -y_i \langle x_i,w \rangle ) \right) \to \min_{w}</tex>,</center>
+
Задача обучения линейного классификатора заключается в том, чтобы по выборке  $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида: <center><tex>Q(w) = \sum\limits_{i=1}^m \ln\left( 1 + \exp( -y_i \langle x_i,w \rangle ) \right) \to \min_{w}</tex></center>
  
 
После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:
 
После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:
<center><tex>\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y</tex>,</center>
+
<center><tex>\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y</tex></center>
где $\sigma(z) = \frac1{1+e^{-z}}$ {{---}} сигмоидная функция.
+
где $\sigma(z) = \frac1{1+e^{-z}}$ сигмоидная функция.
 
 
 
== Обоснование ==
 
== Обоснование ==
'''С точки зрения [[Байесовская классификация|байесовского классификатора]]'''
+
'''С точки зрения [[Байесовский классификатор|байесовского классификатора]]'''
  
 
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему
 
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему
 
{{Теорема
 
{{Теорема
 
|statement=Пусть
 
|statement=Пусть
*выборка прецедентов $\mathrm{X}^l=\{\left(x_1, y_1\right), ... ,\left(x_l, y_l\right)\}$  получена согласно вероятностному распределению с плотностью
+
* функции правдоподобия (плотности распределения) классов $p_y(x)$ принадлежат экспонентному семейству плотностей $p_y(x) = \exp \left( \langle\theta,x\rangle \cdot a(\delta) + b(\delta,\theta) + d(x,\delta) \right)$, где $a, b, d$ произвольные функции
<tex>p\left(x, y\right)=\mathrm{P}_yp_y\left(x\right)=\mathrm{P}\left(y|x\right)p\left(x\right)</tex>
+
*функции правдоподобия имеют равные знаения параметра разброса $\delta$ и отличаются только значениями параметра сдвига $\theta_y$
где $\mathrm{P}_y$ {{---}} ''априорные вероятности'',
+
*среди признаков есть константа, скажем, $f_0(x) = -1$
$p_y(x)$ $-$ ''функции правдоподобия'', принадлежащие экспонентному семейству плотностей (т.е. $p_y(x) = \exp \left( \langle\theta,x\rangle \cdot a(\delta) + b(\delta,\theta) + d(x,\delta) \right)$, где $a, b, d$ $-$ произвольные функции);
 
*функции правдоподобия имеют равные знаения параметра разброса $\delta$ и отличаются только значениями параметра сдвига $\theta_y$;
 
*среди признаков есть константа, скажем, $f_0(x) = -1$;
 
 
Тогда  
 
Тогда  
*линейный классификатор является оптимальным байесовским классификатором;
+
*линейный классификатор является оптимальным байесовским классификатором
*апостериорные вероятности классов оценивается по формуле <tex>\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y</tex>.
+
*апостериорные вероятности классов оценивается по формуле <tex>\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y</tex>
 
|proof=
 
|proof=
 +
Рассмотрим отношение апостериорных вероятностей классов и воспользуемся тем, что $p_y(x)$ — экспонентные плотности с параметрами $\theta_y$ и $\delta$:
 +
<center><tex>\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)}</tex></center>
 +
где $\mathrm{P}_+$ $-$ ''априорные вероятности'', $p_+(x)$ $-$ ''функции правдоподобия''
 +
<center><tex>\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle+b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-}\right)</tex></center>
 +
$w=c_+(\delta)\theta_+-c_-(\delta)\theta_- = const(x)$
  
Напомним, что оптимальный байесовский классификатор для двух классов выглядит следущим образом:
+
Здесь вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов при признаках. Все слагаемые под экспонентой, не зависящие от $x$, можно считать аддитивной добавкой к коэффициенту при константном признаке. Поскольку свободные коэффициенты настраиваются по обучающей выборке, вычислять эту аддитивную добавку нет никакого смысла, и её можно включить в $\langle w, x\rangle$.
<center><tex>a\left(x\right)=
 
\mathrm{sign}\left(\lambda_+\mathrm{P}\left(+1|x\right)-\lambda_-\mathrm{P}\left(-1|x\right)\right)=
 
\mathrm{sign}\left(\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)}-\frac{\lambda_-}{\lambda_+}\right)</tex>,</center>
 
  
Рассмотрим отношение апостериорных вероятностей классов 
+
Следовательно,
<center><tex>\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)}</tex>,</center>
+
<center><tex>\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \exp\left(\langle w, x\rangle\right)</tex></center>
и распишем функции правдоподобия, используя экспонентную формулу с параметрами $\theta_y$ и $\delta$:
 
<center><tex>\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle+b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-}\right)</tex>,</center>
 
  
Рассмотрим получившуюся под экспонентой сумму:
+
Используя [[Формула полной вероятности|формулу полной вероятности]]
*$\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle = \langle w, x\rangle$. Вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов(весов) при константных признаках;
+
<center><tex>\mathrm{P}\left(+1|x\right) + \mathrm{P}\left(-1|x\right) = 1</tex></center>
*$b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-} = \mathrm{const}\left(x\right)$. Можно считать данные слагаемые аддитивной добавкой к коэффициенту при признаке. Но так как свободные коэффициенты настраиваются по обучающей выборке, вычислять эту добавку не имеет смысла и ее можно включить в $\langle w, x\rangle$.
+
выразим апостериорные вероятности
 +
<center><tex>\mathrm{P}\left(+1|x\right) , \mathrm{P}\left(-1|x\right)</tex></center> через $\langle w, x\rangle$
 +
<center><tex>\mathrm{P}\left(+1|x\right) = \sigma\left(+\langle w ,x\rangle\right) , \mathrm{P}\left(-1|x\right) = \sigma\left(-\langle w ,x\rangle\right)</tex></center>
  
Таким образом,  
+
Объединяя эти два равенства в одно, получаем требуемое:
<center><tex>\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \mathrm{e}^{\langle w, x\rangle}</tex>,</center>
+
<center><tex>\mathrm{P}\left(y|x\right)=\sigma\left(\langle w, x\rangle y\right)</tex></center>
  
 
Разделяющая поверхность в байесовском решающем правиле определяется уравнением  
 
Разделяющая поверхность в байесовском решающем правиле определяется уравнением  
<center><tex>\lambda_- \mathrm{P}\left(-1|x\right) = \lambda_+ \mathrm{P}\left(+1|x\right)</tex>,</center>
+
<center><tex>\lambda_- \mathrm{P}\left(-1|x\right) = \lambda_+ \mathrm{P}\left(+1|x\right)</tex></center>
 
которое равносильно  
 
которое равносильно  
<center><tex>\langle w, x\rangle - \ln\frac{\lambda_-}{\lambda_+} = 0</tex>,</center>
+
<center><tex>\langle w, x\rangle - \ln\frac{\lambda_-}{\lambda_+} = 0</tex></center>
 
+
Следовательно, разделяющая поверхность линейна.
Следовательно, разделяющая поверхность линейна и первый пункт теоремы доказан.
 
 
 
Используя [[Формула полной вероятности|формулу полной вероятности]] получаем следующее равенство
 
<center><tex>\mathrm{P}\left(+1|x\right) + \mathrm{P}\left(-1|x\right) = \sigma\left(+\langle w ,x\rangle\right) + \sigma\left(-\langle w ,x\rangle\right) = 1</tex>,</center>
 
 
 
Откуда следует:
 
<center><tex>\mathrm{P}\left(y|x\right)=\sigma\left(\langle w, x\rangle y\right), y = \{-1, +1\}</tex>,</center>
 
Таким образом, второй пункт теоремы доказан.
 
 
}}
 
}}
 
+
== Пример кода для scikit-learn ==
== Примеры кода ==
 
=== 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''' $-$ алгоритм, использующийся для оптимизации
* '''multi_class''' $-$ классификация на 2 или много классов.
+
* '''multi_class''' $-$ классификация на 2 или много классов
  
  
* Импортируем нужные библиотеки:
+
* Импортируем нужные библиотеки
 
  '''from''' sklearn.linear_model '''import''' LogisticRegression
 
  '''from''' sklearn.linear_model '''import''' LogisticRegression
 
  '''from''' sklearn '''import''' datasets
 
  '''from''' sklearn '''import''' datasets
 
  '''from''' sklearn.model_selection '''import''' train_test_split
 
  '''from''' sklearn.model_selection '''import''' train_test_split
  
* Выберем тренировочное и тестовое множества:
+
* Выберем тренировочное и тестовое множества
 
  iris = datasets.'''load_iris()'''
 
  iris = datasets.'''load_iris()'''
 
   
 
   
Строка 84: Строка 72:
 
  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')
 
  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')
 
  clf = LogisticRegression(random_state='''0''', solver='lbfgs', multi_class='multinomial')
 
  model = clf.'''fit'''(X_train, y_train)
 
  model = clf.'''fit'''(X_train, y_train)
  
* Предсказание:
+
* Предсказание
 
  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]] ===
 
===Пример на языке Java===
 
Пример логистической регрессии с применением <code>smile.classification.LogisticRegression</code><ref>[https://haifengl.github.io/smile/api/java/smile/classification/LogisticRegression/ Smile, Logistic Regression]</ref>
 
 
<code>Maven</code> зависимость:
 
  <dependency>
 
    <groupId>com.github.haifengl</groupId>
 
    <artifactId>smile-core</artifactId>
 
    <version>1.5.2</version>
 
  </dependency>
 
 
  '''import''' smile.data.AttributeDataset;
 
  '''import''' smile.data.NominalAttribute;
 
  '''import''' smile.classification.LogisticRegression;
 
  '''import''' smile.data.parser.ArffParser;
 
 
  '''var''' arffParser = new ArffParser();
 
  arffParser.setResponseIndex(4);
 
  '''var''' iris  = arffParser.parse(smile.data.parser.IOUtils.getTestDataFile("weka/iris.arff"));
 
  '''var''' logClf = new LogisticRegression(iris.x(), iris.labels());
 
  logClf.predict(testX);
 
  
 
== См. также ==
 
== См. также ==
* [[Байесовская классификация]]<sup>[на 28.01.19 не создан]</sup>
+
* [[Байесовская классификация]]
* [[Линейная регрессия]]<sup>[на 28.01.19 не создан]</sup>
+
* [[Линейная регрессия]]
 
* [[Вариации регрессии]]
 
* [[Вариации регрессии]]
 
* [[Обзор библиотек для машинного обучения на Python]]
 
* [[Обзор библиотек для машинного обучения на Python]]
Строка 123: Строка 89:
  
 
== Источники информации ==
 
== Источники информации ==
* [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 machinelearning.ru {{---}} Логистическая регрессия]
+
#[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 {{---}} Logistic regression]
+
#[https://en.wikipedia.org/wiki/Logistic_regression Logistic_regression] $-$ Wiipedia
* [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html scikit-learn.org {{---}} документация по sklearn.linear_model.LogisticRegression]
+
#[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.LogisticRegression] $-$ реализация алгоритма на scikit-learn.org
  
 
[[Категория: Машинное обучение]]
 
[[Категория: Машинное обучение]]

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблоны, используемые на этой странице: