究竟什么是虚拟陷阱?删除一个虚拟功能真的是一种好习惯吗?

数据挖掘 一热编码 虚拟变量
2022-02-28 05:42:40

所以我正在学习一门机器学习课程,本课程解释说,为了避免虚拟陷阱,一种常见的做法是删除一列。它还解释说,由于可以从其他列中推断出已删除列上的信息,因此我们不会因此而失去任何东西。

然而,本课程并没有解释虚拟陷阱到底是什么。它也没有给出任何关于陷阱如何表现的例子。起初,我假设虚拟陷阱只是由于多重共线性而使模型性能不太准确。但后来我读了这篇文章它没有明确提到虚拟陷阱,但它确实讨论了尝试将 OHE 与 OLS 一起使用会导致错误(因为模型试图反转奇异矩阵)。然后它显示了删除一个虚拟功能的做法如何解决这个问题。但随后它继续证明这种措施在实际情况下是不必要的,因为显然正则化也解决了这个问题,并且迭代算法(与封闭式解决方案相反)首先没有这个问题.

所以我现在对“虚拟陷阱”一词背后的确切含义感到困惑。它是专门指这个矩阵求逆错误吗?或者它只是一种让模型得到训练但使其性能变差的效果,与那篇文章中描述的问题完全无关?pd.get_dummies()我尝试在 OHE 编码的数据集(我与参数一起使用)上训练 sklearn LinearRegression 模型drop_first=False以尝试重现虚拟陷阱,后者似乎是这种情况:模型训练成功,但与它相比,它的性能明显更差到在集合上训练的相同模型drop_first=True. 但是我仍然对我的模型为什么能成功训练感到困惑,因为如果这篇文章是可信的,倒置错误应该会阻止它成功训练。

1个回答

主要有两个问题——

  1. 您有一个与所有其他特征相关(多重共线性)的特征。

  2. 如果您尝试使用封闭式解决方案”来解决,则会发生以下情况

y=w0+w1X1+w2X2+w3X3
w0是个y截取并完成矩阵形式 1=X0. 因此,
y=w0X0+w1X1+w2X2+w3X3

解决方案w(XTX)1XTy

所以,X 必须是一个可逆矩阵。但是,
如果模型包含所有值的虚拟变量,则编码列将(按行)累加到截距(X0这里)(见下表)并且这种线性组合将阻止计算矩阵逆(因为它是奇异的)。

X0X1X2X3110010101001

为什么我的模型得到了成功的训练,因为如果这篇文章是可信的,那么转置错误应该会阻止它被成功训练。

有效的问题!Aurelien Geron(“ Hands-On Machine Learning ”的作者在这里回答了
- LinearRegression(Scikit-Learn) 类实际上执行 SVD 分解,它不直接尝试计算 XTdot(X) 的逆。X 的奇异值在singular_ 实例变量中可用,并且X 的等级可用作rank_

关于性能

  • 在实际上很大的数据集中,封闭形式的解决方案不是首选。可以使用迭代方法算法,即梯度下降
  • 多重共线性也不会影响性能,但会影响特征的可解释性。
  • Coeff 根据移除的虚拟对象而变化- 这很明显,因为每个虚拟对象现在都是具有不同贡献级别的特征(基于数据)唯一可以确定的是它们一起产生的效果,而少一个是一样的。
  • 您得到的结果不一致应该是由于其他问题。

虚拟变量陷阱

除了“ Udemy course AZ ML ”之外,我从未听说过这个术语所以我不认为“陷阱”这个词有什么特殊含义,如果你分别理解这些点(奇异性、多重共线性和可解释性)

参考资料 -
www.feat.engineering - Sec#5.1
Sebastian Raschka
stats.stackexchange