在R中,对于具有N个唯一类别的分类数据,为什么sparse.model.matrix()不会产生具有N列的单热编码?

时间:2018-06-06 22:43:32

标签: r sparse-matrix xgboost one-hot-encoding

这实际上是一个两部分问题,但不想让标题太长。

我正在对一些分类的数据实现xgboost,但首先我必须转换为稀疏矩阵。最初我使用的是Matrix库的“sparse.model.matrix()”调用,但发现它太慢了。在询问如何有效地做到这一点后,我被引导到flodel's answer

但是,我注意到对于我的数据,通过两种方法生成的列数不匹配。此外,我发现flodel的答案似乎对我更有意义,因为通过flodel的答案生成的列数完全匹配原始数据集中所有列的唯一类别数(这对于单热编码是有意义的),我通过迭代未转换数据帧的列(它们是因子)并简单地求和nlevels(df $ column)来计算。通过调用sparse.model.matrix()生成的列数实际上更少,所以我的第一个问题是:

1)为什么sparse.model.matrix()产生一个热门编码,其真实的单热编码的列数少于预期的数量?

在使用两个稀疏矩阵训练xgboost之后,当我向xgboost询问哪些变量最有影响力时(通过调用xgb.importance()确定),我获得了不同的结果。因此

2)我应该信任哪种型号?通过训练由sparse.model.matrix编码的稀疏矩阵形成的那个,或者通过flodel的方法形成的那个(这对我来说更有意义)?

谢谢。

0 个答案:

没有答案