Предварительная обработка большого файла данных с категориальными и непрерывными функциями
Во-первых, спасибо, что читаете меня, и большое спасибо, если вы можете дать какую-нибудь подсказку, чтобы помочь мне решить эту проблему.
Поскольку я новичок в Scikit-learn, не стесняйтесь давать советы, которые помогут мне улучшить процесс и сделать его более профессиональным.
Моя цель - классифицировать данные между двумя категориями. Я хотел бы найти решение, которое дало бы мне наиболее точный результат. На данный момент я все еще ищу наиболее подходящий алгоритм и предварительную обработку данных.
В моих данных у меня есть 24 значения: 13 являются номинальными, 6 являются бинаризованными, а остальные являются непрерывными. Вот пример строки
"RENAULT";"CLIO III";"CLIO III (2005-2010)";"Diesel";2010;"HOM";"_AAA";"_BBB";"_CC";0;668.77;3;"Fevrier";"_DDD";0;0;0;1;0;0;0;0;0;0;247,97
У меня есть около 900 тыс. Строк для обучения, и я делаю тест более 100 тыс. Строк
Поскольку я хочу сравнить несколько реализаций алгоритма, я хотел закодировать все номинальные значения, чтобы его можно было использовать в нескольких классификаторах.
Я попробовал несколько вещей:
- LabelEncoder: это было довольно хорошо, но оно дает мне упорядоченные значения, которые классификатор неправильно интерпретирует.
- OneHotEncoder: если я хорошо понимаю, он вполне подходит для моих нужд, потому что я могу выбрать столбец для преобразования в двоичную форму. Но так как у меня много номинальных значений, оно всегда идет в MemoryError. Более того, его входные данные должны быть числовыми, поэтому необходимо предварительно все кодировать.
- StandardScaler: это довольно полезно, но не для того, что мне нужно. Я решил объединить это, чтобы измерить мои непрерывные ценности.
- FeatureHasher: сначала я не понял, что он делает. Затем я увидел, что он в основном использовался для анализа текста. Я пытался использовать это для моей проблемы. Я обманул, создав новый массив, содержащий результат преобразования. Я думаю, что он не был создан, чтобы работать таким образом, и это даже не было логичным.
- DictVectorizer: может быть полезным, но выглядит как OneHotEncoder и помещает в память еще больше данных.
- part_fit: этот метод задается только 5 классификаторами. Я хотел бы быть в состоянии сделать это с Perceptron, KNearest и RandomForest, по крайней мере, чтобы это не соответствовало моим потребностям
Я просмотрел документацию и нашел эту информацию на странице " Предварительная обработка и извлечение функций".
Я хотел бы иметь способ кодировать все номинальные значения, чтобы они не считались упорядоченными. Это решение может быть применено к большим наборам данных с большим количеством категорий и слабыми ресурсами.
Есть ли способ, которым я не исследовал, который может соответствовать моим потребностям?
Спасибо за любую подсказку и совет.
1 ответ
Для преобразования неупорядоченных категориальных функций вы можете попробовать get_dummies
в pandas
Более подробную информацию можно найти в его документации. Другой способ заключается в использовании catboost
, который может напрямую обрабатывать категориальные признаки, не превращая их в числовой тип.