赞
踩
OneHotEncoder
是 Spark MLlib 中的一个特征转换器,用于将类别型特征转换为一种称为 “独热编码”(One-Hot Encoding)的格式。这种编码方式将每个类别型特征表示为一个二进制向量,其中只有一个元素为 1,其他元素均为 0。这种表示方式在许多机器学习算法中非常有用,尤其是在需要处理类别型数据的场景中。
对于一个类别型特征列,例如 ["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]` (默认剩余的类别)
以下是使用 StringIndexer
和 OneHotEncoder
将类别型特征转换为独热编码的一个完整代码示例。
<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。