Темы, которые будут освещены в этом блоге: -

  1. Введение
  2. Интуиция позади DT
  3. Терминология в дереве решений
  4. Алгоритм CART — классификация
  5. Разделение категориальных признаков
  6. Разделение числовых признаков
  7. Понимание примеси Джини?
  8. Геометрическая интуиция DT

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

Древо решений

Случайный лес

Повышение АДА

Повышение градиента

Повышение XG

1. Введение

НЕПАРАМЕТРИЧЕСКИЙ АЛГОРИТМ —

ДЕРЕВО РЕШЕНИЙ основано на непараметрическом алгоритме, что означает, что оно не будет делать предположений о данных и не имеет параметров. Вот почему он по своей природе может работать с нелинейными данными.

МОДЕЛЬ БЕЛОЙ КОРОБКИ -

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

Модель белого ящика можно объяснить, показав весь процесс. Бывшая банковская система в основном основана на модели белого ящика. Поскольку нам нужно объяснить клиентам, почему они не могут открыть счет или почему они могут подать заявку на получение кредитной карты. Можно объяснить, рассказав весь процесс, ЕСЛИ КЛИЕНТ ЗАПРОСИЛ ПАРАМЕТР, который мы узнаем из модели белого ящика.

МАТЕРИ ВСЕХ АЛГОРИТМОВ НА ОСНОВЕ ДЕРЕВА —

Без понимания дерева решений невозможно понять другой древовидный алгоритм, он работает как базовая модель.

РАБОТАЕТ И С КЛАССИФИКАЦИЕЙ, И С РЕГРЕССИЯ-

он применим как к задачам классификации, так и к задачам регрессии.

2. Интуиция за деревом решений

Глядя на эти данные, мы можем прокомментировать — студенты играют в «PUBG», а когда это программист, они используют «GitHub и «программист», и если пол женский, используют «GitHub», а если пол «мужской», используют «WhatsApp».

if occupation == "Student":
    print("Male Student likes PUBG.")

 else:
     if gender == "Female":
        print("Female  likes GitHub.")
else: 
  print("WhatsApp")
Decision tree -

 [occupation == "Student"?]
               /           \
              /             \
             YES            NO
              |              |
              v              v
    [print("Male Student    [gender == "Female"?]
   likes PUBG.       /           \
                      /             \
                     YES            NO
                      |              |
                      v              v
            [print("Female          [print("WhatsApp")]
           likes GitHub.")]

3. СЛОВАРЬ ДЕРЕВА РЕШЕНИЙ, ЧТОБЫ ЗАПОМНИТЬ -

ПРИМЕЧАНИЕ: A ЯВЛЯЕТСЯ РОДИТЕЛЬСКИМ УЗЛОМ B И C.

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

За деревом решений стоят все алгоритмы, которые создают дерево решений-

ID3

C4.5

CART (Дерево классификации и регрессии)

В sci-kit-learn был реализован алгоритм CART.

Разница между CART и ID3 —

  • CART имеет «бинарное дерево», что означает, что из любого конкретного узла могут формироваться только 2 узла, а в ID3 ​​у нас может быть более 2 узлов на каждом уровне.
  • И «функция примесей» отличается в «ID3» и «ТЕЛЕЖКЕ».

4. Алгоритм CART-Классификация:

Это «АЛГОРИТМ» выращивания дерева решений.

Например, предположим, что у нас есть n входных столбцов и выходных столбцов в «категориальных данных» «да/нет». Нам нужно обучить модель дерева решений, которая на новых данных дает предложение для вывода.

Шаги –

  1. Внутри каждого узла есть критерии разделения. Итак, на первом узле выберите любой столбец, затем выберите значение, основанное на разделении. (столбец, значение)
  2. Итак, на основе критериев разделения разделите узлы на две части да и нет. Вызов первой части d1, второй части d2.
  3. для нового набора данных, созданного после разделения, нахождения «примеси H ()»
  4. затем рассчитайте общее значение примеси «G» - H() слева + H() справа.
  5. И выберите, какое «G» является минимальным.
  6. Продолжайте этот процесс до тех пор, пока все данные не будут использованы и не достигнут «конечного узла».

ПРИМЕСНАЯ ФУНКЦИЯ «H()»

  • Помогает решить, какой столбец нужно выбрать, чтобы запустить дерево решений, а затем в этом выбранном столбце, на основе которого можно начать разбиение.
  • H() указывает, какой столбец (значение f) будет лучшим.
  • В классификации у нас есть две функции примесей — Примесь Джини, ЭНТРОПИЯ.
  • В регрессии у нас есть примесные функции — MSE, MAE.

5. Разделение категорийных признаков:

Предположим, у нас есть данные с 3 функциями и одним выходом, и нам нужно нарисовать дерево решений, а результат — двоичный.

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

Этапы расчета примеси Джини для столбца «Поле»:

Разделение двоичных данных.Поскольку "Поле" является бинарным объектом с параметрами "Наука" и "Искусство", мы начинаем с разделения данных на основе на этих вариантах.

Вычисление вероятности. Для категорий "Наука" и "Искусство" мы рассчитываем вероятность категорий "Работающий" и "Безработный" в отдельных полях.

Расчет примеси Джини: Используя формулу [1 — (left_rows / n)² — (right_rows / n)²], мы вычисляем примесь Джини для « Наука — да» и «Наука — нет».

Расчет веса.Приведенные выше расчеты Джини дают веса, которые помогут в расчете общего значения Джини.

Общий расчет Джини.Для «Наука — да» мы вычисляем [(yes_total / n) * вес], а для «Наука — нет» мы вычисляем [(no_total / n) * вес]. Это обеспечивает значение Джини (G).

Сравнение примеси Джини.Мы сравниваем значение Джини, полученное по признаку "Поле", со значениями Джини, полученными по другим признакам.

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

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

ЭТАПЫ GINI IMPURITY для «СТОЛБЦА ТИПА СТЕПЕНИ»:

Процесс примеси Джини для столбца «Тип степени» включает оценку трех условий: «степень, UG», «степень, PG» и «степень, доктор философии». Мы рассчитаем примесь Джини для каждого условия и выберем примесь с минимальной примесью в качестве представления для столбца «Тип степени». Эта выбранная примесь Джини затем будет сравниваться со значениями Джини других столбцов, чтобы найти минимальное значение примеси для построения дерева решений.

Шаг 1. Расчет примеси Джини для «степени, UG»:

Выберите подмножество данных, где «Тип степени» — «UG».

Разделите данные на категории «Да» и «Нет» на основе результатов «работающие» и «неработающие».

Рассчитайте примесь Джини для наборов данных «Да» и «Нет» на основе их вероятностей.

Найдите взвешенную сумму, используя значения Джини из полей «Да» и «Нет».

Шаг 2. Расчет примеси Джини для «степени, PG»:

Создайте еще один «корневой узел» на основе условия «степень, PG».

Разделите данные на категории «Да» и «Нет» на основе результатов «работающие» и «неработающие».

Рассчитайте примесь Джини для наборов данных «Да» и «Нет» на основе их вероятностей.

Шаг 3. Расчет примеси Джини для степени доктора философии.

Создайте еще один «корневой узел» на основе условия «степень, доктор философии».

Разделите данные на категории «Да» и «Нет» на основе результатов «работающие» и «неработающие».

Рассчитайте примесь Джини для наборов данных «Да» и «Нет» на основе их вероятностей.

Шаг 4. Выбор минимальной примеси Джини:

Сравните все три значения примеси Джини, полученные на предыдущих шагах.

Выберите условие («степень, UG», «степень, PG» или «степень, доктор философии») с наименьшим значением примеси Джини.

Шаг 5. Сравнение с другими столбцами.

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

6. Разделение числовых признаков -

ШАГИ ПО ПРИМЕНЕНИЮ ПРИМЕСЕЙ GINI В КОЛОННЕ «СРЕДНЯЯ СТРАНИЦА»:

В процессе примеси Джини для столбца «Средняя оценка» мы выполним следующие шаги для создания оптимального дерева решений:

Шаг 1. Сортировка по возрастанию:

Во-первых, мы сортируем столбец «Средняя оценка» в порядке возрастания.

Шаг 2. Разделение и нахождение среднего:

Теперь мы разбиваем данные на две строки в каждой и находим среднее значение в каждом разбиении.

Шаг 3. Выбор корневого узла:

Мы выбираем конкретное среднее значение в качестве «Корневого узла» для разделения данных.
Например, мы рассматриваем значение «Средняя оценка» выше 85,5. Затем мы делим данные на категории «Да» и «Нет» в зависимости от того, превышает ли «Средняя оценка» 85,5 или нет.
Мы рассчитываем примесь Джини для наборов данных «Да» и «Нет» на основе результаты «занятые» и «безработные».

Шаг 4. Итеративное разделение.

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

Шаг 5. Сравнение и выбор:

Мы вычисляем примесь Джини (G) для каждого разделения и сравниваем все значения Джини, полученные на предыдущих этапах.
Мы выбираем среднее значение, которое приводит к минимальной примеси Джини, в качестве оптимального «корневого узла» для дерева решений. .

ВЫБОР ОПТИМАЛЬНОГО «КОРНЕВОГО УЗЛА» С МИНИМАЛЬНОЙ ПРИМЕСЬЮ Джини:

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

  1. Вычислить примесь Джини для каждой функции:
  • Мы рассчитываем значение примеси Джини для каждой функции (столбца) в нашем наборе данных, например «Поле», «Тип степени» или «Средняя оценка».
  • Для бинарных функций, таких как «Поле», мы разделяем данные на категории «Да» и «Нет» в зависимости от параметров функции (например, «Наука» и «Искусство»).
  • Для категориальных функций, таких как «Тип степени», мы разделяем данные на основе различных параметров (например, «UG», «PG» и «Ph.D.»).

2. Оцените примесь Джини для каждого разделения:

  • Мы рассчитываем примесь Джини для каждого разделения, учитывая результаты «работающие» и «безработные» в категориях «Да» и «Нет».

3. Найдите минимальную примесь Джини:

  • После получения значений примеси Джини для всех расщеплений мы выбираем расщепление с минимальной примесью Джини в качестве кандидата «Корневой узел».

4. Сравнение функций:

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

5. Выбор оптимального «корневого узла»:

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

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

7. ПОНИМАНИЕ ПРИМЕСИ Джини — мера точности классификации

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

Пример: Фруктовый пакет с апельсинами и яблоками

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

8. Геометрическая интуиция дерева решений

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

9. Преимущества ДЕРЕВА РЕШЕНИЙ -

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

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

• Способен обрабатывать как числовые, так и категориальные данные.

  • Может работать с нелинейными наборами данных

10. Недостатки ДЕРЕВА РЕШЕНИЙ -

  • Изучающие деревья решений могут создавать слишком сложные деревья, которые плохо обобщают данные. Это называется переоснащением. Чтобы избежать этой проблемы, необходимы такие механизмы, как отсечение, установка минимального количества выборок, необходимых для конечного узла, или установка максимальной глубины дерева.
  • Деревья решений могут быть нестабильными, потому что небольшие изменения в данных могут привести к созданию совершенно другого дерева. Эта проблема смягчается использованием деревьев решений в ансамбле.
  • Прогнозы деревьев решений не являются ни гладкими, ни непрерывными, а являются кусочно-постоянными приближениями, как показано на рисунке выше. Поэтому они не умеют экстраполировать.
  • Обучающиеся дерева решений создают предвзятые деревья, если некоторые классы доминируют. Поэтому рекомендуется сбалансировать набор данных перед подгонкой под дерево решений.
  • Прогнозы деревьев решений не являются ни гладкими, ни непрерывными, а являются кусочно-постоянными приближениями, как показано на рисунке выше. Поэтому они не умеют экстраполировать.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import numpy as np
from sklearn.tree import export_text

# Load iris dataset
iris = load_iris()
X = iris.data[:, :2]  # we only take the first two features.
y = iris.target

# Split data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train a DecisionTreeClassifier
clf = DecisionTreeClassifier(max_depth=3,min_samples_split=40)
clf.fit(X_train, y_train)

# Check accuracy
y_pred = clf.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")

# Plot the decision tree
plt.figure(figsize=(12, 8))
plot_tree(clf, filled=True, feature_names=iris.feature_names[:2], class_names=iris.target_names)
plt.show()

# Plot the decision boundary
plt.figure(figsize=(8, 6))
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),
                     np.arange(y_min, y_max, 0.01))

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()

ТОЧНОСТЬ: 0,8

r = export_text(clf, feature_names=['sepal_length','sepal_width'])
print(r)
|--- sepal_length <= 5.45
|   |--- sepal_width <= 2.80
|   |   |--- class: 1
|   |--- sepal_width >  2.80
|   |   |--- class: 0
|--- sepal_length >  5.45
|   |--- sepal_length <= 6.15
|   |   |--- class: 1
|   |--- sepal_length >  6.15
|   |   |--- class: 2
clf.feature_importances_

массив ([0,8253173, 0,1746827])

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt
import numpy as np

# Generate a non-linear dataset based on the sine function
np.random.seed(0)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel()
y[::5] += 3 * (0.5 - np.random.rand(16))  # add some noise to the data

# Split into training and testing datasets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Fit a Decision Tree regressor
regressor = DecisionTreeRegressor()
regressor.fit(X_train, y_train)

# To plot the regression curve, we'll sort the X values and predict Y values for the sorted X
X_grid = np.arange(min(X), max(X), 0.01)[:, np.newaxis]
y_grid = regressor.predict(X_grid)

# Plot the training data and the regression curve
plt.scatter(X_train, y_train, color='red', label='data')
plt.plot(X_grid, y_grid, color='blue', label='prediction')
plt.title('Decision Tree Regression')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

from sklearn.tree import plot_tree
# Plot the decision tree
plt.figure(figsize=(12, 8))
plot_tree(regressor, filled=True)
plt.show()

Найдите меня здесь:

Github: https://github.com/21Nimisha

Linkedin: https://www.linkedin.com/in/nimisha-singh-b6183419/