在多元线性回归 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 中处理分类变量和数值变量的主要内容,如果未能解决你的问题,请参考以下文章