如果我认为结果是有序的而不是分类的,我会得到什么?

机器算法验证 物流 多项分布 有序的logit
2022-03-17 05:42:32

序数和分类变量的预测有不同的方法。

我不明白的是,这种区别有多么重要。有没有一个简单的例子可以说明如果我放弃订单会出现什么问题?什么情况下不重要?例如,如果自变量也是分类/有序的,会有区别吗?

这个相关问题侧重于自变量的类型。在这里,我问的是结果变量。

编辑: 我看到使用顺序结构减少了模型参数的数量这一点,但我仍然不太相信。

这是一个示例(取自有序逻辑回归的介绍,据我所知,序数逻辑回归的性能不如多项逻辑回归:

library(nnet)
library(MASS)
gradapply <- read.csv(url("http://www.ats.ucla.edu/stat/r/dae/ologit.csv"), colClasses=c("factor", "factor", "factor", "numeric"))

ordered_result <- function() {
  train_rows <- sample(nrow(gradapply), round(nrow(gradapply)*0.9))
  train_data <- gradapply[train_rows,]
  test_data <- gradapply[setdiff(1:nrow(gradapply), train_rows),]
  m <- polr(apply~pared+gpa, data=train_data)
  pred <- predict(m, test_data)
  return(sum(pred==test_data$apply))
}

multinomial_result <- function() {
  train_rows <- sample(nrow(gradapply), round(nrow(gradapply)*0.9))
  train_data <- gradapply[train_rows,]
  test_data <- gradapply[setdiff(1:nrow(gradapply), train_rows),]
  m <- multinom(apply~pared+gpa, data=train_data)
  pred <- predict(m, test_data)
  return(sum(pred==test_data$apply))
}

n <- 100

polr_res <- replicate(n, ordered_result())
multinom_res <- replicate(n, multinomial_result())
boxplot(data.frame(polr=polr_res, multinom=multinom_res))

它显示了两种算法的正确猜测数(共 40 个)的分布。

polr_vs_multinom

Edit2:当我使用以下评分方法时

return(sum(abs(as.numeric(pred)-as.numeric(test_data$apply)))

并惩罚“非常错误”的预测,polr 看起来仍然很糟糕,即上面的情节没有太大变化。

3个回答

在适当的情况下将 Y 视为序数可以显着提高功率和精度。这是因为模型中的参数数量要少得多(乘以 k 倍,其中 k 比 Y 的类别数量小一)。有几种序数模型。最常用的是比例优势和延续比序数逻辑模型。

如果您忽略变量的有序性质,则适当的方法仍将提供正确的分析,但使用有序数据方法的优势在于它们提供了有关重要变量的顺序和大小的更多信息。

如果要对数据进行建模并且因分类变量没有排序(名义),那么您必须使用多项式 logit 模型。如果因变量确实有排序(序数),那么您可以使用累积 logit 模型(比例赔率模型)。

就我个人而言,我发现与多项模型相比,比例赔率模型的结果更容易解释,尤其是当您想将结果报告给不具备统计学知识的人时。

这些不是您可以使用的唯一模型,但它们非常典型。