使用caret包和R绘制学习曲线

我想研究模型调优中偏差/方差的最佳权衡。我使用R中的caret包,它允许我绘制性能指标(如AUC、准确率等)与模型超参数(如mtry、lambda等)的关系图,并自动选择最大值。这通常会返回一个不错的模型,但如果我想进一步挖掘并选择不同的偏差/方差权衡,我需要学习曲线,而不是性能曲线。

为了简单起见,假设我的模型是随机森林,只有一个超参数’mtry’。

我想绘制训练集和测试集的学习曲线。类似于这样:

学习曲线

(红色曲线是测试集)

在y轴上放置一个错误指标(如分类错误的样本数量等);在x轴上放置’mtry’或替代地放置训练集大小。

问题:

  1. caret是否有基于不同大小的训练集折叠迭代训练模型的功能?如果我需要手动编写代码,该怎么做?

  2. 如果我想在x轴上放置超参数,我需要caret::train训练的所有模型,而不仅仅是最终模型(经过交叉验证后获得最大性能的模型)。这些“被丢弃”的模型在训练后是否仍然可用?


回答:

在某个时候,可能是在这个问题被提出之后,caret包添加了learning_curve_dat函数,该函数有助于评估模型在不同训练集大小范围内的性能。

这是函数文档中的示例:

library(caret)set.seed(1412)class_dat <- twoClassSim(1000)set.seed(29510)lda_data <- learning_curve_dat(dat = class_dat,                                outcome = "Class",                               test_prop = 1/4,                                ## `train` arguments:                               method = "lda",                                metric = "ROC",                               trControl = trainControl(classProbs = TRUE,                                                         summaryFunction = twoClassSummary))ggplot(lda_data, aes(x = Training_Size, y = ROC, color = Data)) +   geom_smooth(method = loess, span = .8)

性能指标会在每个Training_Size上计算,并与Data变量(”Resampling”、”Training”和可选的”Testing”)一起保存在lda_data中。

这是函数文档的链接:https://rdrr.io/cran/caret/man/learning_curve_dat.html

需要明确的是,这回答了问题的第一部分,但没有回答第二部分。

注意 在至少2020年8月之前,caret包的代码和文档中有一个拼写错误。函数调用之前是learing_curve_dat,后来更正为learning_curve_dat。我已经更新了我的回答以反映这一变化。请确保您使用的是caret包的较新版本。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注