2015-01-09 2 views
2

У меня есть набор из целочисленных данных размером 40 миллионов x 22 для задачи классификации. Большинство функций представляют собой категориальные данные, которые используют разные целочисленные значения для представления различных категорий. Например, в столбце «Цвет»: 0 означает синий, 1 означает красный и т. Д. Я предварительно обработал данные с помощью LabelEncoder.Преобразование категориальных данных в Scikit-Learn

  1. Имеет ли смысл вместить эти данные в любую классификационную модель в SK-learn? Я попытался поместить данные в модель Random Forest, но получил очень плохую точность. Я также попробовал One Hot Encoding, чтобы преобразовать данные в фиктивные переменные, но мой компьютер может использовать только разреженную матрицу после использования One Hot Encoding, проблема в том, что Random Forest может использовать только плотную матрицу, которая будет превышать память моего компьютера.
  2. Какова правильная стратегия борьбы с категориальными данными в SK-learn?
+0

Я бы сократил размер ваших данных для обучения и выяснил, какие функции наиболее полезны, прежде чем пытаться обработать 40 миллионов строк данных. RandomForest имеет атрибут 'feature_importances_', который расскажет вам, что он считает наиболее полезными функциями: http://scikit-learn.org/stable/modules/ensemble.html#feature-importance-evaluation – EdChum

+0

Спасибо за помощь! Я не знал, что у Склеарна есть это. –

ответ

1

LabelEncoder бесполезно в вашем случае, поскольку выходные данные не имеют никакого смысла, как номера (т.е. это бессмысленно для выполнения арифметических операций над ними). OneHotEncoder имеет важное значение при работе с категориальными данными.

Недавно sklearn got support for sparse input в случайных лесах и деревьях принятия решений, чтобы вы могли проверить последнюю версию. Кроме того, другие методы, такие как LogisticRegression, поддерживают разреженные данные.

Кроме того, я не думаю, что вам нужно использовать все 40M примеров, чтобы получить достойную точность. Этого должно быть достаточно, чтобы случайным образом опробовать, скажем, 100 тыс. Из них (это число зависит от количества функций после OneHotEncoding, их изменчивости и количества целевых классов).

+0

Ничего себе! это хорошие новости! В настоящее время я использую последнюю стабильную версию 0.15.2. Должен ли я обновиться до последней версии разработки ?. Извините, я не знаю, как найти правильную версию для этого git merge. –

+0

@JimGB, я не знаком с политикой версий sklearn, поэтому, когда мне нужны случайные леса с разрешающей способностью, я просто проверил «мастер». –

Смежные вопросы