Архітектура, застосування та інсайти
У галузі машинного навчання алгоритми рішень дерева є одними з найпопулярніших і найзручніших методів. Дерева рішень забезпечують просту, зрозумілу модель як для задач регресії, так і для задач класифікації завдяки їхній структурі, схожій на дерево. У цій статті будуть розглянуті архітектура дерев рішень, їх використання в класифікації та регресії, а також аналіз їх переваг і недоліків.
Архітектура дерев рішень
Дерево рішень є структурою, схожою на блок-схему, де кожен внутрішній вузол відповідає тесту чи рішенню за атрибутом, кожна гілка — результату рішення, а кожен листовий вузол — фінальному прогнозу чи результату. Структуру можна розділити на три основні компоненти:
- Корінний вузол: Початкова точка дерева, де для першого вибору використовується найважливіша ознака.
- Вузли рішень: Внутрішні вузли, які створюють гілки, поділяючи набір даних за конкретними критеріями.
- Листові вузли: Кінцеві вузли дерева, що представляють очікуване значення в регресії або фінальний вихід чи мітку класу в класифікації.
Для створення дерева рішень необхідно вибрати найкращу ознаку для розбиття даних на кожному вузлі. Залежно від типу проблеми цей вибір здійснюється з урахуванням таких метрик, як зменшення дисперсії, ентропія або нечистота Джіні.
Дерева рішень у регресії
Для завдань регресії дерева рішень прогнозують неперервні значення. В межах отриманих підмножин алгоритм розподіляє набір даних за ознакою, яка зменшує дисперсію цільової змінної. На кожному листовому вузлі прогноз зазвичай є середнім значенням цільових значень у цій підмножині.
Приклад використання: Прогнозування цін на будинки на основі таких факторів, як площа, кількість спалень і місцезнаходження.
Реалізація регресії
from sklearn.datasets import fetch_california_housing
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np
# Завантаження набору даних
housing = fetch_california_housing()
X = housing.data
y = housing.target
# Поділ даних на навчальну та тестову вибірки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Створення і тренування моделі дерева рішень
regressor = DecisionTreeRegressor(criterion='mse', max_depth=5, random_state=42)
regressor.fit(X_train, y_train)
# Прогнозування
y_pred = regressor.predict(X_test)
# Оцінка моделі
mse = mean_squared_error(y_test, y_pred)
print(f"Середня квадратична помилка: {mse:.2f}")
# Важливість ознак
feature_importances = regressor.feature_importances_
for name, importance in zip(housing.feature_names, feature_importances):
print(f"{name}: {importance:.4f}")
Дерева рішень у класифікації
У задачах класифікації дерева рішень надають мітки класів для даних.
Алгоритм вибирає розбиття, яке оптимізує чистоту класів в отриманих підмножинах; якість розбиттів часто оцінюється за допомогою таких метрик, як інформаційний приріст або нечистота Джіні.
Приклад використання: Класифікація електронної пошти як спаму чи не спаму на основі ключових слів, відправника та метаданих.
Реалізація класифікації
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Завантаження набору даних
iris = load_iris()
X = iris.data
y = iris.target
# Поділ даних на навчальну та тестову вибірки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Створення і тренування моделі дерева рішень
clf = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)
clf.fit(X_train, y_train)
# Прогнозування
y_pred = clf.predict(X_test)
# Оцінка моделі
accuracy = accuracy_score(y_test, y_pred)
print(f"Точність: {accuracy:.2f}")
# Візуалізація дерева рішень
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 8))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()
Переваги дерев рішень
- Інтерпретованість: Навіть для зацікавлених осіб, які не мають технічних знань, дерева рішень є зрозумілими та легкими для аналізу. Процес прийняття рішень наочно ілюструється структурою дерева.
- Непараметрична природа: Вони є гнучкими для різних застосувань, оскільки не роблять жодних припущень щодо розподілу даних.
- Важливість ознак: Дерева рішень за замовчуванням надають оцінки важливості ознак, що дає змогу зрозуміти найбільш важливі змінні.
- Управління нелінійністю: Вони ефективно моделюють нелінійні зв'язки.
- Мінімальна підготовка даних: Для дерев рішень потрібна мінімальна обробка даних, наприклад, масштабування або нормалізація.
Недоліки дерев рішень
- Переобучення: Коли дерева рішень стають занадто складними, вони можуть перенавчитися на тренувальних даних. Це часто зменшується за допомогою стратегій, таких як обрізка або встановлення обмежень, таких як максимальна глибина.
- Нестабільність: Дерева, чутливі до шуму, можуть суттєво змінюватися через незначні зміни в даних.
- Упередженість до домінуючих класів: Без належних технік балансування дерева рішень можуть бути упередженими до більшості класу в незбалансованих наборах даних.
- Неоптимальні прогнози: Дерева можуть мати проблеми з неперервними цільовими змінними або плавними межами класів, що може призвести до прогнозів із різкими розривами.
Перекладено з: Decision Tree Algorithms