在为模型生成准确度指标时,我返回负 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]] 用于迭代多个目标。
以下示例适用于未加权线性回归模型,不确定相同的原理是否适用于 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]])
})