Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Фев. 9, 2018 09:42:40

may042
Зарегистрирован: 2017-12-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставить DecisionTreeClassifier работать с категориями?

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

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

Офлайн

#2 Фев. 10, 2018 08:28:09

scidam
Зарегистрирован: 2016-06-15
Сообщения: 282
Репутация: +  34  -
Профиль   Отправить e-mail  

Как заставить DecisionTreeClassifier работать с категориями?

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

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

0 и 1 – отсутствие признака

Офлайн

#3 Фев. 12, 2018 09:46:45

may042
Зарегистрирован: 2017-12-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как заставить DecisionTreeClassifier работать с категориями?

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

Офлайн

#4 Фев. 14, 2018 05:59:53

scidam
Зарегистрирован: 2016-06-15
Сообщения: 282
Репутация: +  34  -
Профиль   Отправить e-mail  

Как заставить DecisionTreeClassifier работать с категориями?

Кодировать придется в любом случае…
В качестве альтернативы можно предложить еще BinaryEncoder из пакета category_encoders. Он приводит к меньшему числу добавочных признаков, чем OneHot…

may042
А если категорий много, то и признаков при onehot кодировании будет много , и если я правильно понимаю , то решающие деревья не очень хорошо справляются с большим количеством признаков.
15 это не много … здесь проблем не будет.

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


Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version