Введение

В этом блоге мы узнаем, как работает дерево решений, а также реализуем его с помощью sklearn. Мы также построим дерево решений, да, вы правильно слышите, sklearn упростил нам визуализацию дерева решений. Давайте начнем.

Что такое дерево решений?

Деревья решений - это универсальные алгоритмы машинного обучения, которые могут выполнять как задачи классификации, так и регрессии, и даже задачи с несколькими выходами. Это мощные алгоритмы, способные подбирать сложные наборы данных. Существует два типа дерева решений: первый используется для классификации, а другой - для регрессии. Прежде чем углубиться в то, как работает дерево решений, мы рассмотрим некоторые концепции, которые используются в алгоритме дерева решений.

Примесь Джини и энтропия

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

Вычислить примесь Джини очень просто. Это сумма квадрата отношения количества каждого класса в этом узле к общему количеству экземпляров в этом узле с последующим вычитанием на 1.

Возьмем пример

Вычисляя примесь Джини для зеленого прямоугольника, который мы видим, в узле всего 49 образцов, из них 49 относятся к классу 1, а 5 относятся к классу 2, а экземпляров класса 0 нет.
1 - [(0/54) ² + (49/54) ² + (5/54) ​​²]

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

- (0/54) журнал (0/54) - (49/54) журнал (49/54) - (5/54) ​​журнал (5/54) ​​

Как работает дерево решений?

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

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
# loading dataset
iris = load_iris()
# petal length and width
X = iris.data[:,2:] 
y = iris.target

В приведенном выше коде мы импортируем DecisionTreeClassifier из sklearn. tree, а для загрузки набора данных радужной оболочки мы использовали функцию load_iris из sklearn.datasets. Набор данных Iris содержит четыре характеристики длины и ширины чашелистиков и лепестков 50 образцов трех видов ириса (Iris Setosa, Iris virginica и Iris versicolor).

Но здесь для упрощения мы будем использовать только длину лепестка и ширину лепестка.

# intializing model
tree_clf = DecisionTreeClassifier(max_depth=2)
# fitting model on iris dataset
tree_clf.fit(X,y)

Здесь, в этом коде, мы инициализировали DecisionTreeClassification и вызвали метод соответствия для данных.

from sklearn.tree import export_graphviz
# generating decision tree image
export_graphviz(tree_clf,out_file='iris_tree.dot',feature_names=iris.feature_names[2:],class_names=iris.target_names, rounded=True, filled=True)

Из sklearn.tree мы импортируем метод export_graphviz. Этот метод помогает нам создать png-файл нашего дерева решений и красиво его визуализировать, чтобы любой мог понять, что происходит за кулисами. Обратите внимание, что export_graphviz создает точечный файл, который необходимо преобразовать в png. Для этого сначала установите пакет grpahviz, а затем выполните приведенную ниже команду в своем ноутбуке jupyter или в своем терминале.

iris_tree.dot - это имя файла, которое мы дали нашему выводу export_graphviz, а iris_tree.png - это имя файла, которое мы хотим дать нашему файлу изображения.

!dot -Tpng iris_tree.dot -o iris_tree.png

Давайте посмотрим, как работает прогнозирование в дереве решений, используя изображение выше. Приведенное выше изображение - это наше дерево решений, когда мы передаем значения данных для прогнозирования, оно начинается с корневого узла, то есть глубины = 0. Например, у нас есть цветок ириса с шириной лепестка 0,5, он будет напрямую предсказывать его как Setosa, теперь, если у нас есть ширина лепестка 1,5, он переместится в правую боковую ветвь, снова он проверит, меньше ли ширина лепестка. чем 1,75 или нет, у нас ширина лепестка 1,5, поэтому он будет предсказывать его как Versicolor. Это небольшое дерево с max_width, равным 2. Мы, вероятно, сможем получить дерево гораздо большего размера, если наш набор данных будет слишком большим. Благодаря graphvix мы можем легко визуализировать деревья решений, просто вызывая функцию.
Вы можете увидеть другие значения в поле, давайте также их рассмотрим:

1. образцы: общее количество экземпляров после разделения.

2. значение: количество каждого класса

3. class: class предскажет, остановимся ли мы на этом.

4. Джини: Это мера, позволяющая найти чистоту раскола. Если gini = 0, то мы говорим, что он чистый, чем выше значение, тем меньше чистота.

Речь шла о классификации, а теперь перейдем к DecisionTreeRegression.

Регрессия дерева решений.

from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression
# generating data 
X,y = make_regression(n_features=2)
# visualizing data which is generated.
plt.scatter(X[:,0],X[:,1],c=y)
plt.colorbar()

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

#initializing model
tree_reg = DecisionTreeRegressor(max_depth=2)
#fitting data on data genrated
tree_reg.fit(X,y)

Инициализация и настройка модели на нашем фиктивном наборе данных.

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

# visualizing regressor tree
export_graphviz(tree_reg,out_file='reg_tree.dot',feature_names=['x1','x2'],rounded=True, filled=True)
# converting dot file to png using command line.!dot -Tpng reg_tree.dot -o reg_tree.png

Это дерево похоже на предыдущее дерево классификации, но вместо предсказания класса оно дает значение. У нас есть MSE, который показывает чистоту узла, а образцы показывают количество значений, по которым мы вычислили значение путем их усреднения. предположим, что у нас x1 = 0,6, согласно дереву мы должны пройти правую ветвь, проверяя узел на глубине 1, мы видим, что условие x1 ‹= 0,815, да, наши значения меньше этого, поэтому мы перейдем к левому дочернему элементу на глубина 2 и получаем наше значение 9,781, которое является средним из 29 значений вокруг него.

Сильные и слабые стороны подхода "дерево решений"

Сильные стороны методов дерева решений:

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

Слабые стороны методов дерева решений:

  • Деревья решений менее подходят для задач оценки, где цель состоит в том, чтобы предсказать значение непрерывного атрибута.
  • Деревья решений подвержены ошибкам в задачах классификации со многими классами и относительно небольшим количеством обучающих примеров.
  • Обучение дерева решений может быть дорогостоящим в вычислительном отношении. Процесс выращивания дерева решений требует больших вычислительных ресурсов. На каждом узле каждое поле разделения-кандидата должно быть отсортировано, прежде чем будет найдено его наилучшее разделение. В некоторых алгоритмах используются комбинации полей, и необходимо производить поиск оптимальных весов комбинирования. Алгоритмы сокращения также могут быть дорогостоящими, поскольку необходимо сформировать и сравнить множество поддеревьев-кандидатов.

Присоединяйтесь к FAUN: Веб-сайт 💻 | Подкаст 🎙️ | Twitter 🐦 | Facebook 👥 | Instagram 📷 | Группа Facebook 🗣️ | Группа Linkedin 💬 | Slack 📱 | Cloud Native Новости 📰 | Еще .

Если этот пост был полезен, нажмите несколько раз кнопку хлопка 👏 ниже, чтобы выразить поддержку автору 👇