您可以使用稀疏矩阵或特征散列。
稀疏矩阵
我想使用稀疏矩阵是唯一的选择。我怀疑这行代码会起作用。这使用了Matrix包。
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://amunategui.github.io/feature-hashing/