r - 为什么 glmnet 中泊松套索回归模型的预测不是整数?
问题描述
我正在对计数结果进行套索回归建模预测器glmnet
。
我想知道该模型的预测结果如何。
这是一些玩具数据。这不是很好,因为我不知道如何模拟多元数据,但我主要感兴趣的是我是否得到了正确的语法。
set.seed(123)
df <- data.frame(count = rpois(500, lambda = 3),
pred1 = rnorm(500),
pred2 = rnorm(500),
pred3 = rnorm(500),
pred4 = rnorm(500),
pred5 = rnorm(500),
pred6 = rnorm(500),
pred7 = rnorm(500),
pred8 = rnorm(500),
pred9 = rnorm(500),
pred10 = rnorm(500))
现在运行模型
x <- model.matrix(count ~ ., df)[,-1]
y <- df$count
cvg <- cv.glmnet(x,y,family = "poisson")
现在当我生成预测结果时
yTest <- predict(cvg, newx = x, family = "poisson", type = "link")
这是输出
# 1 1.094604
# 2 1.094604
# 3 1.094604
# 4 1.094604
# 5 1.094604
# 6 1.094604
# ... ........
现在显然模型预测都是一样的而且都很糟糕(鉴于预测变量和结果之间没有任何关联,这不足为奇),但我想知道的是为什么它们不是整数(对于我的真实数据,我有同样的问题)。
我有几个问题。
所以我的问题是:
我是否在glmnet.predict()
函数中指定了正确的参数?在predict
函数的帮助中,它指出指定type = "link"
给出泊松模型的“线性预测变量”,而指定type = "response"
给出泊松模型的“拟合平均值”(在我的愚蠢示例中,它生成 500 个值2.988
)。
预测结果不应该与数据本身的形式相匹配,即整数吗?
如果我在 predict() 函数中指定了正确的参数,我如何使用非整数预测我将它们四舍五入到最接近的整数,还是不理会它们?
解决方案
预测结果不应该与数据本身的形式相匹配,即整数吗?
当您使用回归模型时,您正在将一个(条件)概率分布lambda
与每个预测变量配置相关联,该概率分布由参数(在泊松情况下为表示均值的参数)索引。响应的预测最小化了一些以预测值为条件的预期损失函数,因此它取决于您使用的损失函数。
如果您考虑 0-1 损失,那么是的,预测值应该是整数:分布的模式,它的最可能值,在 Possion 分布的情况下,lambda
如果它不是整数,则它是下限 ( https://en.wikipedia.org/wiki/Poisson_distribution)。
如果您考虑平方损失(y - y_prediction)^2
,那么您的预测是条件期望(请参阅https://en.wikipedia.org/wiki/Minimum_mean_square_error#Properties),它不一定是整数,就像您得到的结果一样。
glmnet
使用平方损失,但您可以通过将floor()
函数应用于由glmnet
.
推荐阅读
- scons - WSL + Scons:没有这样的文件或目录
- ajax - HTTP 同步性
- jekyll - 在 Liquid (Jekyll) 中比较 forloop.index|modulo:4 和 0
- python - 如何在 python 中调用函数并且不再计算?
- android - Activity 和 Fragment 的不同 WindowSoftInputMode
- android - Android 构建错误:属性签名需要 InnerClasses 属性。检查 -keepattributes 指令
- reactjs - 使用 axios 直接将图片上传到 cloudinary
- react-native - 如何在 React Native 上使用 Pusher 创建用户?
- facebook - 如何升级 Facebook API?
- clickhouse - 新版本 18.10.3 中的 clickhouse 回合错误