Способен обрабатывать как числовые, так и категориальные данные. Однако реализация scikit-learn на данный момент не поддерживает категориальные переменные.

— это утверждение, которое мы получили из документации scikit-learn.

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

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

Значения в исходных данных: Солнечно, Дождь и Ветер. Для каждого возможного значения создаем отдельный столбец. Если исходное значение было Санни, мы помещаем 1 в столбец Санни.

Давайте посмотрим, как это делается в коде.

import pandas as pd
from sklearn.tree import DecisionTreeClassifier

data = pd.DataFrame()
data['A'] = ['sunny','rain','sunny','wind']
data['B'] = ['b','b','a','a']
data['C'] = [1, 0, 1, 0]
data['Class'] = ['n','y','n','n']

tree = DecisionTreeClassifier()

one_hot_data = pd.get_dummies(data[['A','B','C']],drop_first=True)
tree.fit(one_hot_data, data['Class'])

Если мы горячим кодируем переменную A с тремя параметрами «солнечно», «дождь», «ветер» в три двоичные переменные x1, x2, x3, то правило принятия решения A == «солнечно» будет в основном таким же, как x1 ‹= 0,5. . Выполнение горячего кодирования требует больше вычислительных затрат, но, как вы заметите, вы получите хорошую производительность.

И это все! Удачи нам!