Учебники

Алгоритмы классификации — Дерево решений

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

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

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

В приведенном выше дереве решений вопрос — это узлы решения, а конечные результаты — это листья. У нас есть следующие два типа деревьев решений.

  • Деревья решений классификации — В деревьях такого типа переменная решения является категориальной. Приведенное выше дерево решений является примером дерева решений классификации.

  • Деревья решений регрессии. В деревьях решений такого типа переменная решения является непрерывной.

Деревья решений классификации — В деревьях такого типа переменная решения является категориальной. Приведенное выше дерево решений является примером дерева решений классификации.

Деревья решений регрессии. В деревьях решений такого типа переменная решения является непрерывной.

Реализация алгоритма дерева решений

Индекс Джини

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

Чем выше значение индекса Джини, тем выше однородность. Идеальное значение индекса Джини равно 0, а худшее — 0,5 (для задачи 2 класса). Индекс Джини для разделения можно рассчитать с помощью следующих шагов —

  • Сначала вычислите индекс Джини для подузлов, используя формулу p ^ 2 + q ^ 2 , которая является суммой квадрата вероятности успеха и неудачи.

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

Сначала вычислите индекс Джини для подузлов, используя формулу p ^ 2 + q ^ 2 , которая является суммой квадрата вероятности успеха и неудачи.

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

Алгоритм дерева классификации и регрессии (CART) использует метод Джини для генерации двоичных разбиений.

Сплит Создание

Разделение в основном включает в себя атрибут в наборе данных и значение. Мы можем создать разделение в наборе данных с помощью следующих трех частей —

  • Часть 1: Расчет баллов Джини. Мы только что обсудили эту часть в предыдущем разделе.

  • Часть 2. Разделение набора данных. Его можно определить как разделение набора данных на два списка строк, имеющих индекс атрибута и значение разделения этого атрибута. Получив две группы — правую и левую, из набора данных, мы можем вычислить значение разделения, используя показатель Джини, рассчитанный в первой части. Значение разделения будет определять, в какой группе будет находиться атрибут.

  • Часть 3: Оценка всех расщеплений. Следующая часть после нахождения оценки Джини и набора данных расщепления — это оценка всех расщеплений. Для этого, во-первых, мы должны проверить каждое значение, связанное с каждым атрибутом, как разделение кандидатов. Затем нам нужно найти наилучшее возможное разделение, оценив стоимость разделения. Наилучшее разделение будет использоваться в качестве узла в дереве решений.

Часть 1: Расчет баллов Джини. Мы только что обсудили эту часть в предыдущем разделе.

Часть 2. Разделение набора данных. Его можно определить как разделение набора данных на два списка строк, имеющих индекс атрибута и значение разделения этого атрибута. Получив две группы — правую и левую, из набора данных, мы можем вычислить значение разделения, используя показатель Джини, рассчитанный в первой части. Значение разделения будет определять, в какой группе будет находиться атрибут.

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

Строим дерево

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

Часть 1: Создание терминального узла

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

  • Максимальная глубина дерева — как следует из названия, это максимальное количество узлов в дереве после корневого узла. Мы должны прекратить добавлять терминальные узлы, как только дерево достигнет максимальной глубины, т.е. как только дерево получит максимальное количество терминальных узлов.

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

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

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

Терминальный узел используется для окончательного прогноза.

Часть 2: Рекурсивное расщепление

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

прогнозирование

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

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

Предположения

Ниже приведены некоторые предположения, которые мы делаем при создании дерева решений:

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

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

  • На основе значений атрибута записи распределяются рекурсивно.

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

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

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

На основе значений атрибута записи распределяются рекурсивно.

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

Реализация в Python

пример

В следующем примере мы собираемся реализовать классификатор дерева решений для индийского диабета Пима —

Во-первых, начните с импорта необходимых пакетов Python —

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

Затем загрузите набор данных iris с веб-ссылки следующим образом:

col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
pima = pd.read_csv(r"C:\pima-indians-diabetes.csv", header = None, names = col_names)
pima.head()
беременная глюкоза BP кожа инсулин индекс массы тела Родословная Возраст этикетка
0 6 148 72 35 0 33,6 0,627 50 1
1 1 85 66 29 0 33,6 0,627 50 1
2 8 183 64 0 0 23,3 0,672 32 1
3 1 89 66 23 94 28,1 0,167 21 0
4 0 137 40 35 168 43,1 2,288 33 1

Теперь разделите набор данных на объекты и целевую переменную следующим образом:

feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X = pima[feature_cols] # Features
y = pima.label # Target variable

Далее, мы разделим данные на разделение на поезда и тесты. Следующий код разделит набор данных на 70% данных обучения и 30% данных тестирования.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 1)

Затем обучаем модель с помощью класса sklearn класса DecisionTreeClassifier следующим образом —

clf = DecisionTreeClassifier()
clf = clf.fit(X_train,y_train)

Наконец нам нужно сделать прогноз. Это можно сделать с помощью следующего скрипта —

y_pred = clf.predict(X_test)

Далее мы можем получить оценку точности, матрицу путаницы и отчет о классификации следующим образом:

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

Выход

Confusion Matrix:
   [[116 30]
   [ 46 39]]
Classification Report:
              precision     recall      f1-score     support
        0          0.72       0.79          0.75         146
        1          0.57       0.46          0.51          85
micro avg          0.67       0.67          0.67         231
macro avg          0.64       0.63          0.63         231
weighted avg       0.66       0.67          0.66         231

Accuracy: 0.670995670995671

Визуализация дерева решений

Приведенное выше дерево решений можно визуализировать с помощью следующего кода:

from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO
from IPython.display import Image
import pydotplus
dot_data = StringIO()
export_graphviz(clf, out_file=dot_data, filled=True, rounded=True,
   special_characters=True,feature_names = feature_cols,class_names=['0','1'])

graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_png('Pima_diabetes_Tree.png')
Image(graph.create_png())