Модели ансамбля, простое руководство с образцом кода. Часть 1 (деревья решений)

Шорук Г. Аввад, Msc. в ИИ @ ФАУ

что подразумевается под ансамблевыми моделями? В чем разница между бустингом и бэггингом? И почему мы вообще используем модели Ensemble?

На все эти вопросы мы ответим в этой статье…

Прежде чем мы поговорим о ансамблевых моделях, мы должны понять ТЕЛЕЖКИ (деревья классификации и регрессии).

Что подразумевается под ТЕЛЕГАМИ и как они работают?

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

Процесс рекурсивного разделения набора данных продолжается до тех пор, пока не будет выполнен критерий остановки: этот критерий обычно устанавливается при обучении.

например Остановите рекурсивное секционирование, если секция достигла предела минимального количества точек данных в листовых узлах, или остановите секционирование, если достигнута максимальная глубина дерева.

Если процесс обучения предназначен для классификации, класс определяется путем измерения частоты его появления в конечном узле.

Если для регрессии используется CART, для вычисления y берется среднее значение точек данных, собранных на листе.

Является ли процесс обучения CART параметрическим или непараметрическим процессом?

CART не является параметрическим, однако у него есть гиперпараметры, которые следует тщательно настраивать во время обучения. (о настройке гиперпараметров мы поговорим в отдельной статье). Достаточно знать, что самый важный гиперпараметр, который мы должны настроить в Carts, — это максимальная глубина.

Очень глубокое дерево больше соответствует обучающим данным, а очень мелкое искажает структуру данных (не соответствует).

Обычно CART регулируются с помощью обрезки.

Обрезка: удаление узлов или полных частей дерева, что меньше влияет на обучение и увеличивает затраты на вычисления и проблемы с подгонкой.

Как мы измеряем эффективность CART?

Чтобы измерить производительность CART, мы используем два метода в зависимости от того, была ли Проблема классификацией или регрессией.

В классификации: мы используем индекс Джини.

Индекс Джини рассчитывается путем получения суммы квадратов вероятностей всех классов. Он измеряет, как данные распределяются между классами.

Его можно сформулировать следующим образом:

где n - общее количество классов

0: для индекса Джини предполагается, что в наборе данных есть только один класс.

1: предполагает, что все точки данных распределены случайным образом, и из набора данных нельзя сделать вывод о подраспределениях или закономерностях.

0,5: (оптимально) предполагает, что набор данных равномерно распределен по n классам.

Подсказка: мы также можем использовать отрицательную перекрестную энтропию в качестве метрики, поскольку ее значение будет варьироваться от нуля до единицы, а ее график будет изогнутым, как индекс Джини, обеспечивающий максимальную производительность, когда он равен 0,5.

Где в регрессии: производительность модели измеряется с использованием среднеквадратичной ошибки:

MSE = (1/n) * Σ(i=от 1 до n) (yi — ŷi)²

Надеюсь, мы смогли усвоить концепцию, теперь давайте перейдем к части кодирования:

# Import required libraries
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# Load data
data = pd.read_csv('data.csv')

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

# Define parameter grid for tuning
param_grid = {
    'criterion': ['gini', 'entropy'],
    'max_depth': [3, 5, 7],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 4],
}

# Initialize decision tree classifier
dtc = DecisionTreeClassifier(random_state=42)

# Perform grid search for hyperparameter tuning
grid_search = GridSearchCV(dtc, param_grid, cv=5, n_jobs=-1)
grid_search.fit(X_train, y_train)

# Print the best hyperparameters
print('Best hyperparameters:', grid_search.best_params_)

# Make predictions using the tuned model
y_pred = grid_search.predict(X_test)

# Evaluate model performance
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)