解读拉索回归结果

时间:2018-05-29 14:28:36

标签: python scikit-learn regression lasso

我有一个与Lasso的惩罚回归模型有关的问题,并解释了返回值。我有文本内容,想要找到每个类最具预测性的单词。

代码和数据

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()

更改alpha会导致以下问题:

Out:对于Lasso(alpha = 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:对于Lasso(alpha = 0.001,...)

penalized_regression_coefficients
great   -0.93

Out:对于Lasso(alpha = 1,...)

penalized_regression_coefficients
empty

问题:

  • alpha = 0返回错误(但值),任何其他alpha设置几乎不返回任何内容。考虑到输入数据,即使在删除停用词后,我也会期望更多的单词具有相应的正负权重。这里有问题吗?请注意,数据输入具有故意重复的元素,因为我希望以这种方式测试模型的可靠性。
  • 如何正确理解这些值?数据= 0.62是什么意思?
  • 我是否正确地假设所有负值都是标签“0”的预测值,所有正值都是标签“1”的预测值?

谢谢!

2 个答案:

答案 0 :(得分:1)

alpha是指弹性网上的惩罚。称为lambdaalphaalpha=0相当于普通的最小二乘法。套索回归和力系数趋向于0.系数越小,它就越不重要,或者解释的方差越小。这里的实际值不太重要,因为它将用于逻辑回归,因为它最终会以指数形式使用。所以你最后的假设是非常正确的,如果系数是正确的,那么该变量表示每个出现该单词的probability of label 1更高。

至于你的套索回归为什么不会收敛,你可以阅读here

我建议在使用之前更多地阅读这些方法。 This course谈论了很多关于统计数据的内容,并解释了为什么以及何时使用套索回归。如果您熟悉OLS,那么您可以理解系数的解释。如果所有其他变量保持不变,则对于1个变量数据的每个增加,您可以预期响应变量 Y 平均增加0.62。但正如我之前所说,这将导致在逻辑方程中使用时的百分比变化。

请参阅Cross Validation以获取有关统计数据的更多帮助。

答案 1 :(得分:1)

好的,这里有一些事情。

我发现您的逻辑回归在脚本中没有使用。您可能想要考虑使用线性v / s逻辑回归。

代码试图告诉你接近alpha = 0,Lasso回归结果不可靠。为什么会这样?好吧,如果你去套索的代码,你最终会到达 - this answer第516行,在那里进行浮动比较。

当你的alpha慢慢走向0时,这是什么意思?那么这意味着你的回归类似于OLS回归。现在,如果你的系数很快消失,那就意味着你的系数在解释结果时非常弱。

您的TODO列表 - 1.尝试使用OLS和Logistic来查看哪一个更合适 2.查看t统计数据,看看是否有任何重要结果 3.如果没有什么重要,那么可以看看如何设置回归,代码中可能存在错误。 4.如果任何概念不清楚,请转到@lwileczek提到的课程