繁体   English   中英

R:使用 PCA 数据训练随机森林

[英]R: training random forest using PCA data

我有一个名为Data的数据集,具有 30 个缩放和居中特征和 1 个结果,列名为OUTCOME ,引用 700k 记录,以data.table格式存储。 我计算了它的 PCA,并观察到它的前 8 个分量占方差的 95%。 我想在h2o训练一个随机森林,所以这就是我所做的:

Data.pca=prcomp(Data,retx=TRUE) # compute the PCA of Data
Data.rotated=as.data.table(Data.pca$x)[,c(1:8)] # keep only first 8 components
Data.dump=cbind(Data.rotated,subset(Data,select=c(OUTCOME))) # PCA dataset plus outcomes for training

这样我就有了一个数据集Data.dump ,其中我有 8 个在 PCA 组件上旋转的特征,并且在每条记录上我都关联了它的结果。

第一个问题:这合理吗? 或者我必须以某种方式排列结果向量? 还是这两件事无关?

然后我分裂Data.dump两套, Data.train培训和Data.test进行测试,所有as.h2o 我将它们喂给随机森林:

rf=h2o.randomForest(training_frame=Data.train,x=1:8,y=9,stopping_rounds=2,
                    ntrees=200,score_each_iteration=T,seed=1000000)
rf.pred=as.data.table(h2o.predict(rf,Data.test))

发生的情况是rf.pred似乎与原始结果Data.test$OUTCOME不太相似。 我也试图训练一个神经网络,甚至没有收敛,导致 R 崩溃。

第二个问题:是不是因为我在PCA治疗中犯了一些错误? 还是因为我错误地设置了随机森林? 或者我只是在处理烦人的数据?

我不知道从哪里开始,因为我是数据科学的新手,但工作流程对我来说似乎是正确的。

非常感谢。

你的第二个问题的答案(即“是数据,还是我做错了什么”)很难知道。 这就是为什么您应该始终首先尝试制作基线模型,以便您了解数据的可学习性。

基线可以是h2o.glm() ,和/或它可以是h2o.randomForest() ,但无论哪种方式都没有 PCA 步骤。 (你没有说你是在做回归还是分类,即OUTCOME是数字还是因子,但 glm 和随机森林都可以。)

回到你的第一个问题:是的,这是一件合理的事情,不,你不必(事实上,不应该)涉及结果向量。

回答你的第一个问题的另一种方式是:不,这是不合理的。 可能随机森林本身可以看到所有关系,而无需您使用 PCA。 请记住,当您使用 PCA 来减少输入维度的数量时,您也会丢弃一些信号。 您说 8 个分量仅捕获了 95% 的方差。 因此,您正在丢弃一些信号以换取更少的输入,这意味着您以牺牲预测质量为代价来优化复杂性。

顺便说一句,连接原始输入和您的 8 个 PCA 组件是另一种方法:您可以通过提供有关数据的提示获得更好的模型。 (但你可能不会,这就是为什么在尝试这些更奇特的想法之前首先获得一些基线模型是必不可少的。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM