Что такое дерево решений?
Дерево решений - это инструмент поддержки принятия решений, который использует древовидный граф или модель решений и их возможных последствий, включая случайные исходы событий, затраты на ресурсы и полезность. Это один из способов отображения алгоритма, который содержит только условные операторы управления.
Деревья решений (DT) - это непараметрический метод обучения с учителем, используемый как для классификации, так и для регрессии. Деревья решений учатся на основе данных аппроксимировать синусоидальную кривую с помощью набора правил принятия решений «если-то-еще». Чем глубже дерево, тем сложнее правила принятия решений и тем лучше модель. Дерево решений строит модели классификации или регрессии в виде древовидной структуры, поэтому называется CART (Деревья классификации и регрессии). Он разбивает набор данных на все меньшие и меньшие подмножества, выстраивая одновременно связанное дерево решений. Конечным результатом является дерево с узлами решений и листовыми узлами. Узел принятия решения имеет две или более ветвей. Листовой узел представляет собой классификацию или решение. Самый верхний узел решения в дереве, который соответствует лучшему предсказателю, называется корневым узлом. Деревья решений могут обрабатывать как категориальные, так и числовые данные.
Когда используется дерево решений?
- Когда у пользователя есть цель и он пытается достичь максимальной прибыли, оптимизировать затраты и т. Д.
- Когда есть несколько вариантов действий, таких как система меню в банкомате, меню вызова службы поддержки и т. Д.
- Неуверенность в том, какой результат действительно произойдет.
Как составить дерево решений?
Шаг 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
Мы будем использовать следующие библиотеки.
- Python Панды
- Python Numpy
- Python Scikit Learn
- 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 г.