【问题标题】:Regression model performance fails with a factor having more number of levels回归模型性能因具有更多级别的因子而失败
【发布时间】:2017-08-01 07:02:51
【问题描述】:

我有一个混合数据(定量和分类)来预测一个定量变量。在输入 R 中的 glm 模型之前,我已将分类数据转换为因子。我的数据具有分类变量,其中大多数具有超过 150 个级别。当我尝试将它们提供给 glm 模型时,由于这些因素具有更多级别,它会因内存问题而失败。我们可以设置一个阈值并只接受达到一定数量级别的变量。但是,我需要将这些具有更多层次的因素嵌入到模型中。有没有什么方法可以解决这个问题。

编辑:数据集有 120000 行和 50 列。当使用model.matrix 展开数据时,共有 4772 列。

【问题讨论】:

  • 你能发布错误信息吗?我不清楚这是否与内存有关。
  • 我尝试不设置阈值,RStudio 会话中止。然后,当我探索设置一个阈值以拒绝变量到具有更多级别(> 150)的模型中时,它工作得很好。
  • 如果你的数据是稀疏的,使用稀疏矩阵可能会解决问题(例如包glmnet)。
  • 您有多少观察结果?预测模型矩阵中有多少列:使用类似ncol(model.matrix( outcome ~ . , data=yourdataframe)) 的东西。您是什么意思它因内存问题而失败:您是否收到警告/错误/消息等?
  • 预测模型矩阵有 4772 列。我只是说执行模型需要花费很多时间

标签: r machine-learning regression glm data-science


【解决方案1】:

如果您有大量数据,最简单的做法是从您的矩阵/数据框中采样,然后运行回归。

根据抽样理论,我们知道比例 p 的标准误差等于 sqrt((p(1-p))/n)。因此,如果您有 150 个级别,假设级别中的观察数量是均匀分布的,那么我们希望能够从您的数据集中找到小至 0.005 左右的比例。因此,如果我们采用 10,000 行样本,其中一个因子水平的标准误差大致为:

sqrt((.005*.995)/10000) = 0.0007053368

这并不是您添加到回归估计中的额外方差。尤其是在您进行探索性分析时,从数据中的行中抽样,例如 12,000 行样本,仍然应该为您提供大量数据来估计数量,同时使估计成为可能。将行数减少 10 倍也应该有助于 R 在不耗尽内存的情况下进行估计。双赢。

【讨论】:

    猜你喜欢
    • 2022-06-24
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2020-10-27
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多