Значение коэффициента логистической регрессии - PullRequest
0 голосов
/ 11 января 2019

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

Я сгенерировал случайный набор данных (см. Ниже) с нормально распределенными входами, а выход - двоичным (0,1). Я вручную использовал коэффициенты для ввода и надеялся, что смогу их воспроизвести (см. Ниже фрагмент кода). Однако, к моему удивлению, ни мой собственный код, ни sklearn LogisticRegression не смогли воспроизвести действительные числа (хотя знак и порядок величины совпадают). Более того, полученные моим алгоритмом коэффициенты отличаются от коэффициентов, полученных с помощью sklearn. Я неправильно истолковываю, каковы коэффициенты логистической регрессии?

Буду признателен за понимание этого несоответствия.

Спасибо!

edit: я пытался использовать statsmodels Logit и получил третий набор слегка отличающихся значений для коэффициентов

Еще немного информации, которая может иметь отношение к: Я написал линейный регрессор, используя почти идентичный код, и он работал отлично, поэтому я уверен, что это не проблема в коде. Кроме того, мой регрессор на самом деле превзошел склеарн на тренировочном наборе, и они имеют одинаковую точность на тестовом наборе, поэтому у меня нет оснований полагать, что регрессоры ошибочны.

Фрагменты кода для генерации набора данных:

o1 = 2
o2 = -3
x[:,1]=np.random.rand(size)*2
x[:,2]=np.random.rand(size)*3
y = np.vectorize(sigmoid)(x[:,1]*o1+x[:,2]*o2 + np.random.normal(size=size))

так что, как видно, входные коэффициенты равны +2 и -3 (перехват 0); коэффициенты склеарна составляли ~ 2,8 и ~ -4,8; мои коэффициенты были ~ 1,7 и ~ -2,6

и регрессора (наиболее значимые его части):

for j in range(bin_size):
    xs = x[i]
    y_real = y[i]
    z = np.dot(self.coeff,xs)
    h = sigmoid(z)
    dc+= (h-y_real)*xs
self.coeff-= dc * (learning_rate/n)

1 Ответ

0 голосов
/ 12 января 2019

Что узнали о перехвате? Это действительно не должно быть сюрпризом, поскольку ваш y является полиномом 3-й степени, в то время как ваша модель имеет только два коэффициента, в то время как 3 + y-перехват потребуется для моделирования переменной ответа от предикторов.

Кроме того, значения могут отличаться из-за SGD, например.

Не совсем уверен, но коэффициенты могут отличаться и возвращать правильный y для конечного набора точек. Какие показатели у каждой модели? Они отличаются?

...