gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:58:13 26 4
gpt4 key购买 nike

我将三种不同编程语言的随机森林算法应用于同一个伪样本数据集(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);

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)

最佳答案

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

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

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

关于python - R 与 Matlab 和 Python 之间的随机森林差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34795988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com