Spark MLlib 特征工程系列—特征转换OneHotEncoder

Spark MLlib 特征工程系列—特征转换OneHotEncoder

OneHotEncoder 是 Spark MLlib 中的一个特征转换器,用于将类别型特征转换为一种称为 “独热编码”(One-Hot Encoding)的格式。这种编码方式将每个类别型特征表示为一个二进制向量,其中只有一个元素为 1,其他元素均为 0。这种表示方式在许多机器学习算法中非常有用,尤其是在需要处理类别型数据的场景中。

1. 原理

对于一个类别型特征列,例如 ["cat", "dog", "mouse"]OneHotEncoder 会将其转换为以下形式的独热编码:

  • "cat"[1, 0, 0]
  • "dog"[0, 1, 0]
  • "mouse"[0, 0, 1]

如果特征列中有 N 个不同的类别,那么编码后的向量维度为 N。在 Spark MLlib 中,编码向量的长度实际上是 N-1,因为编码时会自动舍弃一个类别对应的位置来避免多重共线性,这通常用于线性模型中。

多重共线性 是统计学和机器学习中的一个问题,指的是一个特征可以由一个或多个其他特征通过线性组合来近似表达。换句话说,在特征矩阵中,某些特征之间存在高度的线性相关性。这种高度的相关性会导致模型在估计回归系数时不稳定,甚至可能使模型难以得出明确的结论。

N-1 维度的独热编码 是为了避免多重共线性问题。通过去掉一个维度,确保编码后的向量不再是线性相关的,从而使模型在训练和预测时更加稳定和可解释。

多重共线性的影响

  • 不稳定的回归系数:在存在多重共线性的情况下,回归模型可能会对特征的微小变化产生大的回归系数变化,使模型变得不稳定。
  • 难以解释的模型:由于某些特征之间的高度相关性,回归系数的解释性会下降。你可能难以判断每个特征对预测结果的独立贡献。
  • 模型泛化能力下降:多重共线性可能会导致模型过拟合,降低其在新数据上的表现。

如果我们知道下面的2个,另外一个按照规则就已经知道了

"cat"` → `[1, 0, 0]
"dog"` → `[0, 1, 0]
"mouse"` → `[0, 0, 1]

所以这边最好的方式是下面这样

"cat"` → `[1, 0]
"dog"` → `[0, 1]
"mouse"` → `[0, 0]` (默认剩余的类别)

2. 代码示例

以下是使用 StringIndexerOneHotEncoder 将类别型特征转换为独热编码的一个完整代码示例。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值