Spark中一键编码列的下降级别

时间:2018-12-16 05:32:38

标签: python apache-spark pyspark apache-spark-ml one-hot-encoding

如果我已经有一个由OneHotEncoderEstimator创建的列,如何动态删除其中一个级别?

假设您有一列具有4个级别的列(出于相关性考虑而删除了一个列),而您想删除第二个级别(即,将其放置在截距中)。

所以从类似的地方走

row, fruit , encoded
1  , apple , [1, 0, 0]
2  , orange, [0, 1 ,0]
3  , pear  , [0, 0, 1]

row, fruit , encoded
1  , apple , [1, 0]
2  , orange, [0, 1]
3  , pear  , [0, 0]

挑战之一是OneHotEncoderEstimator为每一行返回一个SparseVector。我什至不知道如何删除向量的“正确”索引,因为我所拥有的只是列名和级别。

我知道我可以删除行并重新编码,但是我正试图避免这种情况。

有人知道如何在Python / Spark 2.3中做到这一点吗?

编辑

因此,我想澄清一下,“已编码”列是稀疏矩阵(或者是SparseVector对象的列)。

请参阅: https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.mllib.linalg.SparseVector

这里的一些答案讨论了Spark中稀疏向量与密集向量之间的区别:

Sparse Vector vs Dense Vector

0 个答案:

没有答案