Кодування категоріальних змінних як гаряче, так і далі; ТОВ «Вин Вектор»
(або: як правильно використовувати xgboost з R)
R має "одноразове" кодування, приховане у більшості своїх модельних шляхів. Запитати користувача R, де використовується однокоротке кодування, все одно, що запитати рибу, де є вода; вони не можуть вказати на нього, як це скрізь.

Наприклад, ми можемо побачити докази одного гарячого кодування в іменах змінних, вибраних лінійною регресією:
Значна частина кодування в R по суті заснована на "контрастах", реалізованих у stats: model.matrix () Примітка: не використовуйте base: data.matrix () або використовуйте хешування перед моделюванням - ви можете з цим уникнути (особливо з використанням деревних методів), але загалом вони не є хорошою технікою, як ми показуємо нижче:
stats: model.matrix () не зберігає свій гарячий план зручним чином (це можна зробити, витягнувши атрибут "контрасти" плюс вивчивши імена стовпців першого кодування, але ідентифіковані рівні не зручно представляти ). При безпосередньому застосуванні stats: model.matrix () ви не можете безпечно припустити, що однакова формула, застосована до двох різних наборів даних (скажімо, поїзд і додаток чи тест), використовує одне і те ж кодування! Ми демонструємо це нижче:
Вищезазначене неправильне кодування може бути критичним недоліком, коли ви будуєте модель, а потім використовуєте модель на нових даних (будь то дані перехресної перевірки, дані тесту або майбутні дані програми). Багато користувачів R не знайомі з вищезазначеною проблемою, оскільки кодування приховується в навчанні моделі, і як кодувати нові дані зберігається як частина моделі. Користувачі Python scikit-learn, які звертаються до R, часто запитують, "де один гарячий кодер" (оскільки це не так багато обговорюється в R, як у scikit-learn), і навіть пропонують ряд (низької якості) одно- off пакети "перенесення одноразового кодування на R".
Основне місце, де користувачеві R потрібен належний кодер (а це кодер, який зберігає свій план кодування у зручній для повторного використання формі, що насправді не вдається зробити багатьом з «одноразово перенесених з Python» пакетів) при використанні реалізація машинного навчання, яка не є повністю R -центричною. Однією з таких систем є xgboost, яка вимагає (як це характерно для машинного навчання в scikit-learn) дані вже закодовані як числова матриця (замість гетерогенної структури, такої як data.frame). Це вимагає явного перетворення з боку користувача R, і багато користувачів R помиляються (не вдається десь зберегти план кодування). Щоб зробити це конкретним, давайте попрацюємо на простому прикладі.