Деревья решений — это популярный контролируемый алгоритм машинного обучения, который используется как для задач классификации, так и для задач регрессии. Основная идея деревьев решений состоит в том, чтобы разделить данные на все более мелкие подгруппы на основе признаков и целевых переменных, пока данные в каждой подгруппе не станут максимально чистыми. Этот процесс повторяется до тех пор, пока не будет достигнут критерий остановки, такой как максимальная глубина дерева или минимальное количество выборок в каждом листе.
В этой статье мы рассмотрим этапы построения модели дерева решений, начиная с надежного примера. В качестве примера в этой статье используется набор данных «Доход взрослых» из репозитория машинного обучения 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()
Выход:
В заключение, деревья решений — это мощный алгоритм машинного обучения, который можно использовать как для задач классификации, так и для задач регрессии. Их легко понять и интерпретировать, и они обеспечивают визуальное представление того, как модель делает прогнозы. В этой статье мы прошли этапы построения модели дерева решений и оценили ее производительность. Удачного кодирования!