簡體   English   中英

如何在 R 中獲得隨機森林中的 Brier 分數?

[英]How to obtain Brier Score in Random Forest in R?

我無法獲得機器學習預測模型的 Brier 分數。 結果“y”是分類的(1 或 0)。 預測變量是連續變量和分類變量的混合體。

我已經創建了四個具有不同預測器的模型,在這里我將它們稱為“model_1”-“model_4”(預測器除外,其他參數相同)。 我的 model 的示例代碼是:

Model_1=rfsrc(y~ ., data=TrainTest, ntree=1000,
         mtry=30, nodesize=1, nsplit=1, 
         na.action="na.impute", nimpute=3,seed=10,
         importance=T)

當我在 R 中運行“Model_1”function 時,我得到了結果: 在此處輸入圖像描述

我的問題是我怎樣才能得到這 412 人的預測可能性? 以及如何找到每個人的觀察概率? 我需要手工計算嗎? 我在“DescTools”package 中找到了 function BrierScore()

但是我嘗試了“ BrierScore(Model_1) ”,它沒有給我任何結果。

我添加的代碼:

library(scoring)
library(DescTools)
BrierScore(Raw_SB)
class(TrainTest$VL_supress03)

TrainTest$VL_supress03_nu<-as.numeric(as.character(TrainTest$VL_supress03))
class(TrainTest$VL_supress03_nu)


prediction_Raw_SB = predict(Raw_SB, TrainTest)

BrierScore(prediction_Raw_SB, as.numeric(TrainTest$VL_supress03) - 1)
BrierScore(prediction_Raw_SB, as.numeric(as.character(TrainTest$VL_supress03)) - 1)
BrierScore(prediction_Raw_SB, TrainTest$VL_supress03_nu - 1)

我嘗試了一些代碼:有很多錯誤消息:

在此處輸入圖像描述

我對您的方法所做的一個假設是,您希望根據您訓練 model 的數據計算 BrierScore(這通常不是正確的方法,如果您需要更多信息,請使用谷歌訓練測試拆分)。 一般來說,因此您應該反思您的方法是否正確。

DescTools中的BrierScore方法僅具有用於glm模型的定義方法,否則,它期望輸入一個預測概率向量和一個真實值向量(參見?BrierScore )。

您需要做的是使用以下方法預測您的數據:

prediction = predict(model_1, TrainTest, na.action="na.impute")

然后使用計算brier分數

BrierScore(as.numeric(TrainTest$y) - 1, prediction$predicted[, 1L])

(請注意,我們將TrainTest$y轉換為 0 和 1 的數字向量以計算 brier 分數。)

注意randomForestSRC package 還會在您調用print(prediction)時打印標准化的 brier 分數。

一般而言,使用 R(mlr3、tidymodels、caret)中可用的機器學習工作台之一可能會為您簡化這種方法並防止在這個方向上出現很多錯誤。 這是一個非常好的做法,特別是如果您在 ML 方面經驗不足,因為它可以防止許多錯誤。

有關更多信息,請參見mlr3 書中的這一章

作為參考,這里有一些使用mlr3 package 的非常相似的代碼,它也自動處理了訓練測試拆分。

data(breast, package = "randomForestSRC") # with target variable "status"
library(mlr3)
library(mlr3extralearners)
task = TaskClassif$new(id = "breast", backend = breast, target = "status")
algo = lrn("classif.rfsrc", na.action = "na.impute", predict_type = "prob")
resample(task, algo, rsmp("holdout", ratio = 0.8))$score(msr("classif.bbrier"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM