Catboost для самых маленьких

18 июля 2017 года компания Яндекс выложила в открытый доступ свою новую разработку – Catboost. И всё с ним хорошо и документация имеется, инструмент простой и понятный, как оказалось.

Предыстория
Через некоторое время после выхода Catboost автору нужно было выбрать тему выпускной квалификационной работы. Руководитель ВКР предложил несколько тем на выбор и среди них была «Классификация музыкальных записей по жанрам». Интересная тема, с научным уклоном, да и средства реализации уже имеются.

Время шло и нужно было уже начинать работу над ВКР. Была собрана информация по теме, скачаны отрывки музыкальных записей различных жанров, намечен алгоритм. Однако, изучение Catboost было осложнено тем, что автор не имел опыта работы с машинным обучением, а все статьи с примерами и документация были рассчитаны на определённый уровень знаний и опыта по теме (да, маленький. Но начать – всегда самое сложное).

Начался панический поиск информации и вопросы к осведомлённым людям. Багаж знаний рос, но оставались непонятыми какие-то маленькие определения, которые настолько известны всем осведомлённым, что никто и внимания на них не обращает, ведь без них никуда! Их и не хватало для работы с библиотекой.

В итоге, нужная информация была найдена чёрт знает где и вновь её отыскать довольно проблематично.

image

Цель статьи — не оскорбить кого-то, а помочь таким как автор начать знакомство с машинным обучением.

Как уже говорилось, Catboost может строить модели для классификации. Делается это посредством класса CatBoostClassifier. Чтобы работать с ним, нужно создать обучающую выборку и однозначно показать Catboost что в этой обучающей выборке что (То есть, если нам нужен классификатор для одного класса, мы указываем, что в обучающей выборке нужный нам класс, а что нет, а если нам нужен мультиклассовый классификатор, мы указываем на класс каждого элемента в выборке). Также, если мы хотим видеть, как работает классификатор, необходимо задать тестовую выборку, на которой можно будет проверить работу обученного классификатора.

На примере простейшей задачи разберём как работает классификатор Catboost:
Пусть мы имеем логическую операцию – конъюнкцию. Рассмотрим результат применения её к двум переменным:

image

Видно, что двум входящим значениям соответствует одно исходящее. Эти данные мы и используем для обучения классификатора.

Классификатор Catboost при обучении принимает на вход списки, массивы numpy.array, pandas.Dataframe и pandas.Series. Замечательно, но у нас задача простая, поэтому используем простой список. Так же укажем список меток (обозначающих принадлежность к классу) для обучающей выборки и тестовую выборку.

from catboost import CatBoostClassifier

train_data = [[1, 1], [1, 0], [0, 1], [0, 0]] # обучающая выборка
train_labels = [1, 0, 0, 0] # метки принадлежности к классу. 1 - принадлежит, 0 - не принадлежит
test_data = [[0, 1], [0, 0]] # тестовая выборка

model = CatBoostClassifier(iterations=5) # классификатор
model.fit(train_data, train_labels) # обучение классификатора
prediction = model.predict(test_data) # передача тестовой выборки в модель
print(prediction) # вывод результата "предсказания"

На выходе мы получим «предсказание», то есть, результат работы классификатора. В нашем случае, он выглядит следующим образом:

[ 0. 0.]
Для тестовой выборки

test_data = [[0, 1], [1, 1]]

результат будет [ 0. 1.] и так далее.

Возможности


Таким образом, задав обучающий массив и метки к нему мы можем обучить классификатор на любые данные, представленные в числовой форме. В моей работе в качестве обучающей выборки были использованы отрывки из музыкальных композиций разных жанров, пропущенные через БПФ.

На этом мой доклад окончен, спасибо за внимание.

P.S Официальная документация Catboost, в частности, CatBoostClassifier, использованный здесь.
Метки:
python, catboost, машинное обучение

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.