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

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

Деревья решений (DT) - это непараметрический метод обучения с учителем, используемый как для классификации, так и для регрессии. Деревья решений учатся на основе данных аппроксимировать синусоидальную кривую с помощью набора правил принятия решений «если-то-еще». Чем глубже дерево, тем сложнее правила принятия решений и тем лучше модель. Дерево решений строит модели классификации или регрессии в виде древовидной структуры, поэтому называется CART (Деревья классификации и регрессии). Он разбивает набор данных на все меньшие и меньшие подмножества, выстраивая одновременно связанное дерево решений. Конечным результатом является дерево с узлами решений и листовыми узлами. Узел принятия решения имеет две или более ветвей. Листовой узел представляет собой классификацию или решение. Самый верхний узел решения в дереве, который соответствует лучшему предсказателю, называется корневым узлом. Деревья решений могут обрабатывать как категориальные, так и числовые данные.

Когда используется дерево решений?

  1. Когда у пользователя есть цель и он пытается достичь максимальной прибыли, оптимизировать затраты и т. Д.
  2. Когда есть несколько вариантов действий, таких как система меню в банкомате, меню вызова службы поддержки и т. Д.
  3. Неуверенность в том, какой результат действительно произойдет.

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

Шаг 1

Рассчитайте энтропию цели.

Шаг 2

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

Шаг 3

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

Расчеты энтропии и информационного прироста

Энтропия

Где,

  • S - общее пространство выборки,
  • P (да) - вероятность того, что да

Если число "да" = число "нет", т. Е. P (S) = 0,5

  • Энтропия (S) = 1
    Когда P (да) = P (нет) = 0,5, т.е. ДА + НЕТ = Общая выборка (S) = 1

Если он содержит все да или все нет, т.е. P (S) = 1 или 0

  • Энтропия (S) = 0
    Когда P (да) = 1, т.е. ДА = Общая выборка (S)
    E (S) = 1 log 1
    E (S) = 0

Получение информации

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

Если S - наша общая коллекция,

Прирост информации = энтропия (S) - [(средневзвешенное значение) x энтропия (каждая функция)]

Реализация дерева решений в Python

Мы будем использовать следующие библиотеки.

  1. Python Панды
  2. Python Numpy
  3. Python Scikit Learn
  4. Python MatPlotLib

Мы будем использовать набор данных BankNoteAuthentication.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
bankdata = pd.read_csv("../input/bank-note-authentication-uci-data/BankNote_Authentication.csv")
bankdata

Выбор функции

Здесь вам нужно разделить данные столбцы на два типа переменных: зависимые (или целевая переменная) и независимые переменные (или функциональные переменные).

feature_cols = ['variance','skewness','curtosis','entropy']
#split dataset in features and target variable
X = pima[feature_cols] # Features
y = pima['class'] # Target variable

Разделение данных

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

Давайте разделим набор данных с помощью функции train_test_split (). Вам нужно передать 3 параметра features, target и test_set size.

# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) # 70% training and 30% test

Построение модели дерева решений

Давайте создадим модель дерева решений с помощью Scikit-learn.

# Create Decision Tree classifer object
clf = DecisionTreeClassifier()
# Train Decision Tree Classifer
clf = clf.fit(X_train,y_train)
#Predict the response for test dataset
y_pred = clf.predict(X_test)

Оценка модели

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

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

# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))

ВЫХОД: Точность: 0,9878640776699029

Матрица путаницы

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

cm = confusion_matrix(y_test, y_pred)
cm

ВЫХОД:

массив ([[231, 4], [1, 176]])

Первоначально опубликовано на https://www.numpyninja.com 12 августа 2020 г.