Алгоритм 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.



