【问题标题】:Get real predicted values from GLM从 GLM 获取真实的预测值
【发布时间】:2019-03-03 03:29:08
【问题描述】:

我正在使用线性回归运行 GLM,然后我使用 predict 来拟合我的测试数据的响应,但问题是我得到了概率,我不知道如何将这些概率转换为实际值。

log<- glm(formula=stock_out_duration~lag_2_market_unres_dos+lag_2_percentage_bias_forecast_error + forecast,train_data_final,family = inverse.gaussian(link = "log"),maxit=100)
summary(log)


predict <- predict(log, test_data, type = 'response')

table_mat <- table(test_data$stock_out_duration)
table_mat

【问题讨论】:

  • 什么是“真正的价值观”?
  • 我正在预测特定药物的缺货时间。所以我的真实值应该是 12 天、15 天等。
  • 您被误导了,GLM 返回赔率,而不是类别。你需要一个分类算法。
  • stock_out_duration 的数据是什么样的,例如它是一个数字系列,其中 1 = 1 天?
  • 缺货持续时间是一个数值列,其值为 12、17、4 等,用于标识特定药物的缺货持续时间

标签: r glm


【解决方案1】:

据我所知,鉴于您使用的是glm,因此没有一个神奇的功能可以为您执行此操作。正如您所指出的,通常返回的是概率。您可以通过选择具有最大概率的结果将概率转换为对基础类别结果的预测。不过,我同意单行函数会很好。

如果使用glmnet 包,您可以获得此功能。

library(glmnet)
y = ifelse(rnorm(100) > 0, "red", "blue")
y = factor(y)
x = rnorm(100)
fit = glmnet(x, y, family="binomial") # use family="multinomial" if there are more than 2 categories in your factor
yhat = predict(fit, newx=x, type="class", s=0)

上面的yhat 将是一个包含"red""blue" 的向量。

注意,type="class" 是为您提供yhat 中返回的类别结果的位。 s=0 意味着对用于获取预测的系数使用零 lambda 惩罚。您在问题中指出您只是在进行普通回归,没有任何脊或套索式惩罚因素,因此s=0 确保您在预测中得到这一点。

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 2020-03-07
    • 1970-01-01
    • 2019-11-15
    • 2016-06-21
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多