CatBoost — библиотека, разработанная Яндексом в 2017 году, представляет собой разновидность алгоритмов семейства Boosting и представляет собой улучшенную реализацию деревьев решений градиентного бустинга (GBDT).
CatBoost поддерживает категориальные переменные и обеспечивает высокую точность.
Стоит сказать, что CatBoost решает проблему градиентного смещения (Gradient Bias) и смещения прогноза (Prediction Shift), это позволяет снизить вероятность переобучения и повысить точность алгоритма.
Откройте Jupyter Notebook и начните работать с CatBoost. Импортируем нужные нам библиотеки:
Загрузка набора данных:import pandas as pd import os import numpy as np np.set_printoptions(precision=4) import catboost from catboost import * from catboost import datasets
(train_df, test_df) = catboost.datasets.amazon()
Давайте посмотрим на нашу подборку:
train_df.head()
X = train_df.drop("ACTION", axis=1)
y = train_df["ACTION"]
Catboost должен указать, какие функции являются категориальными; для этого нужно передать массив с индексами категориальных признаков:
cat_features = list(range(0, X.shape[1]))
print(cat_features)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
Давайте посмотрим на соотношение классов в нашем наборе данных; для этого посчитаем количество нулей и единиц:
print(f"Labels: {set(y)}")
print(f"Zero count: {len(y)-sum(y)}, One count: {sum(y)}")
Labels: {0, 1}
Zero count: 1897, One count: 30872
В выборке 1897 нулей, а единиц 30872, это говорит о дисбалансе классов, на это нужно обратить внимание.
Перед обучением модели необходимо подготовить данные, этот фрагмент кода позволяет это сделать: dataset_dir = ".
/amazon"
if not os.path.exists(dataset_dir):
os.makedirs(dataset_dir)
train_df.to_csv(os.path.join(dataset_dir, 'train.tsv'),
index=False, sep='\t', header=False)
test_df.to_csv(os.path.join(dataset_dir, 'test.tsv'),
index=False, sep='\t', header=False)
train_df.to_csv(os.path.join(dataset_dir, 'train.csv'),
index=False, sep=',', header=True)
test_df.to_csv(os.path.join(dataset_dir, 'test.csv'),
index=False, sep=',', header=True)
Давайте посмотрим, как был записан наш набор данных: !head amazon/train.csv
ACTION,RESOURCE,MGR_ID,ROLE_ROLLUP_1,ROLE_ROLLUP_2,ROLE_DEPTNAME,ROLE_TITLE,ROLE_FAMILY_DESC,ROLE_FAMILY,ROLE_CODE
1,39353,85475,117961,118300,123472,117905,117906,290919,117908
1,17183,1540,117961,118343,123125,118536,118536,308574,118539
1,36724,14457,118219,118220,117884,117879,267952,19721,117880
1,36135,5396,117961,118343,119993,118321,240983,290919,118322
1,42680,5905,117929,117930,119569,119323,123932,19793,119325
0,45333,14561,117951,117952,118008,118568,118568,19721,118570
1,25993,17227,117961,118343,123476,118980,301534,118295,118982
1,19666,4209,117961,117969,118910,126820,269034,118638,126822
1,31246,783,117961,118413,120584,128230,302830,4673,128231
Чтобы Catboost правильно прочитал наши данные, ему нужно понять, что в каком столбце, напишем код, который генерирует файл описания столбца, где будет описано, какой столбец что: from catboost.utils import create_cd
feature_names = dict()
for column, name in enumerate(train_df):
if column == 0:
continue
feature_names[column-1] = name
create_cd(
label=0,
cat_features=list(range(1, train_df.columns.shape[0])),
feature_names=feature_names,
output_path=os.path.join(dataset_dir, 'train.cd')
)
Давайте посмотрим на сгенерированный файл: !cat amazon/train.cd
0
Теги: #Машинное обучение #Алгоритмы #программирование #данные #обработка данных #catboost #action
-
10 Способов Убить Компьютер
19 Oct, 24