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

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

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

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

Что касается обучения деревьев решений, важно отметить, что алгоритм основан на концепции рекурсивного разделения данных. Цель состоит в том, чтобы найти функцию, порог и значение, которые приводят к наиболее однородным подмножествам данных с наименьшей примесью (или насколько смешаны метки в подмножестве). Наиболее часто используемой мерой примеси является примесь Джини (метрика для измерения того, как часто случайно выбранный элемент из набора будет неправильно помечен, если он будет помечен случайным образом в соответствии с распределением меток в подмножестве). Затем алгоритм продолжает разбивать подмножества на основе признака, который приводит к наименьшей примеси Джини, пока не будет выполнен критерий остановки, такой как достижение максимальной глубины или минимального количества выборок в листовом узле.

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

# Load the data
from sklearn.datasets import load_iris
import numpy as np
iris = load_iris()

# Split the data into training and testing sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)

# Import the required libraries
from sklearn.tree import export_graphviz
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
import graphviz
import matplotlib.pyplot as plt

# Create an instance of the DecisionTreeClassifier class
clf = DecisionTreeClassifier(criterion='gini')

# Fit the model using the training data
clf.fit(X_train, y_train)

# Visualize the decision tree
dot_data = export_graphviz(clf, out_file=None, feature_names=[f"feature{i}" for i in range(X_train.shape[1])], class_names=[f"class{i}" for i in range(y_test.shape[0])])
graph = graphviz.Source(dot_data)
graph.render("decision_tree")

# Create an instance of the RandomForestClassifier class
clf = RandomForestClassifier(n_estimators=100)

# Fit the model using the training data
clf.fit(X_train, y_train)

# Visualize the feature importance
importances = clf.feature_importances_
indices = np.argsort(importances)[::-1]
plt.barh(range(X_train.shape[1]), importances[indices])
plt.yticks(range(X_train.shape[1]), [X_train[0][i] for i in indices])
plt.xlabel("Feature importance")
plt.ylabel("Feature")
plt.show()

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

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

Предыдущая часть: