Как я могу применить базовое преобразование с помощью анализа главных компонентов, не пересчитывая каждый ПК каждый раз в Pyspark? - PullRequest
0 голосов
/ 08 января 2020

Я применяю анализ основных компонентов (PCA) с модулем pyspark.ml.feature. Поэтому я хотел бы применить изменение базы к набору данных для заранее определенного числа основных компонентов.

Я хочу найти способ, который позволил бы мне не вычислять все основные компоненты снова каждый раз, когда я изменяю свой параметр k , Чтобы понять это, посмотрите следующий код:

k=10
pca_transformer = PCA(k, inputCol="features",outputCol="PCs")
PCA_model = pca_transformer.fit(train_sd) 
transformation=PCA_model.transform(validation_sd)
transformation.collect()[0].PCs

Мы можем увидеть следующий вывод:

DenseVector([906729.7956, 58266.7591, 55656.027, 22678.8186, -54598.1019, 23932.2139, 17498.1654, -13777.1856, 12617.1475, -2062.214]) 

В строке выше показаны основные компоненты, которые использовались для преобразования.

Теперь моя цель - применить изменение базы данных к набору данных с использованием менее основных компонентов, скажем, 3. Я пытаюсь сделать это с помощью:

params = {PCA_model_bonus.k:3}
transformation=PCA_model_bonus.transform(validation_sd,params)
transformation.collect()[0].PCs 

Вывод, который я получаю: 1014 *

DenseVector([906729.7956, 58266.7591, 55656.027, 22678.8186, -54598.1019, 23932.2139, 17498.1654, -13777.1856, 12617.1475, -2062.214]) 

Что показывает, что преобразование не было выполнено только с первыми тремя компонентами.

Есть ли способ сделать это? Я просто пытаюсь избежать шага тренировки для разных k, поэтому мне не нужно тренировать мою модель для разных уже рассчитанных компонентов.

Заранее спасибо.

Óscar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...