sparse.model.matrix 在 R 中丢失行
sparse.model.matrix loses rows in R
我正在研究常规 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
这是因为 NA 的 !
运行sum(complete.cases(mm))
。我打赌它也会给你 1253223.
所以用一个值(例如 'IMPUTED_NA' 或 -99999)替换数据框中的 NA,然后重试。
@WillemM
是正确的。 NAs
的存在将触发稀疏矩阵。对于大数据集,最好的方法是将文件读入带有 stringsAsFactors=FALSE
的数据框,然后选择所需的任何插补方法。如果您选择使用基于树的学习方法,则更容易将这些 NAs
归因于数据集中不存在的内容。对大数据集进行多重插补会花费很长时间,而且您还可能会丢失 R 会话。
我已经成功地将 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 答案的解决方案。
我正在研究常规 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
这是因为 NA 的 !
运行sum(complete.cases(mm))
。我打赌它也会给你 1253223.
所以用一个值(例如 'IMPUTED_NA' 或 -99999)替换数据框中的 NA,然后重试。
@WillemM
是正确的。 NAs
的存在将触发稀疏矩阵。对于大数据集,最好的方法是将文件读入带有 stringsAsFactors=FALSE
的数据框,然后选择所需的任何插补方法。如果您选择使用基于树的学习方法,则更容易将这些 NAs
归因于数据集中不存在的内容。对大数据集进行多重插补会花费很长时间,而且您还可能会丢失 R 会话。
我已经成功地将 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 答案的解决方案。