在多元线性回归 Python 中处理分类变量和数值变量

Posted

技术标签:

【中文标题】在多元线性回归 Python 中处理分类变量和数值变量【英文标题】:Dealing with both categorical and numerical variables in a Multiple Linear Regression Python 【发布时间】:2019-04-25 00:54:30 【问题描述】:

所以我已经使用 sklearn 中的 LinearRegression 在 Python 中执行了多元线性回归。

我的自变量都是数字的(我的因变量也是如此)

但现在我想执行一个结合数值和非数值自变量的多元线性回归。

因此我有几个问题:

如果我对非数值变量使用虚拟变量或 One-Hot,我是否能够从 sklearn 执行线性回归?

如果是,是否需要更改一些参数?

如果没有,我应该如何执行线性回归?

困扰我的一件事是 dummy/one-hot 方法不处理序数变量,对吗? (因为在我看来它不应该以同样的方式编码)

问题是:即使我想编码不同的名义和有序变量, Python 似乎无法区分两者的区别?

这些东西对你来说可能很容易,但现在你可以说我有点困惑,所以我真的可以使用你的帮助!

提前致谢,

亚历克斯

【问题讨论】:

【参考方案1】: 如果我对非数值变量使用虚拟变量或 One-Hot,我是否能够从 sklearn 执行线性回归?

事实上,模型必须专门输入数值数据,因此您必须使用 OneHot 向量作为输入特征中的分类数据。为此,您可以查看 Scikit-Learn 的 LabelEncoder 和 OneHotEncoder。

困扰我的一件事是虚拟/one-hot 方法不处理序数变量,对吧? (因为在我看来,它不应该以同样的方式编码)

是的。正如您提到的单热方法不处理序数变量。使用序数特征的一种方法是创建比例图,并将这些特征映射到该比例。 Ordinal 在这些情况下是一个非常有用的工具。您可以根据提到的预定义比例映射为其提供映射字典。否则,显然它会随机地将整数分配给不同的类别,因为它不知道推断任何顺序。来自文档:

序数编码使用一列整数来表示类。可以传入一个可选的映射字典,在这种情况下,我们使用类本身存在一些真实顺序的知识。否则,假定这些类没有真正的顺序,并且随机选择整数。

希望这会有所帮助。

【讨论】:

谢谢 Alexandre,这绝对有帮助!我现在要看看Ordinal。但至于我的最后一个要点,Python 似乎不可能区分名义变量和有序变量,对吧?所以我猜我有点卡在那里? 没有。 @亚历克斯。只有你知道你的特征是有序的还是名义的,因此你必须做一些预处理步骤才能为你的模型提供有意义的特征。很高兴它有帮助 因此,我无法执行此线性回归。有办法解决吗? 正如我所提到的,您有这两个选项。或者你 OneHot 对你的特征进行编码,但丢失了它们提供的订单信息,看看你的模型是否有所收获;或创建序数特征的映射,以表示尊重分类特征序数的整数。

以上是关于在多元线性回归 Python 中处理分类变量和数值变量的主要内容,如果未能解决你的问题,请参考以下文章

python机器学习回归算法-线性回归

统计学(第六版)11到12单元——学习总结

Python应用实战线性回归(附Python代码)

多元线性回归公式的计算方法?

多元回归分析类型

带有虚拟/分类变量的线性回归