这实际上是一个两部分问题,但不想让标题太长。
我正在对一些分类的数据实现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的方法形成的那个(这对我来说更有意义)?
谢谢。