Как использовать фиктивную переменную для представления категориальных данных в python scikit-learn random forest

Я генерирую вектор функций для случайного классификатора леса scikit-learn. Вектор функции представляет собой название 9 аминокислотных остатков белка. Существует 20 возможных имен вычетов. Итак, я использую 20 фиктивных переменных для обозначения одного имени остатка, для 9 вычетов у меня есть 180 фиктивных переменных.

Например, если 9 остатков в скользящем окне: ARNDCQEGH (каждая буква представляет собой название белка), мой вектор-функция будет:

"True\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t False\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t False\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t False\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t False\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t False\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t False\tFalse\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t False\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t False\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\n" 

Кроме того, я пытался использовать (1,0) для замены (True, False)

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

Может ли случайный лес Scikit обрабатывать категориальную переменную или фиктивную переменную? Если да, не могли бы вы привести пример, показывающий, как это работает.

Вот как я установил случайный лес:

 clf=RandomForestClassifier (n_estimators=800, criterion='gini', n_jobs=12, max_depth=None, compute_importances=True, max_features='auto', min_samples_split=1, random_state=None) 

Заранее большое спасибо!

2 Solutions collect form web for “Как использовать фиктивную переменную для представления категориальных данных в python scikit-learn random forest”

Использование boolean-функций, закодированных как 0 и 1, должно работать. Если точность прогноза плохая даже при большом количестве деревьев решений в вашем лесу, может случиться так, что ваши данные слишком шумны, чтобы алгоритм обучения не воспринимал интересный.

Вы пытались установить линейную модель (например, логистическую регрессию) в качестве базовой линии по этим данным?

Редактирование : на практике использование целочисленного кодирования для категориальных переменных имеет тенденцию работать очень хорошо для многих рандомизированных моделей деревьев решений (таких как RandomForest и ExtraTrees в scikit-learn).

Scikits random forest classifier может работать с думмифицированными переменными, но он также может использовать категориальные переменные напрямую, что является предпочтительным подходом. Просто сопоставьте свои строки целыми числами. Предположим, что ваш вектор функций – ['a', 'b', 'b', 'c']

 vals = ['a','b','b','c'] #create a map from your variable names to unique integers: intmap = dict([(val, i) for i, val in enumerate(set(vals))]) #make the new array hold corresponding integers instead of strings: new_vals = [intmap[val] for val in vals] 

new_vals теперь содержит значения [0, 2, 2, 1], и вы можете напрямую передать их в РФ, не делая думмификацию

  • Невозможно импортировать scikits-learn, хотя кажется, что он установлен
  • Повторно составить тензор после тензорной факторизации
  • ссылка на аудиолаб в python2.6 на osx
  • Python - лучший язык программирования в мире.