繁体   English   中英

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

[英]Random Forest discrepancy between R and 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包中进行了硬编码。

我运行的确切代码如下:

Matlab的:

 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)

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

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

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

暂无
暂无

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

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