【问题标题】:How to use Principal Component Analysis while predicting?预测时如何使用主成分分析?
【发布时间】:2018-01-31 03:19:21
【问题描述】:

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

我是否需要在预测时申请PCA? 即使我只预测一个数据点,我是否需要这样做?

让我感到困惑的是,当我进行预测时,每个数据点都是二维矩阵中的一行(由我想要预测的所有数据点组成)。所以如果我只对一个数据点应用PCA,那么对应的行向量将被转换为零向量。

【问题讨论】:

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


    【解决方案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 用于训练。然后他们转换训练和测试,然后将模型(在他们的例子中为SVM)应用于转换后的数据。

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

    【讨论】:

    • 但是如果我预测的新样本是单行向量怎么办?那么如果我在单行上使用 PCA,那么该矩阵中的每个元素都将变为零,对吗?
    • @TanmayBhatnagar 查看我更新答案的最后一段。
    猜你喜欢
    • 2017-03-11
    • 2021-07-26
    • 2014-02-15
    • 2021-12-02
    • 2013-08-24
    • 2014-04-08
    • 2020-04-06
    相关资源
    最近更新 更多