【发布时间】:2021-12-31 14:10:51
【问题描述】:
我使用相同的数据在 R 和 Python 中进行随机森林回归,但我得到的 R2 值非常不同。我知道超参数可能是这背后的一个原因,但我认为它不会导致 R2 分数几乎减半。我正在使用以下代码并获得相应的结果。
在 Python 中 -
X = data.drop(['response'],axis=1)
y = data['response']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.05, random_state = 42)
rdf = RandomForestRegressor(n_estimators=500,oob_score=True)
rdf.fit(X_train, y_train)
print("Random Forest Model Score (on Train)" , ":" , rdf.score(X_train, y_train)*100 , "," ,
"Random Forest Model Score (on Test)" ,":" , rdf.score(X_test, y_test)*100)
y_predicted = rdf.predict(X_train)
y_test_predicted = rdf.predict(X_test)
print("Training RMSE", ":", rmse(y_train, y_predicted),
"Testing RMSE", ":", rmse(y_test, y_test_predicted))
>Random Forest Model Score (on Train) : 92.2312123 , Random Forest Model Score (on Test) : 78.1812321
>Training RMSE : 5.606443558164292e-06 Testing RMSE : 9.59221499904858e-06
在 R 中 -
> rows <- sample(0.95*nrow(data))
> train_random <- data[rows,]
> test_random <- data[-rows,]
> rf_model <- randomForest(response ~ . ,
data = train_random,
keep.forest=TRUE,
importance=TRUE
)
> rf_model
Call:
randomForest(formula = response ~ ., data = train_random, keep.forest = TRUE, importance = TRUE)
Type of random forest: regression
Number of trees: 500
No. of variables tried at each split: 6
Mean of squared residuals: 1.437236e-06
% Var explained: 42.05
> pred_train <- predict(rf_model,train_random)
> pred_test <- predict(rf_model,test_random)
> R2_Score(pred_train, train_random$response)
[1] 0.9014311
> R2_Score(pred_test, test_random$response)
[1] 0.3616823
我知道测试列车拆分不会导致相同的拆分,但为什么我会得到如此明显不同的 R2 值以及在 R 中执行相同随机森林的方法是什么。我尝试使用相同的超参数我是从 Python 获得的,但它并不能帮助我在 R 中获得相同的 R2 值。有人可以帮我吗?
【问题讨论】:
-
有一个随机分量。您是否尝试过使用不同的随机种子多次运行 R 和 Python?
-
您在随机森林中有一个随机组件。正如我从您的代码中可以看出的那样,您的 train:test 拆分中也有一个随机组件。尝试将脚本(数据拆分)重复 100 次,然后查看 R2 的分布情况。 (我认为在这里设置种子对您没有帮助)
-
我同意你所说的,但它有多大不同。 R2 的输出几乎是我在 Python 中获得的一半。我已经多次运行这两种代码,但两种情况下的 R2 都保持在相同的水平。
-
参数也不一样。您唯一对齐的是 500 棵树。树的深度、叶子的大小……
-
我已经在 Python 中获取了随机森林模型的参数,并在 R 中使用了它们,但这并没有帮助。您能帮我将参数从 Python 映射到 R 吗?
标签: python r random-forest