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

В этой статье мы рассмотрим этапы построения модели дерева решений, начиная с надежного примера. В качестве примера в этой статье используется набор данных «Доход взрослых» из репозитория машинного обучения UCI. Этот набор данных содержит информацию о доходах отдельных лиц, таких как их возраст, образование, профессия и многое другое. Цель состоит в том, чтобы предсказать, зарабатывает ли человек больше или меньше 50 000 долларов в год на основе других переменных в наборе данных.

Загрузите и предварительно обработайте данные

Первый шаг — загрузить данные в нашу среду Python. Мы будем использовать библиотеку pandas для чтения данных в кадр данных pandas. Данные можно загрузить с веб-сайта репозитория машинного обучения UCI.

import pandas as pd

# Load the data into a pandas dataframe
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data"
col_names = ['age', 'workclass', 'fnlwgt', 'education', 'education-num',
             'marital-status', 'occupation', 'relationship', 'race', 'sex',
             'capital-gain', 'capital-loss', 'hours-per-week', 'native-country',
             'income']
df = pd.read_csv(url, header=None, names=col_names)

Выход:

Далее нам нужно предварительно обработать данные, преобразовав категориальные переменные в числовые значения. Мы будем использовать функцию get_dummies из библиотеки pandas для создания фиктивных переменных для каждой категориальной переменной в данных.

#Create dummy variables for categorical variables
df = pd.get_dummies(df, columns=['workclass', 'education', 'marital-status', 'occupation',
                                     'relationship', 'race', 'sex', 'native-country'])

Выход:

Разделите данные на наборы для обучения и тестирования.

Теперь, когда данные предварительно обработаны, мы можем разделить их на наборы для обучения и тестирования. Это важно, потому что мы хотим оценить производительность нашей модели на наборе данных, которого она раньше не видела. Функция train_test_split из библиотеки scikit-learn используется для разделения данных на две части.

from sklearn.model_selection import train_test_split

# Split the data into training and testing sets
X = df.drop('income', axis=1)
y = df['income']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Обучите модель дерева решений

Теперь мы можем обучить нашу модель дерева решений. Мы будем использовать класс DecisionTreeClassifier из библиотеки scikit-learn.

from sklearn.tree import DecisionTreeClassifier

# Train the decision tree model
dt = DecisionTreeClassifier(random_state=42)
dt.fit(X_train, y_train)

Оцените производительность модели

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

from sklearn.metrics import accuracy_score, confusion_matrix

# Evaluate the model's performance
y_pred = dt.predict(X_test)
acc = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
print("Accuracy: ", acc)
print("Confusion Matrix: \n", cm)

Выход:

Наконец, мы можем визуализировать наше дерево решений, чтобы лучше понять, как оно делает прогнозы. Функция plot_tree из библиотеки scikit-learn используется для визуализации дерева решений. Визуализация дерева решений — это графическое представление модели дерева решений, показывающее, как модель делает прогнозы.

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

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

import matplotlib.pyplot as plt
from sklearn import tree

# Visualize the decision tree
plt.figure(figsize=(20,10))
tree.plot_tree(dt, feature_names=X.columns, filled=True, rounded=True)
plt.show()

Выход:

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