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

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

我已经使用VectorAssembler多次,效果很好。但是今天,我将不需要的数据添加到功能中,如下图所示。

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

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

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

pyspark pyspark-sql feature-extraction apache-spark-ml
1个回答
0
投票

为了解决我的问题,两天后我找到了解决方案。堆栈中有两个帖子,未提供有效的解决方案。

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'))

然后,如果您想将此矩阵转换为Vector pleas,请访问此网站。Convert in Vector,因为在此步骤之后,您可能最终得到的是稀疏矩阵而不是向量,那么在拟合/转换数据时,您会在PCA或其他设备上收到此错误(如下)。

IllegalArgumentException:'要求失败:列pcaFeatures_Norm必须是类型struct,values:array>但实际上是数组。'

© www.soinside.com 2019 - 2024. All rights reserved.