2
respostas

Esse primeiro treinamento nao funciona a nao ser que faca algumas conversoes

Isso para mim resolveu ate o proximo treinamento de PCA:

from pyspark.sql.functions import col
from pyspark.ml.feature import StringIndexer, OneHotEncoder, VectorAssembler
from pyspark.ml import Pipeline

# Lista das colunas a serem processadas
colunas = ['valence', 'year', 'acousticness', 'explicit', 'instrumentalness', 'key',
           'liveness', 'loudness', 'mode', 'popularity', 'speechiness', 'tempo']

# Identificar colunas numéricas e categóricas
colunas_numericas = ['valence', 'year', 'acousticness', 'instrumentalness', 'liveness',
                     'loudness', 'popularity', 'speechiness', 'tempo']
colunas_categoricas = ['explicit', 'key', 'mode']

# Converter colunas numéricas de string para double
for coluna in colunas_numericas:
    df_data = df_data.withColumn(coluna, col(coluna).cast('double'))

# Inicializar lista de estágios para o Pipeline
stages = []

# Indexar e codificar colunas categóricas
for coluna in colunas_categoricas:
    indexador = StringIndexer(inputCol=coluna, outputCol=coluna + '_index')
    codificador = OneHotEncoder(inputCol=coluna + '_index', outputCol=coluna + '_vec')
    stages += [indexador, codificador]

# Definir coluna de features para o VectorAssembler
colunas_features = [col + '_vec' for col in colunas_categoricas] + colunas_numericas

# Inicializar o VectorAssembler
assembler = VectorAssembler(inputCols=colunas_features, outputCol='features')
stages += [assembler]

# Construir e ajustar o Pipeline
pipeline = Pipeline(stages=stages)
df_data = pipeline.fit(df_data).transform(df_data)

# Exibir o DataFrame resultante
df_data.show()

Ai no treinamento do PCA, acontece o seguinte erro:

pca = PCA(k=K, inputCol='features_scaled', outputCol='pca_features')
model_pca = pca.fit(dados_musicas_scaler)
dados_musicas_pca = model_pca.transform(dados_musicas_scaler)
IllegalArgumentException: requirement failed: source vector size 3 must be no less than k=12

Consegue ajudar?

2 respostas

Olá Profconrad, tudo bem?

Esse erro, IllegalArgumentException: requirement failed: source vector size 3 must be no less than k=12, indica que você está tentando reduzir para 12 componentes (k=12) um conjunto de dados que possui apenas 3 features. O PCA precisa de pelo menos k features para funcionar. Ele está dizendo que o tamanho do seu vetor de entrada (features_scaled) é 3, enquanto você está pedindo para o PCA gerar 12 componentes principais.

Para resolver esse problema peço que faça algumas verificações:

Verifique se o vetor de entrada para o PCA (features_scaled) realmente contém pelo menos 12 componentes.

Você está usando VectorAssembler para criar um vetor de features. Verifique se todas as colunas necessárias estão sendo incluídas. Você pode imprimir o esquema do DataFrame após a transformação para verificar quais colunas estão presentes.

dados_encoded_vector.select('features').show(truncate=False, n=5)

E verifique se o código correspondente ao escalonamento foi executado corretamente:

scaler = StandardScaler(inputCol='features', outputCol='features_scaled')
model_scaler = scaler.fit(dados_encoded_vector)
dados_musicas_scaler = model_scaler.transform(dados_encoded_vector)

Por fim, recomendo comparar o seu projeto com o do instrutor, e verifique há algum trecho de código faltante.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Ja tinha resolvido, obrigado!