线性模型的系数太大/太低

So *_*o S 4 python numpy data-analysis python-3.x scikit-learn

在对词袋实现线性回归模型期间,python 返回了非常大/非常低的值。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]))
Run Code Online (Sandbox Code Playgroud)

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

btw -0.297473967075
land 54662731702.0
landesrekord -483965045.253
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为目标变量在 0 到 5 之间,但因子是如此不同。他们中的大多数都有非常高/低的数字,我只期待像btw.

你有什么想法,为什么结果是这样的?

mpr*_*rat 6

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

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


Ami*_*r F 5

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

如果您的特征高度相关,您可能会遇到问题。例如,每个客户的费用 - jan_expenses, feb_expenses, mar_expenses, Q1_expenses Q1 特征是 1 月到 3 月的总和,因此当你尝试拟合时,你的系数会变得“疯狂”,因为它将很难找到最能描述每月特征和 Q 特征的线。尝试删除高度相关的特征并重新运行。

(顺便说一句,岭回归也为我解决了这个问题,但我很好奇为什么会发生这种情况,所以我挖了一下)