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

时间:2016-03-06 21:18:10

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

在对一包单词实现线性回归模型期间,python返回了非常大/低的值。 OBJS = $(wildcard ./neo/engine/*.cpp) $(wildcard ./neo/engine/**/*.cpp) 包含训练数据中的所有单词。训练数据包含大约400个评论,每个评论少于500个字符,排名在0到5之间。然后,我为每个文档创建了一个单词包。在尝试对所有单词的矩阵执行线性回归时,

train_data_features

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

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

我非常困惑,因为目标变量在0到5之间,但因素是如此不同。他们中的大多数都有非常高/低的数字,我只期望像btw -0.297473967075 land 54662731702.0 landesrekord -483965045.253 那样的值。

你有一个想法,为什么结果就像它们一样?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

检查数据集中的相关功能。

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

(btw Ridge回归也为我解决了这个问题,但是我很好奇为什么会这样,所以我挖了一点)