【发布时间】:2018-04-12 20:20:55
【问题描述】:
下面的代码在 R 和 python 中训练一个随机森林模型。如您所见,R (1-0.27=0.73) 的准确度比 Python (0.69) 好。此外,特征的重要性在 R 和 Python 中是不同的。
[编辑] 有没有办法在 python 中复制 R 结果,或者有些事情是失控的?一些可调参数在两个库中是不同的,因此很难进行匹配。
还有其他人从 Pyhton 和 R 的随机森林中得到不同的结果吗?有什么区别?
R代码:
library(randomForest)
mydata=read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
mydata$admit=factor(mydata$admit)
rf = randomForest(admit~gre+gpa+rank, mydata, ntree=1000,
importance=TRUE, replace=TRUE)
print(rf)
print(rf$importance)
输出:
Call:
randomForest(formula = admit ~ gre + gpa + rank, data = mydata,
ntree = 1000, importance = TRUE, replace = TRUE)
Type of random forest: classification
Number of trees: 1000
No. of variables tried at each split: 1
OOB estimate of error rate: 28.5%
Confusion matrix:
0 1 class.error
0 254 19 0.06959707
1 95 32 0.74803150
0 1 MeanDecreaseAccuracy MeanDecreaseGini
gre 0.01741400 0.01209596 0.01566284 31.45256
gpa 0.02565179 0.02467486 0.02527394 43.32355
rank 0.02570388 0.04844323 0.03283692 18.15780
Python 代码
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import numpy as np
from sklearn.metrics import confusion_matrix
mydata=pd.read_csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
train_data = mydata[ ["gre","gpa","rank"]]
train_label = mydata.admit
rfs = RandomForestClassifier(n_estimators=1000,oob_score=True,bootstrap=True)
rfs.fit(train_data,train_label)
print(rfs.oob_score_)
pred=np.round(rfs.oob_decision_function_[:,1])
real=train_label
confusion_matrix(real, pred)
rfs.feature_importances_
输出:
RandomForestClassifier(bootstrap=True,
class_weight=None, criterion='gini',
max_depth=None, max_features='auto', max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=1000, n_jobs=1,
oob_score=True, random_state=None, verbose=0,
warm_start=False)
0.6925
>>> >>> >>> array([[229, 44],
[ 79, 48]])
array([ 0.34573918, 0.53783772, 0.11642309])
我在Difference between random forest implementation 发现了一个类似的问题,它链接到不同的基准...
【问题讨论】:
-
所以你的问题是......?你想知道为什么会有差异吗?
-
看起来 randomForest 默认值在这个特定数据上比 sklearn 默认值更好。我不会读到比这更多的内容。
标签: python r random-forest