R 和 Matlab & Python 之间的随机森林差异



我将三种不同编程语言的随机森林算法应用于同一个伪样本数据集(1000 obs,二进制 1/0 因变量,10 个数字解释变量):

  1. Matlab 2015a(与2012a相同)使用"Treebagger"命令(统计和机器学习工具箱的一部分)
  2. R使用"randomForest"包:https://cran.r-project.org/web/packages/randomForest/index.html
  3. Python 使用 sklearn.ensemble 中的 "RandomForestClassifier": http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

我还尝试在编程语言中保持所有模型参数相同(没有树,整个样本的自举采样,没有在每次拆分时随机采样为候选变量,衡量拆分质量的标准)。

虽然Matlab和Python产生的结果基本相同(即概率),但R的结果却大不相同。

R和

Matlab&Python产生的结果之间的差异可能是什么原因?

我想有一些默认模型参数在 R 中有所不同,我不知道,或者在底层 randomForest 包中硬编码。

我运行的确切代码如下所示:

矩阵:

 b = TreeBagger(1000,X,Y, 'FBoot',1, 'NVarToSample',4, 'MinLeaf',1, 'Method', 'classification','Splitcriterion', 'gdi')
 [~,scores,~] = predict(b,X);

蟒:

 clf = RandomForestClassifier(n_estimators=1000, max_features=4, bootstrap=True)
 scores_fit = clf.fit(X, Y)
 scores = pd.DataFrame(clf.predict_proba(X))

R:

 results.rf <- randomForest(X,Y,  ntree=1000, type = "classification", sampsize = length(Y),replace=TRUE,mtry=4)
 scores <- predict(results.rf, type="prob",
    norm.votes=FALSE, predict.all=FALSE, proximity=FALSE, nodes=FALSE)
当您在

R未提供数据集的情况下对randomForest对象调用predict时,它会返回袋外预测。在其他方法中,您将再次传入训练数据。我怀疑如果你在R版本中这样做,你的概率将是相似的:

 scores <- predict(results.rf, X, type="prob",
    norm.votes=FALSE, predict.all=FALSE, proximity=FALSE, nodes=FALSE)

另请注意,如果您想要无偏概率,则返回 OOB 预测的 R 方法是对训练数据进行预测时的最佳方法。

最新更新