为什么添加分类数据后线性回归会失败?

数据挖掘 Python 线性回归 分类数据
2021-10-10 18:47:11

基于训练集,我们对一些都是数字的属性应用了简单的线性回归。

现在我们在类别方面有了更多的属性,当然我们应用了 one-hot-encoding 将类别转换为二进制属性

以这个简单的python代码为例:

X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.8, test_size=0.2)

model = LinearRegression(normalize=True).fit(X_train, y_train)

printErrorMetrics(trueTargets=y_test, predictions=model.predict(X_test))

当表 X 仅具有原始数字属性时,来自 printErrorMetrics 函数(RMSE 等)的分数都足够好

在添加 one-hot-encoded 类别后,我们期待更好的结果,但结果非常糟糕,以至于该方法似乎不起作用。

我们错过了什么吗?

添加 one-hot-encoded 列/属性后,我们是否需要对数据进行预处理?

1个回答

一个可能的原因是,当您对分类数据使用 one-hot-encoding 时,您应该将函数中的 intercept 属性设置为 False:

model = LinearRegression(fit_intercept=False, normalize=True).fit(X_train, y_train)

这将避免虚拟变量陷阱: http ://www.algosome.com/articles/dummy-variable-trap-regression.html

您还可以使用虚拟编码来避免此问题: http ://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html