某些行中转换为字符串索引的字符串索引为空白(索引未设置为1)?

问题描述 投票:0回答:1

我有一个带有分类列的pyspark数据框,该列通过...被转换为onehot编码的矢量

si = StringIndexer(inputCol="LABEL", outputCol="LABEL_IDX").fit(df)
df = si.transform(df)
oh = OneHotEncoderEstimator(inputCols=["LABEL_IDX"], outputCols=["LABEL_OH"]).fit(df)
df = oh.transform(df)

[之后看数据帧时,我看到一些onehot编码的向量看起来像...

(1,[],[])

我希望稀疏向量看起来像(1,[0],[1.0])(1,[1],[1.0]),但是这里的向量只是零。

任何想法在这里会发生什么?

apache-spark-mllib
1个回答
0
投票

这与mllib中的值编码方式有关。1hot不会像这样对二进制值进行编码...

[1, 0] or [0, 1]

以[这种,那种]方式,而是

[1] or [0]

在稀疏向量格式中,[0]情况看起来像(1,[],[]),这意味着长度= 1,没有位置索引具有非零值,并且(因此)没有非零值要列出(可以了解更多关于mllib如何表示稀疏向量[C0 ])。就像二进制类别只需要一个位来表示两个选择一样,1hot编码在向量中使用单个索引。从另一个here开始编码...

一种热编码非常流行。我们可以用N-1表示所有类别(N =类别的编号),因为这足以对不包含的类别进行编码[... [[但是请注意]进行分类推荐是使用所有N列,因为大多数基于树的算法都基于所有可用的树来构建树]

[如果您不希望onehot编码器删除最后一个类别以简化表示,可以将mllib类设置为dropLast参数,请参见article
© www.soinside.com 2019 - 2024. All rights reserved.