K3440 Глотов М., Луценко Е., Коноплянникова М.

### **Постановка задачи**

**Задача:** определить к какой кухне принадлежит рецепт по входящим в него ингредиентам.

**Данные:** около 40 000 рецептов в формате json. Для каждого рецепта даны ингредиенты, название кухни и id.

### **Предобработка данных**

 Стемминг —процесс нахождения основы
слова для заданного исходного слова. В нашем случае это в основном сводится к удалению множественного числа (thigh, thighs). Значительно уменьшать кол-во ингредиентов (например удалить все ингредиенты, которые встречаются в менее 1% рецептов) нет смысла, это приведет к значительному снижению точности, т.к. редкие ингредиенты позволяют точнее определить кухню.

«Мешок слов». В данном случае формируется словарь из ингредиентов. Каждый рецепт представляется
в виде вектора. Длина вектора - кол-во ингредиентов, если текущий продукт входит в состав ставим 1, если нет записываем 0. Приводим данные к такому виду, чтобы алгоритмы могли с ними работать.

### **Технологии**

Наша задача: классификация с достаточно большим количеством характеристик\переменных. Все на питоне, в основном средства scikit-learn- пакет для машинного обучения. NLTK- библиотека для обработки естественного языка (используется для предобработки).

### **Выбор алгоритма**

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

Мы использовали 4 группы алгоритмов:

**Обобщенные линеные модели:** логистическая регрессия, стохастический градиентный спуск, перцептрон.

Наиболее эффективным методом в этой группе оказалась логистическая регрессия. Он сводится к подбору коэффициентов к так называемой гипотезе (в нашем случае, она представляет собой линейное уравнение). Самые важные параметры:

С- коэффициент регуляризации

Max-iter- максимальное количество итераций для метода оптимизации

Solver- метод оптимизации

Multi\_class- выбор конкретной реализации этого алгоритма в пакете scikit-learn

**Деревья решений:** CART, Random Forest.

CART представляет собой построение бинарного дерева решений. Это кусочек получившегося дерева по данным рецептам:

Более эффективным является Random Forest. Суть алгоритма в построении нескольких деревьев решений по произвольным выборкам из исходных данных (то есть все деревья строятся по разным наборам данных). Результат определяется на основе предсказаний всех деревьев.

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

Машины опорных векторов: SVC, NuSVC, LinearSVC.

Идея метода основана на преобразовании данных таким образом, чтобы они были линейно разделимы. Это происходит при помощи разных ядер. Наиболее популярным является ядро RBF. SVC отличается от NuSVC реализацией регуляризации. В SVC параметр С может принимать значение любого положительного числа и не имеет четкой интерпретации. В NuSVC параметр Nu принимает значение от 0 до 1 и означает максимальную долю ошибок на обучающей выборке и минимальную долю экземпляров выборки, которые будут опорными векторами.

Ближайший сосед: K Nearest Neighbors, Radius Nearest Neighbors.

Эти методы не требуют обучения. Они представляют данные в удобном виде для быстрого поиска. Затем определяют к какому классу относится экземпляр основываясь на информации о его ближайших соседях. В зависимости от реализации можно задать либо количество соседей, которые необходимо рассмотреть, либо радиус. В данном случае этот алгоритм дал плохие результаты, но есть множество задач, где он эффективен. Например, распознавание образов.

### **Результаты**

Лучшие результаты показал метод LinearSVC с параметрами C = 0.1, loss =  ’squared\_hinge’, penalty = l2.

LinearSVC- это машина опорных векторов с линейным ядром, реализована на основе библиотеки liblinear и больше подходит для большого количества данных (> 10000) чем SVC с линейным ядром.

С- отвечает за регуляризацию

Loss- функция потерь

Penalty- указывает необходимую норму

Все параметры были подобраны на основе кросс-валидации.

### **Вывод**

**Лучший результат:** 79.65

**Лучший результат**
участника yilihome: **83.21**

**Что дальше?**

* Продолжить подбор алгоритмов/параметров.
* Усовершенствовать предобработку (например, использовать лемматизацию).

Презентация: https://drive.google.com/file/d/0BwMjn\_pF4oW0cEl4RWN3REVVdTQ/view?usp=sharing