Это действительно вопрос из двух частей, но я не хотел делать заголовок слишком длинным.
Я использую xgboost для некоторых данных, которые являются категоричными, но сначала я должен преобразовать их в разреженную матрицу.Первоначально я использовал вызов библиотеки sparse.model.matrix () из библиотеки Matrix, но обнаружил, что он слишком медленный.Спросив здесь, как эффективно это сделать, я был направлен на ответ Флоделя .
Однако я заметил, что для моих данных итоговое число столбцов в обоих методах не совпадает.Кроме того, я обнаружил, что ответ flodel, кажется, имеет больше смысла для меня, так как число столбцов, сгенерированных посредством ответа flodel, точно соответствует количеству уникальных категорий во всех столбцах в исходном наборе данных (что имеет смысл для одноразового кодирования)), который я вычислил, перебирая столбцы (которые являются факторами) неконвертированного фрейма данных и просто суммируя уровни (df $ column).Количество столбцов, сгенерированных в результате вызова sparse.model.matrix (), на самом деле меньше, поэтому мой первый вопрос:
1) Почему sparse.model.matrix () производит однократное кодирование сменьше, чем ожидаемое количество столбцов для истинного однократного кодирования?
После обучения xgboost с использованием обеих разреженных матриц я получил разные результаты, когда спрашивал xgboost, какие переменные являются наиболее влиятельными (как определено вызовомв xgb.importance ()).Таким образом
2) Какой модели я должен доверять?Тот, который сформирован путем обучения разреженной матрицы, закодированной sparse.model.matrix, или тот, который создан методом Флоделя (что для меня более логично)?
Спасибо.