稀疏.model.matrix在R中丢失行
我正在处理常规的稀疏.model.matrix在R中丢失行,r,matrix,sparse-matrix,R,Matrix,Sparse Matrix,我正在处理常规的数据。对于glm函数来说,帧看起来太大了,所以我决定处理一个模型矩阵的稀疏表示,这样我就可以将这个稀疏矩阵放入glmnet函数中。但是sparse.model.matrix看起来像是从原始矩阵中删除了一些行。知道为什么会发生这种情况吗?有什么办法可以避免这种情况? 代码如下: > mm <- sparse.model.matrix(~clicks01+kl_tomek*bc1+hours+plec+1, data = daneOst) > dim(mm) [1
数据。对于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
>毫米尺寸(毫米)
[1] 1253223 292
>dim(daneOst)
[1] 1258836 6
这是由于NA的原因
运行sum(complete.cases(mm))
。我打赌它也会给你1253223
因此,请将数据帧中的NA替换为一个值(例如“插补NA”或-99999),然后重试。
@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)
上一个\u na\u操作注意,我将此用于基于树的模型,这些模型可以处理na值。YMMV我认为这是迄今为止最好的解决方案。这就是为什么我接受这个答案。