logo

Алгоритм класифікації дерева рішень

  • Дерево рішень - це a Методика навчання під контролем який можна використовувати як для задач класифікації, так і для задач регресії, але здебільшого він кращий для вирішення задач класифікації. Це деревоподібний класифікатор, де внутрішні вузли представляють особливості набору даних, гілки представляють правила прийняття рішень і кожен листовий вузол представляє результат.
  • У дереві рішень є два вузли, які є Вузол рішення і Листковий вузол. Вузли рішень використовуються для прийняття будь-яких рішень і мають кілька гілок, тоді як листові вузли є результатом цих рішень і не містять жодних гілок.
  • Рішення або перевірка виконуються на основі особливостей даного набору даних.
  • Це графічне представлення для отримання всіх можливих рішень проблеми/рішення на основі заданих умов.
  • Це називається деревом рішень, тому що, подібно до дерева, воно починається з кореневого вузла, який розширюється на наступні гілки та створює деревоподібну структуру.
  • Щоб побудувати дерево, ми використовуємо Алгоритм CART, який означає Алгоритм класифікації та дерева регресії.
  • Дерево рішень просто задає запитання, а на основі відповіді (Так/Ні) розбиває дерево на піддерева.
  • Схема нижче пояснює загальну структуру дерева рішень:

Примітка. Дерево рішень може містити категоричні дані (ТАК/НІ), а також числові дані.

Алгоритм класифікації дерева рішень

Навіщо використовувати Дерева рішень?

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

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

Термінології дерева рішень

Кореневий вузол:Кореневий вузол – це місце, де починається дерево рішень. Він представляє весь набір даних, який далі ділиться на два або більше однорідних наборів.Листовий вузол:Листові вузли є кінцевим вихідним вузлом, і дерево не може бути відокремлено далі після отримання листкового вузла.Розщеплення:Розбиття — це процес поділу вузла рішення/кореневого вузла на підвузли відповідно до заданих умов.Гілка/піддерево:Дерево, утворене розколом дерева.Обрізка:Обрізка - це процес видалення непотрібних гілок з дерева.Батьківський/дочірній вузол:Кореневий вузол дерева називається батьківським вузлом, а інші вузли називаються дочірніми вузлами.

Як працює алгоритм дерева рішень?

У дереві рішень для прогнозування класу даного набору даних алгоритм починається з кореневого вузла дерева. Цей алгоритм порівнює значення кореневого атрибута з атрибутом запису (реального набору даних) і на основі порівняння слідує за гілкою та переходить до наступного вузла.

Для наступного вузла алгоритм знову порівнює значення атрибута з іншими підвузлами та рухається далі. Він продовжує процес, доки не досягне листового вузла дерева. Повний процес можна краще зрозуміти за допомогою наведеного нижче алгоритму:

    Крок 1:Почніть дерево з кореневого вузла, каже S, який містить повний набір даних.Крок 2:Знайдіть найкращий атрибут у наборі даних за допомогою Міра вибору атрибутів (ASM). Крок 3:Розділіть S на підмножини, які містять можливі значення для найкращих атрибутів.Крок 4:Згенеруйте вузол дерева рішень, який містить найкращий атрибут.Крок 5:Рекурсивно створюйте нові дерева рішень, використовуючи підмножини набору даних, створеного на кроці -3. Продовжуйте цей процес, доки не досягнете стадії, на якій ви не зможете далі класифікувати вузли, а остаточний вузол називатимете листовим вузлом.

приклад: Припустімо, що є кандидат, який має пропозицію про роботу і хоче вирішити, приймати його чи ні. Отже, щоб вирішити цю проблему, дерево рішень починається з кореневого вузла (атрибут Salary за ASM). Кореневий вузол поділяється на наступний вузол прийняття рішення (відстань від офісу) і один кінцевий вузол на основі відповідних міток. Наступний вузол прийняття рішень далі розбивається на один вузол прийняття рішень (засіб Cab) і один кінцевий вузол. Нарешті, вузол прийняття рішень розбивається на два кінцевих вузли (Прийняті пропозиції та Відхилена пропозиція). Розгляньте схему нижче:

repl в java
Алгоритм класифікації дерева рішень

Заходи вибору атрибутів

Під час впровадження дерева рішень головне питання полягає в тому, як вибрати найкращий атрибут для кореневого вузла та для підвузлів. Отже, для вирішення таких проблем існує методика, яка називається as Міра вибору атрибутів або ASM. За допомогою цього вимірювання ми можемо легко вибрати найкращий атрибут для вузлів дерева. Існує дві популярні методики ASM, а саме:

    Приріст інформації Індекс Джині

1. Приріст інформації:

  • Приріст інформації – це вимірювання змін ентропії після сегментації набору даних на основі атрибута.
  • Він обчислює, скільки інформації надає нам функція про клас.
  • Відповідно до значення приросту інформації ми розбиваємо вузол і будуємо дерево рішень.
  • Алгоритм дерева рішень завжди намагається максимізувати значення приросту інформації, і вузол/атрибут, що має найбільший приріст інформації, розділяється першим. Його можна розрахувати за наведеною нижче формулою:
 Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature) 

Ентропія: Ентропія – це метрика для вимірювання домішки в даному атрибуті. Він визначає випадковість даних. Ентропію можна обчислити як:

Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)

Де,

    S= Загальна кількість зразків P(yes)= ймовірність так P(ні)= ймовірність ні

2. Індекс Джині:

  • Індекс Джіні — це міра домішок або чистоти, яка використовується під час створення дерева рішень в алгоритмі CART (Дерево класифікації та регресії).
  • Атрибуту з низьким індексом Джині слід віддавати перевагу порівняно з високим індексом Джині.
  • Він створює лише двійкові розділення, а алгоритм CART використовує індекс Джіні для створення двійкових розділень.
  • Індекс Джині можна розрахувати за такою формулою:
 Gini Index= 1- &#x2211;<sub>j</sub>P<sub>j</sub><sup>2</sup> 

Обрізка: отримання оптимального дерева рішень

Відсікання — це процес видалення непотрібних вузлів із дерева, щоб отримати оптимальне дерево рішень.

Занадто велике дерево збільшує ризик переобладнання, а маленьке дерево може не охопити всі важливі характеристики набору даних. Таким чином, метод, який зменшує розмір дерева навчання без зниження точності, відомий як скорочення. В основному існує два види дерев обрізка використана технологія:

    Обрізка складності вартості Зменшена кількість помилок.

Переваги дерева рішень

  • Це легко зрозуміти, оскільки він слідує тому ж процесу, якому дотримується людина, приймаючи будь-які рішення в реальному житті.
  • Це може бути дуже корисним для вирішення проблем, пов'язаних з прийняттям рішень.
  • Це допомагає подумати про всі можливі наслідки проблеми.
  • Порівняно з іншими алгоритмами вимагається менше очищення даних.

Недоліки дерева рішень

  • Дерево рішень містить багато шарів, що робить його складним.
  • У нього може виникнути проблема з переобладнанням, яку можна вирішити за допомогою Алгоритм випадкового лісу.
  • Для більшої кількості міток класу обчислювальна складність дерева рішень може зрости.

Реалізація дерева рішень Python

Тепер ми реалізуємо дерево рішень за допомогою Python. Для цього ми будемо використовувати набір даних ' user_data.csv ,' яку ми використовували в попередніх моделях класифікації. Використовуючи той самий набір даних, ми можемо порівняти класифікатор дерева рішень з іншими моделями класифікації, такими як КНН SVM, Логістична регресія тощо.

шаблони програмування java

Кроки також залишаться незмінними, наведені нижче.

    Етап попередньої обробки даних Пристосування алгоритму дерева рішень до навчального набору Прогнозування результату тесту Перевірка точності результату (Створення матриці плутанини) Візуалізація результату тестового набору.

1. Етап попередньої обробки даних:

Нижче наведено код етапу попередньої обробки:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv(&apos;user_data.csv&apos;) #Extracting Independent and dependent Variable x= data_set.iloc[:, [2,3]].values y= data_set.iloc[:, 4].values # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.25, random_state=0) #feature Scaling from sklearn.preprocessing import StandardScaler st_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_test= st_x.transform(x_test) 

У наведеному вище коді ми попередньо обробили дані. Куди ми завантажили набір даних, який надається як:

Алгоритм класифікації дерева рішень

2. Підгонка алгоритму Дерева рішень до навчального набору

Тепер підганяємо модель до навчального набору. Для цього ми будемо імпортувати DecisionTreeClassifier клас від sklearn.tree бібліотека. Нижче наведено його код:

бінарне дерево пошуку]
 #Fitting Decision Tree classifier to the training set From sklearn.tree import DecisionTreeClassifier classifier= DecisionTreeClassifier(criterion=&apos;entropy&apos;, random_state=0) classifier.fit(x_train, y_train) 

У наведеному вище коді ми створили об’єкт класифікатора, в який ми передали два основні параметри;

    'criterion='entropy':Критерій використовується для вимірювання якості розщеплення, яка обчислюється за допомогою інформаційного приросту, визначеного ентропією.random_state=0':Для генерації випадкових станів.

Нижче наведено результат для цього:

 Out[8]: DecisionTreeClassifier(class_weight=None, criterion=&apos;entropy&apos;, max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=0, splitter=&apos;best&apos;) 

3. Прогнозування результату тесту

Тепер спрогнозуємо результат тестового набору. Ми створимо новий вектор прогнозу y_pred. Нижче наведено його код:

 #Predicting the test set result y_pred= classifier.predict(x_test) 

Вихід:

На наведеному нижче вихідному зображенні наведено передбачуваний результат і реальний результат тестування. Ми чітко бачимо, що у векторі передбачення є деякі значення, які відрізняються від реальних значень вектора. Це помилки передбачення.

java сортує список масивів
Алгоритм класифікації дерева рішень

4. Перевірити точність результату (матриця створення плутанини)

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

 #Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred) 

Вихід:

Алгоритм класифікації дерева рішень

На вихідному зображенні вище ми можемо побачити матрицю плутанини, яка має 6+3= 9 невірних передбачень і 62+29=91 правильних передбачень. Таким чином, ми можемо сказати, що порівняно з іншими моделями класифікації, класифікатор Decision Tree зробив хороший прогноз.

5. Візуалізація результату тренувального набору:

Тут ми візуалізуємо результат тренувального набору. Для візуалізації результату навчального набору ми побудуємо графік для класифікатора дерева рішень. Класифікатор передбачить «так» або «ні» для користувачів, які придбали або не придбали позашляховик, як ми робили в логістичній регресії. Нижче наведено його код:

 #Visulaizing the trianing set result from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;purple&apos;,&apos;green&apos; ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;purple&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;Decision Tree Algorithm (Training set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Вихід:

Алгоритм класифікації дерева рішень

Наведений вище вихід повністю відрізняється від решти моделей класифікації. Він має як вертикальні, так і горизонтальні лінії, які розділяють набір даних відповідно до змінної віку та передбачуваної зарплати.

Як ми бачимо, дерево намагається охопити кожен набір даних, що є випадком переобладнання.

6. Візуалізація результату тестового набору:

Візуалізація результату тестового набору буде подібна до візуалізації навчального набору, за винятком того, що навчальний набір буде замінено на тестовий набір.

спробуйте структуру даних
 #Visulaizing the test set result from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;purple&apos;,&apos;green&apos; ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;purple&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;Decision Tree Algorithm(Test set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Вихід:

Алгоритм класифікації дерева рішень

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