Плохое формирование VectorAssembler, дающего нежелательные значения в функции - PullRequest
1 голос
/ 09 января 2020

Я использовал VectorAssembler много раз, что работало хорошо. Но сегодня я получил нежелательные данные в функции, как показано ниже на рисунке.

Входные данные - это 4 функции без NaN, которые взяты из фрейма данных pySpark.

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

Почему у меня (5,[0,1] перед каждой строкой в ​​столбце функций, это нормально? Влияет ли это на обучение? vector

1 Ответ

0 голосов
/ 09 января 2020

Чтобы решить мою проблему через два дня, я нашел решение. В стеке два поста, которые не дали эффективного решения.

1 - Первый применил эту функцию udf для преобразования данных.

function

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 - Затем примените его к данным.
# convert

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

Тогда Если вы хотите преобразовать эту матрицу в Vector pleas посетите этот сайт. Преобразовать в вектор , поскольку после этого шага вы можете получить разреженную матрицу, а не вектор, тогда вы получите эту ошибку (ниже) на PCA или другой при подборе / преобразовании данных.

IllegalArgumentException: 'требование не выполнено: столбец pcaFeatures_Norm должен иметь тип struct, values: array>, но фактически был массивом.'

...