Предварительная обработка большого файла данных с категориальными и непрерывными функциями

Во-первых, спасибо, что читаете меня, и большое спасибо, если вы можете дать какую-нибудь подсказку, чтобы помочь мне решить эту проблему.

Поскольку я новичок в 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 тыс. Строк

Поскольку я хочу сравнить несколько реализаций алгоритма, я хотел закодировать все номинальные значения, чтобы его можно было использовать в нескольких классификаторах.

Я попробовал несколько вещей:

  1. LabelEncoder: это было довольно хорошо, но оно дает мне упорядоченные значения, которые классификатор неправильно интерпретирует.
  2. OneHotEncoder: если я хорошо понимаю, он вполне подходит для моих нужд, потому что я могу выбрать столбец для преобразования в двоичную форму. Но так как у меня много номинальных значений, оно всегда идет в MemoryError. Более того, его входные данные должны быть числовыми, поэтому необходимо предварительно все кодировать.
  3. StandardScaler: это довольно полезно, но не для того, что мне нужно. Я решил объединить это, чтобы измерить мои непрерывные ценности.
  4. FeatureHasher: сначала я не понял, что он делает. Затем я увидел, что он в основном использовался для анализа текста. Я пытался использовать это для моей проблемы. Я обманул, создав новый массив, содержащий результат преобразования. Я думаю, что он не был создан, чтобы работать таким образом, и это даже не было логичным.
  5. DictVectorizer: может быть полезным, но выглядит как OneHotEncoder и помещает в память еще больше данных.
  6. part_fit: этот метод задается только 5 классификаторами. Я хотел бы быть в состоянии сделать это с Perceptron, KNearest и RandomForest, по крайней мере, чтобы это не соответствовало моим потребностям

Я просмотрел документацию и нашел эту информацию на странице " Предварительная обработка и извлечение функций".

Я хотел бы иметь способ кодировать все номинальные значения, чтобы они не считались упорядоченными. Это решение может быть применено к большим наборам данных с большим количеством категорий и слабыми ресурсами.

Есть ли способ, которым я не исследовал, который может соответствовать моим потребностям?

Спасибо за любую подсказку и совет.

1 ответ

Для преобразования неупорядоченных категориальных функций вы можете попробовать get_dummies в pandasБолее подробную информацию можно найти в его документации. Другой способ заключается в использовании catboost, который может напрямую обрабатывать категориальные признаки, не превращая их в числовой тип.

Другие вопросы по тегам