使用随机森林分类器时是否需要有训练、测试和验证集?
我知道它对神经网络很重要,但我不理解它对射频的重要性。我知道有第三组看不见的数据来测试是非常重要的,尤其是使用神经网络,但在RF中,你似乎几乎没有测试或验证数据(我知道在实践中这是不正确的),但理论上,因为森林中的每一棵树都使用了训练数据集的随机样本(替换)。
目前,我遗漏了大约250个样本,因为它们无法从火车和测试集中看到,而且我知道模型会随着额外的数据而改进,那么是否有可能只进行培训和测试,而不指定一个独立的验证集,同时仍然有一个可靠的模型?
发布于 2019-10-08 13:28:09
是否有可能只有培训和测试,而不是指定一个单独的验证集,同时仍然有一个可靠的模型?
好的!您可以在训练集上训练RF,然后在测试集上进行测试。只要模型在培训期间没有看到任何测试数据,这是完全有效的。(或者,更好的是,您可以运行交叉验证,因为RFs是快速培训)
但是,如果您想要调优模型的超参数或进行任何正则化(比如修剪),那么您将需要一个验证集。使用训练集训练,使用验证集进行调优,然后用测试集生成精度估计。
发布于 2019-10-08 16:41:10
如果缺少数据,您可以使用“凭据错误”作为验证错误。
正如您可能知道的,随机森林适合多个决策树,而对于每一棵树,它只适合于一个数据子集。因此,未用于拟合给定树的数据被从包数据中调用,并且可以用作验证集1。
Python中的Sklearn有一个超参数,它是一个不需要处理的错误。
发布于 2020-12-14 19:42:42
现有的答案是不错的,但这里有更多的细节。在他发明随机森林的那张纸中,Breiman将公开计算作为交叉验证的一种替代方法:
因此,使用外泄错误估计不需要留出测试集.
在同一篇论文中,他说OOB可能比简历更可取:
...unlike交叉验证,在存在偏见但其范围未知的情况下,公开的估计是无偏的。
这里有一个更具体的例子。让我们来训练一个基于此数据集的随机森林。
library(conflicted)
library(tidyverse)
library(tidymodels)
library(ranger)
col_factor <- readr::col_factor
telco_raw <- read_csv(
"archive.zip",
col_types = cols(
Churn = col_factor(levels = c("Yes",
"No")),
Dependents = col_factor(levels = c("Yes",
"No")),
PaperlessBilling = col_factor(levels = c("Yes",
"No")),
Partner = col_factor(levels = c("Yes",
"No")),
PhoneService = col_factor(levels = c("Yes",
"No")),
SeniorCitizen = col_factor(levels = c("0",
"1")),
customerID = col_skip(),
gender = col_factor(levels = c("Female",
"Male"))
)
) %>%
na.omit()
telco <- initial_split(telco_raw, prop = 0.8, strata = Churn)
telco_train <- training(telco)
# Since we're only running this once, we can combine testing and assessment
telco_test <- rbind(testing(telco), assessment(telco))
model_ranger <- ranger(Churn ~ ., data = telco_train)从公开的数据中得到的准确性是多少?换句话说,使用从每棵树的训练中排除的数据,模型的准确性是多少?
# OOB accuracy
1 - model_ranger$prediction.error
#0.7965168大约80%。
模型在整个训练数据集上的准确性如何?
# Training data accuracy
accuracy_vec(truth = telco_trainChurn, estimate = model_ranger#qcStackCode#predictions)
#0.7965168完全一样!好吧,但是重要的交叉验证的准确性呢?
# CV accuracy
accuracy_vec(truth = telco_testChurn, predict(model_ranger, data = telco_test)#qcStackCode#predictions)
#0.7921708它有点低,但非常接近我们在训练数据中所看到的。
如果您只训练一次模型而不尝试对其进行调优,您可以使用所有的数据来训练一个随机森林。当我在工作时,我仍然使用简历有三个原因:
https://datascience.stackexchange.com/questions/61418
复制相似问题