如何将使用 PCA 和随机森林训练的模型应用于测试数据?

Posted

技术标签:

【中文标题】如何将使用 PCA 和随机森林训练的模型应用于测试数据?【英文标题】:How to apply model trained with PCA and Random Forest to test data? 【发布时间】:2016-07-22 19:25:25 【问题描述】:

在解决其中一个机器学习问题时,我正在对训练数据实施 PCA,然后使用 sklearn 对训练数据应用 .transform。观察方差后,我只保留变换数据中方差较大的那些列。然后我正在使用 RandomForestClassifier 训练模型。现在,我很困惑如何将经过训练的模型应用于测试数据,因为测试数据的列数和保留的转换数据(应用随机森林)不同。任何解决方案将不胜感激。

谢谢。

【问题讨论】:

如果您需要有关代码的具体帮助,请提供一个工作示例来解决您遇到的问题。但是,请注意随机森林在高维空间中工作,因此随机森林之前的 PCA 可能不是最好的,因为 PCA 没有考虑目标。使用随机森林,可以看到重要的特征(参见 sklearn scikit-learn.org/stable/auto_examples/ensemble/… 中检查特征重要性的示例)。 如果我使用 PCA 作为第一步,然后使用任何其他算法来训练模型,如何预处理测试数据以使用该模型?我正在使用一个包含 335 列的数据集。通过应用 PCA abd then transform 方法,我保留了 233 列,因为其他列的方差值太小了。然后我将这些数据用于随机森林。下一步是在测试数据上使用它。谢谢。 如果你只在 PCA 降维的训练数据集上训练模型,你在测试数据集上做同样的事情,即你在测试数据集中只保留由 PCA 识别的列。这样,测试数据集的维度就和训练数据集的维度相匹配了。 在应用 PCA 时如何知道哪些列的方差较大? 对不起,我可能不清楚,或者我遗漏了一些东西。在训练模型之前你不是已经找到了高方差的列吗? 【参考方案1】:

如果这是您所寻求的,这是一种方法...理想情况下,您应该在测试和训练中使用相同数量的主要组件...否则会破坏保留集的目的。

pca = PCA(n_components=20)
train_features = pca.fit_transform(train_data)

rfr = sklearn.RandomForestClassifier(n_estimators = 100, n_jobs = 1, 
                                         random_state = 2016, verbose = 1,
                                         class_weight='balanced',oob_score=True)

rfr.fit(train_features)

test_features = pca.transform(test_data)
rfr.predict(test_features)

【讨论】:

以上是关于如何将使用 PCA 和随机森林训练的模型应用于测试数据?的主要内容,如果未能解决你的问题,请参考以下文章

解释文本分类的随机森林模型

随机森林训练占比为多少比较合适

如何在python中计算随机森林的训练和测试数据之间的准确性

初始决策树与随机森林

为啥在使用 PCA 减少后拟合随机森林模型时性能会受到影响?

如何在 Sklearn 的随机森林分类器中将训练模型用于另一个数据集?