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 Этот параметр представляет собой начальное число сгенерированного псевдослучайного числа, которое используется при перетасовке данных. Следующие варианты -
|
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])