【问题标题】:Coefficients of Linear Model are way too large/low线性模型的系数太大/太低
【发布时间】:2016-06-20 08:27:24
【问题描述】:

在对一袋词实施线性回归模型期间,python 返回了非常大/低的值。 train_data_features 包含训练数据中的所有单词。训练数据包含大约 400 个 cmets,每个字符少于 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 之间,但因素却如此不同。他们中的大多数都有非常高/低的数字,我只期望像btw 这样的值。

你有什么想法,为什么结果会像现在这样?

【问题讨论】:

    标签: python python-3.x numpy scikit-learn data-analysis


    【解决方案1】:

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

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

    【讨论】:

    • 我刚试过。似乎,第一个选项没有太大变化。第二个为每个单词提供了不错的小值。这似乎是个好主意。但我必须详细检查岭回归在做什么,以了解差异。感谢您的帮助。
    • 为了重新格式化 train_data_features 我正在使用包 re.一旦我将德语变音符号“Ü”作为大写字母添加到允许的字符集中,模型就会过度拟合结果。所有其他元音变音(äöüÄÖ)不会引起同样的问题。后台发生了什么?
    • 为什么要重新格式化train_data_features?当您使用RidgeRegression 时,您可能还需要使用C 值以免过度拟合。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 2011-01-04
      • 2018-03-04
      • 1970-01-01
      • 2019-03-09
      相关资源
      最近更新 更多