如何将使用 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中计算随机森林的训练和测试数据之间的准确性