Лассо-регрессия с Python: простой вопрос

Предположим, у меня есть таблица значений:

df = pd.DataFrame({'Y1':[1, 2, 3, 4, 5, 6], 'X1':[1, 2, 3, 4, 5, 6], 'X2':[1, 1, 2, 1, 1, 1], 
              'X3':[6, 6, 6, 5, 6, 4], 'X4':[6, 5, 4, 3, 2, 1]})

Я хочу сделать простую регрессию Лассо, используя все эти значения в качестве тестового набора, где Y1 — зависимая переменная, а все X1...X4 — независимые переменные. Я пробовал использовать следующее:

from sklearn.linear_model import Lasso
Lasso(alpha = 0.0001).fit(df, df['Y1'])

но это не дает мне коэффициенты, которые я хочу. Как мне выполнить эту простую задачу? Спасибо.


person stevene97    schedule 23.01.2019    source источник
comment
Может быть, вам нужно перенастроить свою модель, если результаты не соответствуют вашим ожиданиям? Ошибки в коде вроде нет. Надеюсь, вы используете model = Lasso(alpha = 0.0001).fit(df, df['Y1']), а затем model.coef_, чтобы увидеть коэффициент.   -  person harvpan    schedule 23.01.2019
comment
Это то, что я делаю, но я все еще не получаю ожидаемых результатов. Я ожидаю, что коэффициенты будут [1, 1, 0, 0, -1], но вместо этого я просто получаю [ 1, 0, -0, -0, -0]   -  person stevene97    schedule 23.01.2019


Ответы (1)


Я не думаю, что вы полностью понимаете, что означают коэффициенты. Прежде всего, вы не должны регрессировать 'Y1' для всех ваших переменных (включая 'Y1'). Не включайте 'Y1' в свои независимые переменные:

Lasso(alpha = 0.0001).fit(df[['X1','X2','X3','X4']], df['Y1'])

Лассо - это просто метод «сжатия» вашего набора независимых переменных для линейной модели (путем попытки найти подмножество независимых переменных, которые хорошо предсказывают вашу зависимую переменную). Что вам нужно понять, так это то, что делает линейная регрессия. Помните, что целью линейной регрессии является создание линейной модели, которую можно использовать для прогнозирования значений вашей зависимой переменной. Вы можете предложить следующую модель (это то, что вы пытаетесь решить при линейной регрессии, в частности, вы решаете для коэффициентов):

Y1 = b1*X1 + b2*X2 + b3*X3 + b4*X4

Теперь, если мы используем предложенные вами коэффициенты (оставив 'Y1'), то модель будет:

Y1 = Y1 + X1 - X4

Но вы, очевидно, видите, что это не очень хорошо предсказывает 'Y1'. Мы можем изменить модель, чтобы она была просто:

Y1 = Y1

'Y1' отлично предсказывает 'Y1' (да). Вот почему ваш вывод для коэффициента равен [ 1, 0, -0, -0, -0]. Но это не то, что нам нужно при выполнении регрессии. Как я уже говорил, вы хотите исключить 'Y1' из регрессии. Таким образом, используя предложенные вами коэффициенты и опуская 'Y1', ваша модель будет:

Y1 = X1 - X4

Обратите внимание еще раз, что это не очень хорошо предсказывает 'Y1' (вы можете проверить некоторые точки из вашего набора данных). Вместо этого вы можете использовать следующую модель, чтобы точно предсказать 'Y1':

Y1 = X1

Таким образом, если вы регрессируете лассо 'Y1' на 'X1','X2','X3','X4', вы должны получить коэффициенты [1, 0, 0, 0].

person Joe Patten    schedule 23.01.2019