我有一个问题,与一个惩罚回归模型与拉索和解释返回值。我有文本内容,并希望找到每一个最有预见性的单词为一堂课。
码与数据
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: For 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.01Out: For Lasso(alpha = 0.001,.)
penalized_regression_coefficients
great -0.93Out: For Lasso(alpha = 1,.)
penalized_regression_coefficients
empty问题:
alpha = 0返回一个错误(但值),任何其他alpha设置几乎什么也不返回。考虑到输入的数据,即使在删除停止字之后,我也会期望有更多的单词具有相应的正负权重。这里出什么问题了吗?注意,数据输入有故意重复的元素,因为我希望这样测试模型的可靠性。谢谢!
发布于 2018-05-29 15:07:25
alpha是指弹性网上的惩罚。名为lambda或alpha。alpha=0等价于普通的最小二乘。拉索回归和力系数向0。它解释说,系数越小,其重要性就越小或方差越小。这里的实际值将不那么重要,因为它将用于logistic回归,因为它最终将以指数形式使用。因此,最后一个假设是正确的,如果coeffienct是可能的,那么这个变量表示一个更高的probability of label 1,这个单词的每一个出现。
至于为什么你的拉索回归不收敛,你可以读这里
我建议在使用这些方法之前多读一遍它们。这门课说了很多关于统计,并解释了为什么和何时使用拉索回归。如果您熟悉OLS,那么您可以理解系数的解释。如果所有其他变量保持不变,那么对于1单位变量数据中的每增加一次,您都可以期望响应变量Y平均增加0.62。但正如我先前所说,这将导致在逻辑方程中使用的百分比变化。
有关统计数据的更多帮助,请参见交叉验证。
发布于 2018-05-29 15:14:24
好吧,这里有几件事。
我看到您有逻辑回归,这在您的脚本中没有使用。您可能需要考虑使用线性的v/s logistic回归。
代码试图告诉你,接近alpha=0的拉索回归结果是不可靠的。为什么是这种情况?那么,如果你去编码套索,你最终会到达- fast.pyx线516,那里有一个浮动比较进行。
当你的阿尔法慢慢地走向0是什么意思?这意味着你的回归类似于OLS回归。如果你的系数正在迅速消失,这就意味着你的系数在解释结果时很弱。
您的TODO列表- 1。尝试OLS和Logistic以确定哪一个更合适。2.查看t-统计数据,看看是否有任何结果是有效的。如果没有什么重要的,那么也许看看您如何设置回归,代码中可能会有错误。4.如有任何概念不清楚,可选择@lwileczek所述的课程。
https://stackoverflow.com/questions/50586912
复制相似问题