В большинстве устоявшихся систем машинного обучения категориальные переменные обрабатываются естественным образом. Например, в R вы будете использовать коэффициенты, в WEKA вы будете использовать номинальные переменные. Это не так в scikit-Learn. Деревья решений, реализованные в scikit-learn, используют только числовые функции, и эти функции всегда интерпретируются как непрерывные числовые переменные .
Таким образом, следует избегать простой замены строк хеш-кодом, поскольку при рассмотрении в качестве непрерывной числовой функции любое кодирование, которое вы будете использовать, будет вызывать порядок, который просто не существует в ваших данных.
Одним из примеров является кодирование ['red', 'green', 'blue'] с помощью [1,2,3], которое может привести к странным вещам, например, что 'red' ниже, чем 'blue', и если вы усредните 'red' и «синий» вы получите «зеленый». Еще один более тонкий пример может возникнуть, когда вы кодируете ['low', 'medium', 'high'] с помощью [1,2,3]. В последнем случае может иметь место упорядочение, которое имеет смысл, однако могут возникнуть некоторые тонкие несоответствия, когда «средний» находится не в середине «низкого» и «высокого».
Наконец, ответ на ваш вопрос заключается в кодировании категориальной функции в несколько бинарных функций . Например, вы можете написать ['red', 'green', 'blue'] с 3 столбцами, по одному для каждой категории, с 1, когда категория соответствует, и 0 в противном случае. Это называется горячим кодированием , двоичным кодированием, кодированием по одному или любому другому. Вы можете проверить документацию здесь для кодирования категориальных функций и извлечения функций - хеширования и диктовок . Очевидно, что горячее кодирование расширит ваши требования к пространству, а иногда и ухудшает производительность.