Scikit Learn - деревья решений

В этой главе мы узнаем о методе обучения в Sklearn, который называется деревьями решений.

Решения tress (DT) - самый мощный непараметрический контролируемый метод обучения. Их можно использовать для задач классификации и регрессии. Основная цель DT - создать модель, предсказывающую значение целевой переменной, путем изучения простых правил принятия решений, выведенных из характеристик данных. Деревья решений имеют две основные сущности; один является корневым узлом, где данные разделяются, а другой - узлами решения или листьями, на которых мы получили окончательный результат.

Алгоритмы дерева решений

Ниже описаны различные алгоритмы дерева решений -

ID3

Он был разработан Россом Куинланом в 1986 году. Его также называют итеративным дихотомизатором 3. Основная цель этого алгоритма - найти те категориальные особенности для каждого узла, которые дадут наибольший информационный выигрыш для категориальных целей.

Он позволяет вырастить дерево до максимального размера, а затем, чтобы улучшить способность дерева работать с невидимыми данными, применяет шаг сокращения. Результатом этого алгоритма будет многостороннее дерево.

C4.5

Это преемник ID3 и динамически определяет дискретный атрибут, который разбивает непрерывное значение атрибута на дискретный набор интервалов. По этой причине было снято ограничение категориальных функций. Он преобразует обученное дерево ID3 в наборы правил IF-THEN.

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

C5.0

Он работает аналогично C4.5, но использует меньше памяти и создает меньшие наборы правил. Он точнее, чем C4.5.

КОРЗИНА

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

Однородность зависит от индекса Джини, чем выше значение индекса Джини, тем выше будет однородность. Он похож на алгоритм C4.5, но разница в том, что он не вычисляет наборы правил и не поддерживает числовые целевые переменные (регрессию).

Классификация с деревьями решений

В этом случае переменные решения категоричны.

Sklearn Module - Библиотека Scikit-learn предоставляет имя модуля DecisionTreeClassifier для выполнения многоклассовой классификации набора данных.

Параметры

В следующей таблице представлены параметры, используемые sklearn.tree.DecisionTreeClassifier модуль -

Старший Нет Параметр и описание
1

criterion - строка, необязательно по умолчанию = «gini»

Он представляет функцию измерения качества разделения. Поддерживаемые критерии: «Джини» и «энтропия». По умолчанию используется значение Джини для примеси Джини, а энтропия - для получения информации.

2

splitter - строка, необязательно по умолчанию = «лучший»

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

3

max_depth - int или None, необязательно по умолчанию = None

Этот параметр определяет максимальную глубину дерева. Значение по умолчанию - None, что означает, что узлы будут расширяться до тех пор, пока все листья не станут чистыми или пока все листья не будут содержать менее min_smaples_split образцов.

4

min_samples_split - int, float, необязательно по умолчанию = 2

Этот параметр обеспечивает минимальное количество выборок, необходимое для разделения внутреннего узла.

5

min_samples_leaf - int, float, необязательно по умолчанию = 1

Этот параметр обеспечивает минимальное количество выборок, необходимое для конечного узла.

6

min_weight_fraction_leaf - float, необязательно по умолчанию = 0.

С этим параметром модель получит минимальную взвешенную долю от суммы весов, которая должна быть в листовом узле.

7

max_features - int, float, string или None, необязательно по умолчанию = None

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

8

random_state - int, экземпляр RandomState или None, необязательно, по умолчанию = none

Этот параметр представляет собой начальное число сгенерированного псевдослучайного числа, которое используется при перетасовке данных. Следующие варианты -

  • int- В этом случае random_state - это начальное число, используемое генератором случайных чисел.

  • RandomState instance - В этом случае random_state - это генератор случайных чисел.

  • None - В этом случае генератором случайных чисел является экземпляр RandonState, используемый np.random.

9

max_leaf_nodes - int или None, необязательно по умолчанию = None

Этот параметр позволит вырастить дерево с max_leaf_nodes в режиме best-first. По умолчанию отсутствует, что означает неограниченное количество конечных узлов.

10

min_impurity_decrease - float, необязательно по умолчанию = 0.

Это значение работает как критерий для разделения узла, поскольку модель разделит узел, если это разделение вызовет уменьшение примеси больше или равное min_impurity_decrease value.

11

min_impurity_split - float, по умолчанию = 1e-7

Он представляет собой порог для ранней остановки роста деревьев.

12

class_weight - dict, список dicts, «сбалансированный» или None, по умолчанию = None

Он представляет собой веса, связанные с классами. Форма: {class_label: weight}. Если мы используем параметр по умолчанию, это означает, что все классы должны иметь единичный вес. С другой стороны, если вы выберетеclass_weight: balanced, он будет использовать значения y для автоматической настройки весов.

13

presort - bool, необязательно по умолчанию = False

Он сообщает модели, следует ли предварительно отсортировать данные, чтобы ускорить поиск наиболее подходящих разбиений. По умолчанию установлено значение false, но если установлено значение true, это может замедлить процесс обучения.

Атрибуты

В следующей таблице представлены атрибуты, используемые sklearn.tree.DecisionTreeClassifier модуль -

Старший Нет Параметр и описание
1

feature_importances_ - массив формы = [n_features]

Этот атрибут вернет важность функции.

2

classes_: - массив shape = [n_classes] или список таких массивов

Он представляет собой метки классов, то есть задачу с одним выходом, или список массивов меток классов, то есть проблему с несколькими выходами.

3

max_features_ - int

Он представляет собой выведенное значение параметра max_features.

4

n_classes_ - int или список

Он представляет количество классов, то есть задачу с одним выходом, или список количества классов для каждого выхода, то есть задачу с несколькими выходами.

5

n_features_ - int

Это дает количество features когда выполняется метод fit ().

6

n_outputs_ - int

Это дает количество outputs когда выполняется метод fit ().

Методы

В следующей таблице представлены методы, используемые sklearn.tree.DecisionTreeClassifier модуль -

Старший Нет Параметр и описание
1

apply(self, X [, check_input])

Этот метод вернет индекс листа.

2

decision_path(self, X [, check_input])

Как следует из названия, этот метод вернет путь решения в дереве

3

fit(self, X, y [, sample_weight,…])

Метод fit () построит классификатор дерева решений из заданного обучающего набора (X, y).

4

get_depth(сам)

Как следует из названия, этот метод вернет глубину дерева решений.

5

get_n_leaves(сам)

Как следует из названия, этот метод вернет количество листьев дерева решений.

6

get_params(сам [, глубоко])

Мы можем использовать этот метод для получения параметров оценщика.

7

predict(self, X [, check_input])

Он будет предсказывать значение класса для X.

8

predict_log_proba(я, X)

Он будет предсказывать логарифмические вероятности классов предоставленных нами входных выборок X.

9

predict_proba(self, X [, check_input])

Он будет предсказывать вероятности классов предоставленных нами входных выборок X.

10

score(self, X, y [, sample_weight])

Как следует из названия, метод score () возвращает среднюю точность для заданных тестовых данных и меток.

11

set_params(сам, \ * \ * параметры)

С помощью этого метода мы можем установить параметры оценщика.

Пример реализации

В приведенном ниже сценарии Python будет использоваться sklearn.tree.DecisionTreeClassifier модуль для создания классификатора для прогнозирования мужского или женского пола из нашего набора данных, имеющего 25 образцов и две характеристики, а именно «рост» и «длину волос» -

from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)

Вывод

['Woman']

Мы также можем предсказать вероятность каждого класса, используя следующий метод python pred_proba () следующим образом:

пример

prediction = DTclf.predict_proba([[135,29]])
print(prediction)

Вывод

[[0. 1.]]

Регрессия с деревьями решений

В этом случае переменные решения непрерывны.

Sklearn Module - Библиотека Scikit-learn предоставляет имя модуля DecisionTreeRegressor для применения деревьев решений к задачам регрессии.

Параметры

Параметры, используемые DecisionTreeRegressor почти такие же, как использовались в DecisionTreeClassifierмодуль. Отличие заключается в параметре «критерий». ЗаDecisionTreeRegressor модули ‘criterion: строка, необязательный параметр default = «mse» 'имеет следующие значения -

  • mse- Это означает среднеквадратичную ошибку. Это равносильно уменьшению дисперсии как критерию выбора функции. Он минимизирует потери L2, используя среднее значение каждого конечного узла.

  • freidman_mse - Он также использует среднеквадратичную ошибку, но с оценкой улучшения Фридмана.

  • mae- Это средняя абсолютная ошибка. Он сводит к минимуму потери L1, используя медианное значение каждого конечного узла.

Другое отличие состоит в том, что в нем нет ‘class_weight’ параметр.

Атрибуты

Атрибуты DecisionTreeRegressor также такие же, как у DecisionTreeClassifierмодуль. Разница в том, что в нем нет‘classes_’ и ‘n_classes_'атрибуты.

Методы

Методы DecisionTreeRegressor также такие же, как у DecisionTreeClassifierмодуль. Разница в том, что в нем нет‘predict_log_proba()’ и ‘predict_proba()’'атрибуты.

Пример реализации

Метод fit () в регрессионной модели дерева решений принимает значения y с плавающей запятой. давайте посмотрим на простой пример реализации, используяSklearn.tree.DecisionTreeRegressor -

from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)

После подбора мы можем использовать эту регрессионную модель, чтобы сделать прогноз следующим образом:

DTreg.predict([[4, 5]])

Вывод

array([1.5])