线性模型的系数太large/low

Coefficients of Linear Model are way too large/low

在对一袋词实施线性回归模型时,python 返回了非常 large/low 个值。 train_data_features 包含训练数据中的所有单词。训练数据包含大约 400 条评论,每条评论少于 500 个字符,排名在 0 到 5 之间。之后,我为每个文档创建了一个词袋。在尝试对所有词袋的矩阵执行线性回归时,

from sklearn import linear_model 
clf = linear_model.LinearRegression()
clf.fit(train_data_features, train['dim_hate'])

coef = clf.coef_
words = vectorizer.get_feature_names()

for i in range(len(words)):
    print(str(words[i]) + " " + str(coef[i]))

结果好像很奇怪(只是4000中3的例子)。它显示了为单词创建的回归函数的因素。

btw -0.297473967075
land 54662731702.0
landesrekord -483965045.253

我很困惑,因为目标变量在 0 和 5 之间,但因子却如此不同。他们中的大多数人都有非常 high/low 的数字,而我只期望像 btw.

这样的值

你知道为什么结果是这样吗?

可能是您的模型对数据过度拟合,因为它试图与输出完全匹配。您的担心和怀疑是对的,因为这意味着您的模型可能过度拟合您的数据,并且不会很好地泛化到新数据。您可以尝试以下两种方法之一:

  • 运行 LinearRegression(normalize=True) 看看它是否对系数有帮助。但这只是一个临时解决方案。
  • 改用Ridge regression。它基本上是在做线性回归,除了增加对系数太大的惩罚。

检查数据集中的相关特征。

如果您的特征高度相关,您可能 运行 陷入问题。例如每个客户的费用 - jan_expenses, feb_expenses, mar_expenses, Q1_expenses Q1 特征是 jan-mar 的总和,因此您的系数在尝试拟合时会变为 'crazy',因为很难找到最能描述每月特征和 Q 特征的线。尝试删除高度相关的特征并重新运行。

(顺便说一下,岭回归也为我解决了这个问题,但我很好奇为什么会这样,所以我深入研究了一下)