我有一个因变量来衡量净收入。影响这一结果的主要预测因素之一是“产品”,即卖给客户的产品。我随机抽样的数据集包含140万个条目。
产品被指定为特定的分类值。我觉得用虚拟变量来表示产品是合适的,但是有4481个等级的产品。我不知道如何在R中编码这么多级别。
model.matrix(~ product, data=salesdata)返回一个错误。(需要38.4GB内存)
有人能指导我如何对这些分类变量进行编码吗?
独立的:产品代码(数量,但作为质量处理,因为价值是名义的)
发布于 2016-05-03 03:52:02
您可以使用稀疏矩阵或特性散列。
我认为使用稀疏矩阵是唯一的选择。我怀疑这行代码会起作用。这使用了矩阵包。
sparseProducts <- sparse.model.matrix(~ product, data=salesdata)以我为例:
sparseDiagonalMatrix <- sparse.model.matrix(~., data.frame(V1 = as.factor(seq(1, 10))))每一列代表一个不同的因素,这将产生:
1 1 . . . . . . . . .
2 1 1 . . . . . . . .
3 1 . 1 . . . . . . .
4 1 . . 1 . . . . . .
5 1 . . . 1 . . . . .
6 1 . . . . 1 . . . .
7 1 . . . . . 1 . . .
8 1 . . . . . . 1 . .
9 1 . . . . . . . 1 .
10 1 . . . . . . . . 1
> class(sparseDiagonalMatrix)
[1] "dgCMatrix"
attr(,"package")
[1] "Matrix"或者,您可以删除拦截,并让所有的零表示为1类。
sparseDiagonalMatrix <- sparse.model.matrix(~., data.frame(V1 = as.factor(seq(1, 10))))[, -1, drop=FALSE]
10 x 9 sparse Matrix of class "dgCMatrix"
V12 V13 V14 V15 V16 V17 V18 V19 V110
1 . . . . . . . . .
2 1 . . . . . . . .
3 . 1 . . . . . . .
4 . . 1 . . . . . .
5 . . . 1 . . . . .
6 . . . . 1 . . . .
7 . . . . . 1 . . .
8 . . . . . . 1 . .
9 . . . . . . . 1 .
10 . . . . . . . . 1
> class(sparseDiagonalMatrix)
[1] "dgCMatrix"
attr(,"package")
[1] "Matrix"不过,您将需要一个支持稀疏矩阵的软件包来衡量净收入。幸运的是,大多数现代主流包都支持稀疏矩阵。
以下是对R中的特性散列的一个很好的解释(以及其他技术),这也是一种替代方法,当您有数十万或数百万多个级别时,它特别有用。
https://datascience.stackexchange.com/questions/11543
复制相似问题