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

Материал из Викиконспекты
Перейти к: навигация, поиск

Логистическая регрессия (англ. logistic regression) — метод построения линейного классификатора[на 23.01.19 не создан], позволяющий оценивать апостериорные вероятности принадлежности объектов классам.

Описание

Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная y, принимающая значения 0 и 1 и множество независимых переменных x1,...xn на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.

Итак, пусть объекты задаются n числовымы признаками fj:XR,j=1...n и пространство признаковых описаний в таком случае X=Rn. Пусть Y конечное множество меток классов и задана обучающая выборка пар «объект-ответ» Xm={(x1,y1),,(xm,ym)}.

Рассмотрим случай двух классов: Y={1,+1}. В логистической регрессии строится линейный алгоритм классификации a:XY вида

a(x,w)=sign(nj=1wjfj(x)w0)=signx,w

где wj вес j-го признака, w0 порог принятия решения, w=(w0,...,wn) вектор весов, x,w скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: f0(x)=1.

Задача обучения линейного классификатора заключается в том, чтобы по выборке Xm настроить вектор весов w. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида:
Q(w)=mi=1ln(1+exp(yixi,w))minw

После того, как решение w найдено, становится возможным не только вычислять классификацию a(x)=signx,w для произвольного объекта x, но и оценивать апостериорные вероятности его принадлежности классам:

P{y|x}=σ(yx,w),yY

где σ(z)=11+ez — сигмоидная функция.

Обоснование

С точки зрения байесовского классификатора

Наиболее строгое обоснование логистической регрессии опирается на следующую теорему

Теорема:
Пусть
  • функции правдоподобия (плотности распределения) классов py(x) принадлежат экспонентному семейству плотностей py(x)=exp(θ,xa(δ)+b(δ,θ)+d(x,δ)), где a,b,d — произвольные функции
  • функции правдоподобия имеют равные знаения параметра разброса δ и отличаются только значениями параметра сдвига θy
  • среди признаков есть константа, скажем, f0(x)=1

Тогда

  • линейный классификатор является оптимальным байесовским классификатором
  • апостериорные вероятности классов оценивается по формуле P{y|x}=σ(yx,w),yY
Доказательство:

Рассмотрим отношение апостериорных вероятностей классов и воспользуемся тем, что py(x) — экспонентные плотности с параметрами θy и δ:

P(+1|x)P(1|x)=P+p+(x)Pp(x)

где P+ априорные вероятности, p+(x) функции правдоподобия

P+p+(x)Pp(x)=exp((c+(δ)θ+c(δ)θ),x+b+(δ,θ+)b(δ,θ)+lnP+P)

w=c+(δ)θ+c(δ)θ=const(x)

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

Следовательно,

P(+1|x)P(1|x)=exp(w,x)

Используя формулу полной вероятности

P(+1|x)+P(1|x)=1

выразим апостериорные вероятности

P(+1|x),P(1|x)
через w,x
P(+1|x)=σ(+w,x),P(1|x)=σ(w,x)

Объединяя эти два равенства в одно, получаем требуемое:

P(y|x)=σ(w,xy)

Разделяющая поверхность в байесовском решающем правиле определяется уравнением

λP(1|x)=λ+P(+1|x)

которое равносильно

w,xlnλλ+=0
Следовательно, разделяющая поверхность линейна.

Пример кода для 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)

См. также

Источники информации

  1. курс лекций Воронцова
  2. Wikipedia
  3. реализация алгоритма на scikit-learn.org