Найти - Пользователи
Полная версия: Как заставить DecisionTreeClassifier работать с категориями?
Начало » Python для экспертов » Как заставить DecisionTreeClassifier работать с категориями?
1
may042
Все построители деревьев , которые я знаю (из sklearn.tree) , в качестве признаков принимают только числовые данные.
Но как построить дерево на категориальных данных ?! Например, у меня есть 3 категориальных признака-симптома болезни, в каждом по 5 вариантов ответа … Неужели я должен превратить их в три столбца в которых будут числа от 1 до 5 ?! Анализ при построении дерева будет совершенно не логичным. Я хочу чтобы все категории были равноправными , чтобы в каждой вершине перебирались все возможные варианты разбиения пяти категорий на две подвыборки. И выбиралось то разбиение, которое делит их оптимальнее.

В теории это довольно просто , но на практике словно забыли реализовать. Может я чего-то не понимаю ? Может быть есть другой древесный классификатор и регрессор , который умеет полноценно работать с категориальными признаками ?
scidam
Нужно использовать OneHotEncoder, который превратит три столбца с пятью вариантами в 15 столбцов, и к нему уже применять CART алгоритмы, или что там еще…
OneHotEncoder сделает следующее – создаст колонки

ПРизнак1Категоря1, Признак1Категория2 …. 15 вариантов
0 1
0 0
1 0
1 0

0 и 1 – отсутствие признака
may042
Я думаю будет не то , что нужно.
Вместо того, чтобы в одной вершине разделить все категории признаков на две подвыборки наиболее оптимальным образом. Алгоритм будет делить выборку на две части : принадлежашие данной категории по данному признаку , и не принадлежащие.
А если категорий много, то и признаков при onehot кодировании будет много , и если я правильно понимаю , то решающие деревья не очень хорошо справляются с большим количеством признаков.
scidam
Кодировать придется в любом случае…
В качестве альтернативы можно предложить еще BinaryEncoder из пакета category_encoders. Он приводит к меньшему числу добавочных признаков, чем OneHot…
may042
А если категорий много, то и признаков при onehot кодировании будет много , и если я правильно понимаю , то решающие деревья не очень хорошо справляются с большим количеством признаков.
15 это не много … здесь проблем не будет.

И еще, можно, конечно, построить экспертное дерево решений, в этом случае, из узла может исходить не обязательно 2 ребра (варианта решения)… Но это будет экспертное дерево (хотя и для него можно потом получить оценки точности и т.п.).


This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB