为什么 glmnet 中泊松套索回归模型的预测不是整数?
Why are the predictions from poisson lasso regression model in glmnet not integers?
我正在对 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() 函数中指定了正确的参数,我该如何使用非整数预测我是将它们四舍五入到最接近的整数,还是直接保留他们一个人?
Shouldn't the predicted outcomes match the form of the data itself,
i.e. be integers?
当您使用回归模型时,您正在将(条件)概率分布与每个预测变量配置相关联,该概率分布由参数(在泊松情况下,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
.
我正在对 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() 函数中指定了正确的参数,我该如何使用非整数预测我是将它们四舍五入到最接近的整数,还是直接保留他们一个人?
Shouldn't the predicted outcomes match the form of the data itself, i.e. be integers?
当您使用回归模型时,您正在将(条件)概率分布与每个预测变量配置相关联,该概率分布由参数(在泊松情况下,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
.