В этом уроке я расскажу вам о Prediction IO , сервере машинного обучения с открытым исходным кодом. Это позволяет создавать приложения, которые могут выполнять следующие действия:
- рекомендовать предметы (например, фильмы, продукты, продукты питания)
- предсказывать поведение пользователя
- определить сходство предметов
- ранжировать предметы
Вы можете в значительной степени с легкостью построить любое приложение машинного обучения, используя Prediction IO. Вам не нужно иметь дело с числами и алгоритмами, и вы можете просто сосредоточиться на создании самого приложения.
Установка
В этом руководстве предполагается, что вашей базовой ОС является Linux. Если это не так, рассмотрите возможность использования Homestead Improved для стандартного и простого в использовании бокса Vagrant, который поможет вам начать работу с MySQL, PHP 5.6 и Nginx менее чем за пять минут.
Первое, что вам нужно сделать, это установить Prediction IO. Вы можете скачать Prediction IO со страницы их загрузок . Как только вы загрузили его, вы можете распаковать его по своему предпочтительному пути установки. Программа Prediction IO теперь установлена, но для ее использования необходимо сначала установить следующие зависимости:
- Java (версия 6+)
- MongoDB
Вы можете установить эти предварительные условия с помощью предоставленного сценария установки. Перейдите в корень пути установки прогнозируемого ввода-вывода и выполните следующую команду:
bin/setup-vendors.sh
Это установит все зависимости для вас.
Прогнозирование IO
После того, как все зависимости установлены, вы можете запустить прогнозирование ввода-вывода, перейдя в корень пути установки и выполнив следующую команду из терминала:
bin/start-all.sh
Когда все службы запущены, вы можете получить доступ к веб-интерфейсу прогнозирования ввода-вывода через порт 9000
http://localhost:9000
Когда вы откроете его в своем браузере, вы увидите экран входа в систему. Там нет пользователя по умолчанию в прогнозировании ввода-вывода, поэтому вам придется сначала создать его. Вы можете сделать это, выполнив bin/users
Выполнение этого даст вам 3 варианта:
1 - Add a new user
2 - Update email of an existing user
3 - Change password of an existing user
После того, как вы создадите пользователя, войдите в систему. Чтобы создать новое приложение, просто нажмите кнопку «Добавить приложение», и оно спросит у вас имя приложения. Когда мы создаем приложение с рекомендациями по фильмам, мы просто назовем наше приложение movie_recommendations.
Как только это будет сделано, нажмите кнопку «Разработка». Оттуда вы можете увидеть ключ приложения, который вы можете использовать для отправки запросов на сервер IO Prediction. Ключ приложения — это ваш типичный токен API.
Далее нажмите на кнопку «Добавить двигатель». Оттуда вы можете выбрать один из трех доступных двигателей. Когда мы создаем приложение с рекомендациями к фильмам, выберите механизм рекомендаций по элементам, введя имя, которое вы хотите дать механизму. Давайте просто назовем его «movie-рекомендует», затем нажмите «создать».
После создания движка Prediction предоставит вам следующий интерфейс:
Здесь вы можете настроить параметры для механизма рекомендаций к фильмам. Давайте пройдемся по настройкам, которые нам доступны:
-
Настройки типов предметов — здесь вы можете добавить и выбрать тип предметов, который будет рекомендовать ваш движок. Оставим это, чтобы включить все типы элементов.
-
Расписание тренировок — здесь вы вводите расписание тренировок. Термин обучение используется здесь, потому что именно здесь Предсказание делает свое волшебство. В основном он применяет алгоритмы машинного обучения к данным, которые были собраны до сих пор. Данные, которые Prediction должен использовать для своей магии, являются общими действиями пользователя на вашем веб-сайте. Такие вещи, как просмотр определенной страницы, симпатии, антипатии или оценка чего-либо.
Cron
График обучения по умолчанию, используемый Prediction, равен 0 0 * * * ?
, Это означает, что обучение проводится ежечасно. Давайте разберем это так, чтобы это имело смысл:
- 0 — секунд
- 0 — минут
-
-
- часов
-
-
-
- день-месяц
-
-
-
- месяц
-
- ? — день недели
Это то, что называется CronExpression . Значение 0
Таким образом, значение 0
*
Значение для дня месяца также *
Значение *
Наконец то ?
значение для дня недели означает, что для него нет конкретного значения. День недели не является необязательным полем, но если мы не хотим иметь какие-либо значения для него, тогда единственный вариант — вставить ?
, Это означает, что график обучения будет зависеть от других указанных значений. Собирая все воедино, тренировка проводится каждый день в первую минуту и первую секунду каждого часа. Для этого движка мы устанавливаем расписание тренировок, которое будет выполняться каждую минуту:
0 * * * * ?
Возвращаясь к опциям, которые нам предоставляет Prediction IO:
-
Настройки рекомендаций — это позволяет вам расставить приоритеты для конкретных настроек рекомендаций. Вот настройки, которые доступны:
- свежесть — это отдает приоритет вновь добавленным элементам. Установите его значение 3.
- serendipity — это дает приоритет неожиданному открытию. Установите его значение 7.
- только невидимые предметы — это может быть одно из двух значений: рекомендовать все предметы, рекомендовать только невидимые. Обычно вы хотите установить для этого параметра «рекомендовать только для просмотра», а затем установить значения для поля «видимые действия». Но для этого приложения мы выберем «Рекомендовать любые предметы».
- видимые действия — действия, которые пользователь может считать «увиденными». Это поле не обязательно, если вы выбрали «Рекомендовать какие-либо элементы» в поле «Только невидимые элементы». Значением этого поля может быть одно из следующих значений: как, не нравится, ставка, просмотр, конверсия. Вы можете прочитать больше об этих встроенных действиях на странице сбора данных прогнозирования .
- количество рекомендаций — количество рекомендаций, которые вы хотите сгенерировать для каждого пользователя.
- Дедупирование по пользовательскому атрибуту — может использоваться для указания полей, которые будут использоваться для рекомендации.
-
Цель рекомендации — может использоваться для определения приоритетности конкретного действия пользователя в качестве цели рекомендации. Для этого приложения мы будем использовать
like
API Movie DB
Поскольку мы создаем приложение с рекомендациями для фильмов, у нас должен быть приличный список фильмов, которые мы можем использовать для нашего приложения. И для этого мы будем использовать API БД фильма .
Чтобы получить доступ к их API, сначала нужно зарегистрироваться на их сайте. Войдите в свой аккаунт, как только вы закончите регистрацию. На странице своего аккаунта просто нажмите на ссылку «API». Затем вам будет предложено ввести вашу личную информацию вместе с типом использования. Когда вы закончите, вы получите электронное письмо, содержащее ключ API, который вы можете использовать для выполнения запросов.
Сборка приложения
Прежде чем мы перейдем к созданию приложения, я предоставлю вам обзор.
Приложение должно быть максимально простым, поэтому мы реализуем только те функции, которые абсолютно необходимы:
-
Этап обучения — это та часть, в которой приложение случайным образом выбирает конкретный фильм из базы данных и показывает его пользователю. Затем мы спросим пользователя, нравится ли ему фильм или нет.
-
Фаза рекомендации — это та часть, где приложение на самом деле рекомендует фильмы на основе входных данных, сделанных пользователем на этапе обучения.
Если вы более визуальный человек, вот как выглядит этап обучения:
И вот фаза рекомендации:
Мы не будем внедрять систему входа в систему. Это означает, что при каждом доступе к приложению пользователь считается новым.
Установка зависимостей
Теперь мы готовы построить приложение. Добавьте следующие зависимости в ваш файл composer.json
{
"require": {
"damel/flight-skeleton": "dev-master",
"predictionio/predictionio": "~0.6.0",
"guzzlehttp/guzzle": "4.*"
}
}
Мы будем использовать Flight Skeleton, который является хорошей отправной точкой для проектов Flight PHP, так как он предоставляет MVC структуру MVC. Flight Skeleton имеет фреймворк Flight PHP в качестве своей зависимости, поэтому нам не нужно указывать его в нашем файле composer.json
Еще одна вещь, которую нам нужно установить — это Prediction IO PHP SDK . Это позволяет нам легко общаться с сервером Prediction IO.
Последнее, что нам нужно установить, это Guzzle . Это позволяет нам с легкостью выполнять HTTP-запросы, так как мы будем разговаривать с API, чтобы получить некоторые данные фильма. Для получения дополнительной информации о Guzzle, смотрите наши предыдущие сообщения здесь .
После того, как вы добавили зависимости в файл composer.json
composer install
Как только все зависимости установлены, добавьте директиву autoload
composer.json
Затем объявите карту классов внутри нее. Он содержит массив каталогов, которые вы хотите, чтобы композитор автоматически загружал. В этом случае мы хотим только автоматически загрузить каталог controllers
"autoload": {
"classmap": [
"controllers"
]
}
После этого выполните следующую команду на своем терминале и позвольте composer выполнить работу автозагрузки за вас:
composer dump-autoload
Затем создайте файл .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
Это переписывает URL для нас, поэтому нам не нужно вставлять index.php
Если вы используете Nginx, смотрите здесь .
Как только это будет сделано, мы можем начать кодировать приложение. Первое, что вам нужно сделать, это создать файл index.php
Это будет служить основным файлом приложения. Здесь мы сопоставим методы, которые нам нужно использовать в приложении, маршруты и общую инициализацию приложения.
Вывод
В этой части серии мы узнали об основах прогнозирования ввода-вывода, о том, как мы можем настроить его и его зависимости. Мы также взглянули на то, как настроить некоторые из его настроек для получения более релевантных рекомендаций. Оставайтесь с нами, чтобы перейти к следующей части, где мы фактически начнем создавать приложение с рекомендациями для фильмов.