Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyspark中OneHotEncoder的矢量大小错误_Python_Pyspark_Apache Spark Ml_One Hot Encoding - Fatal编程技术网

Python 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

我已尝试在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"])

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)