首页 > 解决方案 > 为什么 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() 函数中指定了正确的参数,我如何使用非整数预测我将它们四舍五入到最接近的整数,还是不理会它们?

标签: rpoissonglmnetlasso-regression

解决方案


预测结果不应该与数据本身的形式相匹配,即整数吗?

当您使用回归模型时,您正在将一个(条件)概率分布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.


推荐阅读