如何在预测时使用主成分分析?

时间:2017-08-22 18:14:05

标签: python-3.x machine-learning scikit-learn pca

假设我的原始数据集有8个功能,我将PCA应用于n_components = 3(我正在使用sklearn.decomposition.PCA)。然后我使用这3个PCA组件(现在是我的新功能)训练我的模型。

我还需要在预测时应用PCA吗? 即使我只预测一个数据点,我还需要这样做吗?

令我困惑的是,当我做预测时,每个数据点都是2D矩阵中的一行(由我想要预测的所有数据点组成)。因此,如果我仅对一个数据点应用PCA,则相应的行向量将转换为零向量。

1 个答案:

答案 0 :(得分:1)

如果您将模型安装在PCA的前三个组件上,则必须适当地转换任何新数据。例如,请考虑从here获取此代码:

pca = PCA(n_components=n_components, svd_solver='randomized',
          whiten=True).fit(X_train)

X_train_pca = pca.transform(X_train)
X_test_pca = pca.transform(X_test)


clf = GridSearchCV(SVC(kernel='rbf', class_weight='balanced'), param_grid)
clf = clf.fit(X_train_pca, y_train)

y_pred = clf.predict(X_test_pca)

在代码中,他们首先将PCA放在trainig上。然后他们转换训练和测试,然后他们将模型(在他们的情况下,SVM)应用于转换后的数据。

即使您的X_test仅包含1个数据点,您仍然可以使用PCA。只需将数据转换为2D矩阵即可。例如,如果您的数据点是[1,2,0,5],那么X_test=[[1,2,0,5]]。也就是说,它是一个有1行的2D矩阵。