r - 为什么在我的训练集中找不到我的随机森林回归预测值?(右)
问题描述
我有一个线性回归随机森林模型,可以从一组变量中预测植物高度。
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
解决方案
首先,您在此处列出的负数非常小,即使您不四舍五入到小数点后第 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背后的想法。例如,如果您取响应变量的对数然后拟合模型,则必须对结果拟合值取幂才能使它们恢复到原始尺度,这保证它们是正的。
推荐阅读
- reactjs - react.js 中的“未找到 GSAP 目标”,动画在热重载时自行发生
- javascript - 搜索栏:使用从 Firestore 获取的数据从表中搜索术语
- android - 数据未显示在回收站视图中
- c# - C# 泛型错误,抱怨它不能在相同的元组类型之间转换
- php - 解析错误:语法错误,意外 (T_CONSTANT_ENCAPSED_STRING)
- c# - 此代码块需要太多时间来执行 C#
- amazon-web-services - 如何从 netlify 撤销域管理?
- frontend - 构建仪表板的最佳方法是什么?
- dart - 在运行时识别返回类型为 void 的函数
- javascript - js在父类方法中使用反射创建子类