VectorAssembler 的错误格式将不需要的值赋予特征

Bad formation of VectorAssembler giving unwanted values into features

我用过 VectorAssembler 很多次,效果很好。但是今天我得到了不需要的数据到特征中,如下图所示。

输入是来自 pySpark 数据帧的 4 个不带 NaN 的特征。

assembler = VectorAssembler(inputCols = descritif.columns, outputCol = 'features')
pcaFeatures = assembler.transform(descritif).select('features')
pcaFeatures.show(truncate=False)

为什么我在功能列的每一行之前都有 (5,[0,1],这正常吗? 影响学习吗?

两天后我找到了解决方案来解决我的问题。堆栈中有两个post没有给出有效的解决方案。

1 - 首先应用这个udf函数来转换数据。

函数

from pyspark.sql import functions as F
from pyspark.sql import types as T
from pyspark.ml.linalg import SparseVector, DenseVector

def sparse_to_array(v):
  v = DenseVector(v)
  new_array = list([float(x) for x in v])
  return new_array

sparse_to_array_udf = F.udf(sparse_to_array, T.ArrayType(T.FloatType()))

2 - 然后将其应用于数据。
# 转换

df = pcaFeatures.withColumn('features_array', sparse_to_array_udf('features'))

然后,如果您想将此矩阵转换为向量,请访问此网站。 Convert in Vector 因为在这一步之后你可能会得到一个稀疏矩阵而不是向量然后你会在 PCA 或其他 fitting/transform 数据时得到这个错误(如下)。

IllegalArgumentException: 'requirement failed: Column pcaFeatures_Norm must be of type struct,values:array> but was actually array.'