在R语言的caret包中如何更改模型内的分类阈值?

我想更改模型的阈值,并查看了类似于Cross Validated讨论区中的帖子如何在R中更改randomForests的分类阈值?

如果在创建模型后更改阈值,这意味着我将不得不再次调整测试数据或新数据的设置。

在R语言和caret包中,有没有办法可以在模型内部更改阈值,以便我可以用相同的阈值在新数据或测试数据上运行相同的模型?


回答:

在像随机森林这样的概率分类器中,模型拟合过程中并不涉及任何阈值,也没有与已拟合模型相关的阈值;因此,实际上没有任何东西可以更改。正如CV讨论区中正确指出的降低分类概率阈值

选择一个阈值来将新观察分类为1或0不再是统计的一部分。这是决策组件的一部分。

引用我在更改随机森林分类器的阈值中的回答:

在模型训练过程中根本没有阈值;随机森林是一个概率分类器,它只输出类别概率。“硬”类别(即0/1),确实需要阈值,既不产生也不在模型训练的任何阶段使用 – 只有在预测时,并且即使在这种情况下,也只有在我们确实需要硬分类时(并非总是如此)。请参阅预测类别或类别概率?以获取更多详情。

因此,如果你从一个拟合模型(假设为rf)中生成预测,并使用参数type = "prob",如你所链接的CV讨论区中所示:

pred <- predict(rf, mydata, type = "prob")

这些预测将是[0, 1]范围内的概率值,而不是硬类别0/1。从这里开始,你可以自由选择阈值,如那里的答案所示,即:

thresh <- 0.6  # 在[0, 1]范围内的任何所需值class_pred <- c()class_pred[pred <= thresh] <- 0class_pred[pred >  thresh] <- 1

当然,你也可以尝试不同的阈值,而无需更改模型本身的任何内容。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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