Модели ансамбля, простое руководство с образцом кода. Часть 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)