首页 > 解决方案 > 为什么在我的训练集中找不到我的随机森林回归预测值?(右)

问题描述

我有一个线性回归随机森林模型,可以从一组变量中预测植物高度。

training <- read.csv('/sers/me/Desktop/training_data.csv')

rf_model <- randomForest(height ~ EVI + NDVI + Annual_Mean_Temperature + Annual_Precipitation + Precipitation_of_Wettest_Month, data = training, importance=TRUE, na.action = na.roughfix)

但是,当我查看预测值时,我看到了一些负数,尽管我的训练数据集中没有因变量的负值——因为我正在预测植物高度,所以负值在物理上是不可能的。

> min(rf_model$predicted)
  -4.433786671143025159836e-12

我检查了我的训练集,这里没有负值,所以这怎么可能/我该怎么办?

> min(training$height)
  0
  

标签: rlinear-regressionrandom-forest

解决方案


首先,您在此处列出的负数非常小,即使您不四舍五入到小数点后第 11 位或第 12 位,也等于 0,因此您可能可以将该拟合值视为 0。

其次,在没有某种转换的情况下,线性回归中响应变量的范围是整条实线。系数是根据最小化损失函数(基本情况下的平方和)来选择的,因此模型并不真正关心它是否会产生与原始响应不在完全相同的范围内的拟合值。

以这个错误指定的模型为例。我们知道数据生成过程需要 Y 为正数,但一个简单的线性模型会创建负拟合值,以便在数据中画出最佳线:


set.seed(0)
n <- 1000
x <- rnorm(n)
y <- exp(x + rnorm(n))

data.frame(x, y) %>%
  ggplot(aes(x, y)) +
  geom_point() +
  geom_smooth(method = 'lm')

在此处输入图像描述

为了限制您的响应范围,您可以对其进行转换,这就是GLMs背后的想法。例如,如果您取响应变量的对数然后拟合模型,则必须对结果拟合值取幂才能使它们恢复到原始尺度,这保证它们是正的。


推荐阅读