Интерпретация результатов регрессии Лассо - PullRequest
0 голосов
/ 29 мая 2018

У меня есть вопрос, связанный с моделью регрессионного наказания с помощью лассо и интерпретации возвращаемых значений.У меня есть текстовое содержание, и я хочу найти каждое наиболее предсказуемое слово для класса.

Код и данные

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

from nltk.corpus import stopwords
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import Lasso

# Import test data
data = pd.read_csv('https://pastebin.com/raw/rXr4kd8S')

# Make ngrams
vectorizer = CountVectorizer(min_df=0.00, max_df=1.0, max_features=1000, stop_words='english', binary=True, lowercase=True, ngram_range=(1, 1))
grams = vectorizer.fit_transform(data['text'])

# Show features (words)
vectorizer.get_feature_names()

# Show Lasso coefficients
def lassoRegression(para1, para2):
    lasso = Lasso(alpha = 0, fit_intercept=True, normalize=True, max_iter=1000)
    lasso.fit(para1, para2)
    return lasso.coef_

model_lasso = lassoRegression(grams, data['label'])

# Sort coefficients
lasso_coef = pd.DataFrame(np.round_(model_lasso, decimals=2), vectorizer.get_feature_names(), columns = ["penalized_regression_coefficients"])
lasso_coef = lasso_coef[lasso_coef['penalized_regression_coefficients'] != 0]
lasso_coef = lasso_coef.sort_values(by = 'penalized_regression_coefficients', ascending = False)
lasso_coef

# Top/Low 10 values
lasso_coef = pd.concat([lasso_coef.head(10),lasso_coef.tail(10)], axis=0)

# Plot
ax = sns.barplot(x = 'penalized_regression_coefficients', y= lasso_coef.index , data=lasso_coef)
ax.set(xlabel='Penalized Regression Coeff.')
plt.show()

Изменение альфа вызывает следующие проблемы:

Out: Для лассо (альфа = 0, ...)

ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.

    penalized_regression_coefficients
data    0.62
awesome 0.33
content 0.31
performs    0.05
enter   0.02
great   -0.01

Out: Для лассо (альфа = 0,001, ...)

penalized_regression_coefficients
great   -0.93

Выход: Для Лассо (альфа = 1, ...)

penalized_regression_coefficients
empty

Вопросы:

  • alpha = 0 возвращает ошибку (но значения), а любая другая альфа-настройка почти ничего не возвращает.Учитывая входные данные, даже после удаления стоп-слова, я ожидал бы больше слов с соответствующими положительными и отрицательными весами.Здесь что-то не так?Обратите внимание, что входные данные содержат намеренно повторяющиеся элементы, так как я надеялся таким образом проверить надежность модели.
  • Как правильно интерпретировать значения?Что означают данные = 0,62?
  • Правильно ли я предполагаю, что все отрицательные значения являются предикторами для метки "0", а все положительные значения - предикторами для метки "1"?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Хорошо, вот несколько вещей.

Я вижу, что у вас есть логистическая регрессия, которая не используется в вашем сценарии.Возможно, вы захотите подумать об использовании линейной логистической регрессии v / s.

Код пытается сказать вам, что вблизи альфа = 0 результаты регрессии Лассо ненадежны.Почему это так?Хорошо, если вы перейдете к коду для лассо, вы в конечном итоге достигнете - https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/cd_fast.pyx Строка 516, где происходит сравнение с плавающей точкой.

Что это значит, когда ваша альфа медленно приближается к 0?Ну, это означает, что ваша регрессия похожа на регрессию OLS.Теперь, если ваши коэффициенты быстро исчезают, это означает, что ваши коэффициенты очень слабы при объяснении результатов.

Ваш список TODO - 1. Попробуйте OLS и Logistic, чтобы увидеть, какой из них более уместен 2. Посмотрите наt-статистика и посмотрите, значим ли какой-либо результат. 3. Если ничего не важно, то, возможно, посмотрите, как вы настроили регрессию, возможно, в коде есть ошибка.4. Если какое-либо из понятий неясно, перейдите к курсу, указанному @lwileczek

0 голосов
/ 29 мая 2018

alpha относится к штрафу на эластичной сетке.Вызывается либо lambda, либо alpha.alpha=0 эквивалентно обычным наименьшим квадратам.Коэффициенты регрессии Лассо и коэффициенты силы к 0. Чем меньше коэффициент, тем менее важен он или меньше дисперсия, которую он объясняет.Фактическое значение здесь будет менее важным, так как оно будет использоваться в логистической регрессии, потому что оно в конечном итоге будет использоваться в экспоненциальной.Таким образом, ваше последнее предположение в значительной степени верно там, где вы, если коэффициент является вероятным, тогда эта переменная указывает более высокое значение probability of label 1, в котором каждое вхождение этого слова.

о том, почему ваша регрессия лассо не сходится, вы можете прочитать здесь

Я предлагаю подробнее ознакомиться с методами перед их использованием. Этот курс много говорит о статистике и объясняет, почему и когда использовать регрессию Лассо.Если вы знакомы с OLS , тогда вы можете понять интерпретацию коэффициентов.Если все остальные переменные остаются постоянными, то при каждом увеличении на 1 единицу переменной data можно ожидать, что переменная ответа Y в среднем увеличится на 0,62.Но, как я уже говорил ранее, это приведет к изменению в процентах при использовании в логистическом уравнении.

см. Перекрестная проверка для получения дополнительной помощи по статистике.

...