логистическая регрессия и коэффициент - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь определить, соответствует ли бета-оценка, рассчитанная по логистической регрессии (из библиотеки sklearn), или закрыта для беты, которую я использовал для создания результата с использованием логистической функции (1 / (1 + exp (-) (б * х))). Вот код, который я использовал

import numpy as np
from sklearn.linear_model import LogisticRegression

a = np.random.random_sample(100) * 12 - 6
a = np.sort(a)
t = 1/(1 + np.exp(-1 * (6 * (a)))) # I create a beta of 6
for i in range(len(t)):
    if t[i] >= 0.5:
        t[i] = 1
    else:
        t[i] = 0
a = np.array([a]).T
ones = np.array([[1]*len(a)]).T
a = np.concatenate((ones, a), axis=1)
lg = LogisticRegression()
lg.fit(a, t)
print(lg.coef_) # the estimated beta from the logistic regression model is [[ 0.24941991  2.41880381]]

Бета I предустановлена ​​на 6, однако бета от логистической регрессии составляет 2,39662781. Даже при том, что я сделал приближение только для получения 1 и 0, две бета все еще слишком разные. Более того, когда я увеличиваю бета-версию, которую я предварительно установил, оценочная бета-версия из модели иногда увеличивается, но иногда уменьшается, например, если я устанавливаю бета-версию равной 7, тогда бета-версия, оцененная по модели, составляет 2,15344631.

Может кто-нибудь объяснить мне, что происходит? или Как можно оценить бета-версию, закрытую для той, которую я создал?

1 Ответ

0 голосов
/ 01 июля 2018

Логистическая регрессия - это классификатор, а не регрессор. Вы удаляете информацию о наклоне фактической разделительной линии между положительными и отрицательными примерами, когда вы сворачиваете действительные значения в 0 и 1 с помощью логистической функции.

Значение для беты определяет крутизну линии, которая отделяет 0 от 1 с. Чтобы получить более высокое значение для бета-версии, вам нужен меньший разрыв между соседними значениями 0 и 1. Например, если вы замените a = np.random.random_sample(100) * 12 - 6 на a = np.linspace(-6, 6, 99), вы получите бета-версию около 2.4. Если вы используете a = np.linspace(-6, 6, 999) бета будет около 5.2. Но вы не должны ожидать восстановления исходного значения, потому что функция потерь является кросс-энтропийной на 0 и 1, а не означает среднеквадратичную ошибку на исходных линейных значениях, поэтому оптимизатору не удастся восстановить исходный наклон только для правильно классифицируйте вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...