Алгоритм CatBoost в машинном обучении
Алгоритм CatBoost основан на градиентном спуске, который является мощным методом решения задач классификации и регрессии в машинном обучении. В этой статье я познакомлю вас с алгоритмом CatBoost в машинном обучении и его реализацией с использованием Python.
Алгоритм CatBoost в машинном обучении
Алгоритм CatBoost основан на градиентном спуске и представляет собой мощный метод решения задач в машинном обучении с учителем. Он хорошо подходит для задач, связанных с категориальными данными. Он широко используется для задач регрессии и классификации, а также является одним из самых часто используемых алгоритмов в соревнованиях Kaggle.
Алгоритм CatBoost основан на градиентных деревьях решений, и при обучении этой модели последовательно строится набор деревьев решений. По мере обучения каждое последующее дерево строится с меньшими потерями по сравнению с предыдущим деревом.
В следующем разделе я расскажу, как реализовать алгоритм CatBoost в машинном обучении с помощью языка программирования Python.
Алгоритм CatBoost с использованием Python
Теперь давайте посмотрим, как реализовать алгоритм CatBoost в машинном обучении с использованием Python. Здесь я буду использовать классический набор данных Titanic, который является одним из самых известных наборов данных в сообществе специалистов по науке о данных. Теперь давайте начнем с импорта необходимых библиотек Python и набора данных:
import pandas as pd from pandas.api.types import is_numeric_dtype from sklearn.model_selection import train_test_split !pip install catboost import catboost as cb from sklearn.metrics import classification_report import matplotlib.pyplot as plt import seaborn as sns data = pd.read_csv('https://biconsult.ru/img/datascience-ml-ai/titanic.csv') data.head()
Набор данных Titanic
Подготовка данных
Перед тем, как обучать модель очень важно подготовить данные из модели машинного обучения, поэтому здесь я выполню следующие шаги для подготовки данных: Перед обучением модели очень важно подготовить данные из модели машинного обучения, поэтому здесь я выполню следующие шаги для подготовки данных:
- Сначала я удалю столбец «Выжившие», поскольку он будет нашей целевой переменной.
- Затем я разделю данные, создав два фрейма данных, например, x и y, в одном будет целевая переменная, а в другом – полезные функции для модели.
- Затем я конвертирую столбец «Pclass» в строковый тип данных, а затем заполняю пустые значения, присутствующие в функциях.
data.dropna(subset=['Survived'],inplace=True) X = data[['Pclass', 'Sex', 'Age', 'Fare']] y = data['Survived'] X['Pclass'] = X['Pclass'].astype('str') X['Fare'].fillna(0,inplace=True) X['Age'].fillna(0,inplace=True)
Итак, как уже упоминалось в начале, алгоритм CatBoost – это мощный алгоритм машинного обучения для категориальных функций, здесь я создам две вспомогательные функции для создания списка индексов столбцов, содержащих категориальные данные, затем нам нужно преобразовать все столбцы в данные категории. тип:
def get_categorical_indicies(X): cats = [] for col in X.columns: if is_numeric_dtype(X[col]): pass else: cats.append(col) cat_indicies = [] for col in cats: cat_indicies.append(X.columns.get_loc(col)) return cat_indicies categorical_indicies = get_categorical_indicies(X) def convert_cats(X): cats = [] for col in X.columns: if is_numeric_dtype(X[col]): pass else: cats.append(col) cat_indicies = [] for col in cats: X[col] = X[col].astype('category') convert_cats(X)
Теперь я разделю данные на 20% – набор для тестирования и 80% – набор для обучения:
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.2, random_state=101, stratify=y)
Теперь перед обучением модели давайте посмотрим, правильно ли сбалансированы данные:
print('Test Survival Rate:',y_test.sum()/y_test.count())
результат:
Test Survival Rate: 0.3854748603351955
Итак, мы видим, что данные не сбалансированы, есть много способов справиться с этим, но я просто уменьшу выборку данных:
train_df = pd.concat([X,y],axis=1) survived = train_df[train_df['Survived']==1] deceased = train_df[train_df['Survived']==0] deceased = deceased.sample(n=len(survived), random_state=101) train_df = pd.concat([survived,deceased],axis=0) X_train = train_df.drop('Survived',axis=1) y_train = train_df['Survived']
Заключительный шаг: обучающая модель
Теперь давайте обучим модель с помощью алгоритма CatBoost с использованием Python и распечатаем отчет о классификации:
train_dataset = cb.Pool(X_train,y_train, cat_features=categorical_indicies) test_dataset = cb.Pool(X_test,y_test, cat_features=categorical_indicies) model = cb.CatBoostClassifier(loss_function='Logloss', eval_metric='Accuracy') grid = {'learning_rate': [0.03, 0.1], 'depth': [4, 6, 10], 'l2_leaf_reg': [1, 3, 5,], 'iterations': [50, 100, 150]} model.grid_search(grid,train_dataset) pred = model.predict(X_test) print(classification_report(y_test, pred))
результат:
precision recall f1-score support 0 0.77 0.89 0.82 110 1 0.76 0.57 0.65 69 accuracy 0.77 179 macro avg 0.77 0.73 0.74 179 weighted avg 0.77 0.77 0.76 179
Вот как мы можем использовать алгоритм Catboost в машинном обучении с помощью Python. Надеюсь, вам понравилась эта статья об алгоритме CatBoost в машинном обучении и его реализации с использованием Python.