Python pyspark中OneHotEncoder的矢量大小错误
我已尝试在pyspark中检查OneHotEncoder的输出。我在论坛和编码器文档中读到,编码向量的大小将等于正在编码的列中不同值的数量Python pyspark中OneHotEncoder的矢量大小错误,python,pyspark,apache-spark-ml,one-hot-encoding,Python,Pyspark,Apache Spark Ml,One Hot Encoding,我已尝试在pyspark中检查OneHotEncoder的输出。我在论坛和编码器文档中读到,编码向量的大小将等于正在编码的列中不同值的数量 from pyspark.ml.feature import OneHotEncoder, StringIndexer df = sqlContext.createDataFrame([ (0, "a"), (1, "b"), (2, "c"), (3, "a"), (4, "a"), (5, "c") ], ["id", "category"]) st
from pyspark.ml.feature import OneHotEncoder, StringIndexer
df = sqlContext.createDataFrame([
(0, "a"),
(1, "b"),
(2, "c"),
(3, "a"),
(4, "a"),
(5, "c")
], ["id", "category"])
stringIndexer = StringIndexer(inputCol="category", outputCol="categoryIndex")
model = stringIndexer.fit(df)
indexed = model.transform(df)
encoder = OneHotEncoder(inputCol="categoryIndex", outputCol="categoryVec")
encoded = encoder.transform(indexed)
encoded.show()
以下是上述代码的结果
+---+--------+--------------+-------------+
| id|category|categoryIndex| categoryVec|
+---+--------+--------------+-------------+
| 0| a| 0.0|(2,[0],[1.0])|
| 1| b| 2.0| (2,[],[])|
| 2| c| 1.0|(2,[1],[1.0])|
| 3| a| 0.0|(2,[0],[1.0])|
| 4| a| 0.0|(2,[0],[1.0])|
| 5| c| 1.0|(2,[1],[1.0])|
+---+--------+--------------+-------------+
根据categoryVec列的解释,向量的大小为2。鉴于,“类别”列中不同值的数量为3,即a、b和c。请让我了解我在这里遗漏了什么。来自以下文档:
将一列类别索引映射到一列的单热编码器
对于二进制向量,每行最多有一个值
指示输入类别索引。例如,对于5个类别,一个
输入值2.0将映射到输出向量[0.0,0.0,1.0,
0.0]. 默认情况下不包括最后一个类别(可通过dropLast配置),因为它使向量条目总和为一,因此
线性相关。因此,4.0的输入值映射为[0.0,0.0,0.0,
0.0]
因此,对于n
类别,除非将dropLast
设置为False
,否则输出向量的大小将为n-1
。这并没有什么不对或奇怪的地方——只需要n-1
索引就可以唯一地映射所有类别
class pyspark.ml.feature.OneHotEncoder(dropLast=True, inputCol=None, outputCol=None)