Повышение Градиента С Помощью Catboost

CatBoost — библиотека, разработанная Яндексом в 2017 году, представляет собой разновидность алгоритмов семейства Boosting и представляет собой улучшенную реализацию деревьев решений градиентного бустинга (GBDT).

CatBoost поддерживает категориальные переменные и обеспечивает высокую точность.

Стоит сказать, что CatBoost решает проблему градиентного смещения (Gradient Bias) и смещения прогноза (Prediction Shift), это позволяет снизить вероятность переобучения и повысить точность алгоритма.



Повышение градиента с помощью CATBOOST

Откройте 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()



Повышение градиента с помощью CATBOOST



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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.