Изменения

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

Логистическая регрессия

1847 байт добавлено, 16:26, 23 января 2020
Обоснование
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $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>
Рассмотрим случай двух классов: $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>
где $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>
После того, как решение $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>где $\sigma(z) = \frac1{1+e^{-z}}$ {{---}} сигмоидная функция.
== Обоснование ==
'''С точки зрения [[Байесовский классификаторБайесовская классификация|байесовского классификатора]]<sup>[на 25.01.19 не создан]</sup>'''
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему
{{Теорема
|statement=Пусть
* функции правдоподобия выборка прецедентов $\mathrm{X}^l=\{\left(x_1, y_1\right), ... ,\left(x_l, y_l\right)\}$ получена согласно вероятностному распределению с плотностью <tex>p\left(x, y\right)=\mathrm{P}_yp_y\left(x\right)=\mathrm{P}\left(y|x\right)p\left(плотности распределенияx\right) классов </tex>где $\mathrm{P}_y$ {{---}} ''априорные вероятности'',$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>.
|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$ не зависит от $Напомним, что оптимальный байесовский классификатор для двух классов выглядит следущим образом:<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$, можно считать аддитивной добавкой к коэффициенту при константном признаке. Поскольку свободные коэффициенты настраиваются по обучающей выборке, вычислять эту аддитивную добавку нет никакого смысла, и её можно включить в $\langle w, right)}{\mathrm{P}\left(-1|x\rangle$.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>и распишем функции правдоподобия, используя экспонентную формулу с параметрами $\theta_y$ и $\delta$:<center><tex>\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle w\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>
Используя [[Формула полной вероятности|формулу полной вероятности]] Рассмотрим получившуюся под экспонентой сумму: <center><tex>*$\mathrm{P}langle\left(c_+1|x(\rightdelta) \theta_+ \mathrm{P}\left-c_-(-1|x\rightdelta) = 1</tex></center>выразим апостериорные вероятности <center><tex>\mathrm{P}\left(+1|xtheta_-\right) , \mathrm{P}\left(-1|x\right)</tex></center> через $rangle = \langle w, x\rangle$. Вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов(весов) при константных признаках;<center><tex>*$b_+(\mathrm{P}delta, \left(theta_+1|x\right) = -b_-(\sigmadelta, \left(theta_-) +\langle w ,xln\ranglefrac{\right) , mathrm{P}_+}{\mathrm{P}_-} = \mathrm{const}\left(-1|x\right) = \sigma\left(-$. Можно считать данные слагаемые аддитивной добавкой к коэффициенту при признаке. Но так как свободные коэффициенты настраиваются по обучающей выборке, вычислять эту добавку не имеет смысла и ее можно включить в $\langle w ,x\rangle\right)</tex></center>$.
Объединяя эти два равенства в одноТаким образом, получаем требуемое: <center><tex>\frac{\mathrm{P}\left(y+1|x\right)=}{\sigmamathrm{P}\left(-1|x\right)} = \mathrm{e}^{\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>\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 ===
Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html 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_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#Логистическая регрессия|Пример кода на 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]]
== Источники информации ==
#* [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 {{---}} Логистическая регрессия] $-$ курс лекций Воронцова#* [https://en.wikipedia.org/wiki/Logistic_regression Wikipedia {{---}} Logistic regression] $-$ Wikipedia#* [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html scikit-learn.org {{---}} документация по sklearn.linear_model.LogisticRegression] $-$ реализация алгоритма на scikit-learn.org
[[Категория: Машинное обучение]]
Анонимный участник

Навигация