R2 负值

问题描述 投票:0回答:1

在为模型生成准确度指标时,我返回负 R2 值。该模型在 XGboost 模型中采用主要组件和训练/测试 (80/20)。我无法判断我是否使用了错误的公式或问题出在模型中。该数据集在使用基本多项式回归模型时产生正 R2 值。

MAE、MSE、R2 和调整后的 R2 的公式。我预计 R2 值约为 0.6,但已设法生成负值。

r_squared_list_pc <- lapply(1:length(target_variables), function(i) {
  1 - sum((predictions_list_pc[[i]] - y_test_pc[, i])^2) /
    sum((y_test_pc[, i] - mean(y_test_pc[, i]))^2)
})

adjusted_r_squared_list_pc <- lapply(1:length(target_variables), function(i) {
  n <- length(y_test_pc[, i])
  p <- length(xgb_models_pc[[i]]$model$feature_names)
  1 - ((r_squared_list_pc[[i]]) * (n - 1)) / (n - p - 1)
})

[[i]] 用于迭代多个目标。

r formula xgboost
1个回答
0
投票

以下示例适用于未加权线性回归模型,不确定相同的原理是否适用于 XGBoost 模型。

示例

r_squared <- function(y, fitted, intercept = TRUE){
  resid <- fitted - y
  rss <- sum(resid^2)
  if (intercept){
    mss <- sum((fitted - mean(y))^2)
  } else {
    mss <- sum(fitted^2)
  }
  tss <- rss + mss
  1 - (rss / tss)
}

mod <- lm(Sepal.Width ~ Sepal.Length, data = iris)

r_squared(iris$Sepal.Width, fitted(mod))
[1] 0.01382265

在没有看到您的数据的情况下,您可以尝试这样的操作。

r_squared_list_pc <- lapply(1:length(target_variables), function(i) {
  r_squared(y_test_pc[, i], predictions_list_pc[[i]])
})
© www.soinside.com 2019 - 2024. All rights reserved.