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

时间:2016-01-14 17:30:05

标签: python r matlab machine-learning random-forest

我将三种不同编程语言中的随机森林算法应用于相同的伪样本数据集(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
  4. 我还尝试在编程语言中保持所有模型参数相同(树的数量,整个样本的自举采样,在每次拆分中随机抽样的变量的数量,测量拆分质量的标准)

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

    一方面由R产生的结果与Matlab和Matlab之间产生差异的可能原因可能是什么? Python在另一方面?

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

    我运行的确切代码如下:

    Matlab的:

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

    的Python:

     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)
    

1 个答案:

答案 0 :(得分:4)

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

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

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