Проецирование новых образцов в существующее пространство PCA?

#python #scikit-learn #pca

#python #scikit-learn #pca

Вопрос:

У меня есть набор данных, и я выполнил анализ PCA с использованием scikit-learn . У меня есть другой набор данных с теми же функциями, и я хотел бы спроецировать данные в то же пространство PCA, что и созданный первым набором данных.

Я понимаю, что я должен преобразовать и центрировать данные так же, как исходный набор данных, а затем использовать собственные векторы для поворота данных.

Я немного застрял, чтобы сделать это на основе выходных данных sklearn.decomposition.PCA library .

Пока у меня есть

 X1 = np.loadtxt(fname="dataset1.txt")
pca = PCA(n_components=50)
pca.fit_transform(X1)
pca_result = pca.transform(X1)

X2 = np.loadtxt(fname="dataset2.txt")
  

У кого-нибудь есть какие-либо указания на то, как этого можно достичь?

Ответ №1:

У вас есть некоторая избыточность. Если вы выполняете fit_transform() , он возвращает основные компоненты, сохраняя при этом параметры объекта. Если у вас есть новый образец, вы используете только transform . Смотрите ниже:

 X1 = np.loadtxt(fname="dataset1.txt")
pca = PCA(n_components=50)
Y1 = pca.fit_transform(X1)

X2 = np.loadtxt(fname="dataset2.txt")
Y2 = pca.transform(X2)
  

Комментарии:

1. Спасибо — именно то, что мне было нужно!

Ответ №2:

Установите его, используя первый набор данных, а затем преобразуйте второй, используя подобранную модель.

 X1 = np.loadtxt(fname="dataset1.txt")
pca = PCA(n_components=50) # define model
pca.fit(X1) # fit model
pca_result = pca.transform(X1) # project the dataset 1

X2 = np.loadtxt(fname="dataset2.txt")
pca_results_2 = pca.transform(X2) # project the dataset 2 using the fitted model