【发布时间】:2016-04-20 03:45:47
【问题描述】:
我将三种不同编程语言中的随机森林算法应用于同一个伪样本数据集(1000 个 obs,二进制 1/0 因变量,10 个数值解释变量):
- Matlab 2015a(与 2012a 相同)使用 “Treebagger” 命令(统计和机器学习工具箱的一部分)
- R 使用 "randomForest" 包:https://cran.r-project.org/web/packages/randomForest/index.html
- 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)
【问题讨论】:
标签: python r matlab machine-learning random-forest