【问题标题】:sparse.model.matrix loses rows in Rsparse.model.matrix 在 R 中丢失行
【发布时间】:2015-06-26 06:48:00
【问题描述】:

我正在研究常规的data.frame,这对于glm 函数来说看起来很大,所以我决定我将研究模型矩阵的稀疏表示,这样我就可以将这个稀疏矩阵放入glmnet功能。但是sparse.model.matrix 看起来像是从原始矩阵中删除了一些行。知道为什么会发生这种情况以及如何避免这种情况的任何解决方案吗? 代码如下:

> mm <- sparse.model.matrix(~clicks01+kl_tomek*bc1+hours+plec+1, 
data = daneOst)
> dim(mm)
[1] 1253223     292
> dim(daneOst)
[1] 1258836       6

【问题讨论】:

    标签: r matrix sparse-matrix


    【解决方案1】:

    我已经成功地将na.action 更改为na.pass,这包括我的矩阵中的所有行:

    options(na.action='na.pass')
    

    请注意,这是一个全局选项,因此您可能希望在之后将其设置回原始值,以免与您的其余代码混淆。

    previous_na_action <- options('na.action')
    options(na.action='na.pass')
    # Do your stuff...
    
    options(na.action=previous_na_action$na.action)
    

    来自this 答案的解决方案。

    【讨论】:

    • 请注意,我将它用于可以处理 NA 值的基于树的模型。 YMMV
    • 我认为这是迄今为止最好的解决方案。这就是为什么我接受这个作为答案。
    【解决方案2】:

    这是由于 NA 的!

    运行sum(complete.cases(mm))。我敢打赌它也会给你 1253223。

    因此,将数据框中的 NA 替换为一个值(例如“IMPUTED_NA”或 -99999),然后重试。

    【讨论】:

      【解决方案3】:

      @WillemM 是正确的。 NAs 的存在将触发稀疏矩阵。对于大数据集,最好的方法是将您的文件读入带有stringsAsFactors=FALSE 的数据框,然后选择您想要的任何插补方法。如果您选择使用基于树的学习方法,则更容易将这些NAs 归入数据集中不存在的东西。对大数据集进行多重插补将花费非常长的时间,而且您还可能会丢失 R 会话。

      【讨论】:

        猜你喜欢
        • 2013-08-31
        • 1970-01-01
        • 2020-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        • 1970-01-01
        • 2020-07-09
        相关资源
        最近更新 更多