Я применяю анализ основных компонентов (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