Полигон алгоритмов/Взаимодействие с пользовательскими алгоритмами

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск

Lisitsa (Обсуждение | вклад)
(Новая: Взаимодействие системы Полигон с внешними алгоритмами осуществляется при помощи веб-сервиса [http://polig...)
К следующему изменению →

Версия 06:47, 1 марта 2010

Взаимодействие системы Полигон с внешними алгоритмами осуществляется при помощи веб-сервиса http://poligon.machinelerning.ru/ProcessingService.asmx. Алгоритм должен быть зарегистрирован в системе при помощи мастера добавления алгоритма. Пример подключения алгоритма к системе полигон можно скачать по адресу http://poligon.machinelerning.ru/files/ExampleAlg.rar (C#, Microsoft Visual Studio 2010).

Содержание

Общая схема взаимодействия

Связь инициируется пользовательским алгоритмом. Для этого используется функция GetTask.

Если у менеджера алгоритмов классификации есть задание для пользовательского алгоритма, то в результате выполнения функции GetTask алгоритм получит задание на обработку. В задании указаны идентификатор задачи, набор разбиений и параметры запуска алгоритма. Чтобы получить данные задачи классификации алгоритм должен воспользоваться функцией сервиса GetProblem. Получение данных задачи классификации вынесено в отдельную функциональность для оптимизации трафика больших задач классификации – для построения статистики, как правила, требуется обработать несколько заданий. В случае если в задании указана та же самая задача классификации, алгоритм может не запрашивать ее повторно.

После обработки задания результаты расчетов сохраняются в системе Полигон при помощи функции сервиса RegisterResult.

Функциональность сервиса

Функциональность сервиса составляет 3 функции GetTask(), GetProblem() и RegisterResult(). Ниже приведено описание каждой из этих функций.

Замечание: при вызове любой функции сервиса должны быть переданы параметры авторизации – синоним алгоритма и пароль.

Получение задания – GetTask()

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

[WebMethod(Description = "Взять задание на обсчет.")]
public ProcessingTask GetTask(string algSynonim, string password)

Входные параметры:

  • algSynonim (string) – синоним алгоритма (значение должно совпадать со значением, введенным при регистрации алгоритма на сайте).
  • passwd (string) – пароль для соединения с системой Полигон. Пароль указывается при регистрации алгоритма и может быть изменен при редактировании карточки алгоритма.

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

Тип ProcessingTask состоит из полей:

  • PocketId (int) – идентификатор задания. Используется для сопоставления задания и результатов тестирования (см. функцию RegisterResult()).
  • LearnIndexes (int[][]) – список индексов объектов для обучения алгоритма. Первый индекс – номер выборки в задании, второй – индекс объекта задачи.
  • TestIndexes (int[][]) – список индексов объектов для контроля. Первый индекс – номер выборки в задании, второй – индекс объекта задачи.
  • AlgSynonim (string) - синоним алгоритма.
  • ProblemSynonim(string) - синоним задачи классификации.
  • AlgParamNames (string[]) – список имен передаваемых алгоритму параметров.
  • AlgParamValues (string[]) – список значений передаваемых алгоритму параметров.
  • AlgParamUsages (bool[]) – список выставленных флагов использования параметров.

Как правило, этот тип данных создается автоматически при подключении веб-сервиса в проект.

Получение задачи – GetProblem()

При помощи этой функции осуществляется получение данных задачи классификации, требуемой для обсчета задания.

[WebMethod(Description = "Взять данные задачи по синониму задачи.")]
public ProblemData GetProblem(string algSynonim, string password, string problemSynonim)

Входные параметры:

  • algSynonim (string) – синоним алгоритма (значение должно совпадать со значением, введенным при регистрации алгоритма на сайте).
  • passwd (string) – пароль для соединения с системой Полигон. Пароль указывается при регистрации алгоритма и может быть изменен при редактировании карточки алгоритма.
  • problemSynonim (string) – синоним задачи (значение, указанное в задании на тетсирование).

В результате выполнения функции возвращается значение типа ProblemData. Тип ProblemData состоит из полей:

  • DataMatrix (double[][]) – данные задачи. Матрица объекты-признаки.
  • Target (int[]) – целевой вектор (вектор классов).
  • LossMatrix (double[][]) – матрица потерь. Определяет «стоимость» неправильной классификации. Размерность матрицы – [число классов] х [число классов]. Данное поле является необязательным. Если матрица потерь не задана поле содержит null-значение.
  • Weights (double[]) – вектор весов объектов. Необязательный параметр. В настоящий момент не используется при построении статистик.
  • PropertiesDescription (PropertyDescription[]) – Описание признаков задачи. Последний признак – целевой (описание допустимых классов). Описание признака состоит из полей:
    • Type (перечисление) – Тип признака. Возможны значения: Nominal (номинальный) и Numerical (числовой);
    • Values (int[]) – значения признака если их конечное число. Параметр актуален ТОЛЬКО для номинальных признаков.

Как правило, этот тип данных создается автоматически при подключении веб-сервиса в проект.

Сохранение результата – RegisterResult()

При помощи этой функции осуществляется сохранение результатов обсчета задания для тестирования в системе Полигон.

[WebMethod(Description = "Сохранить результат тестирования.")]
public void RegisterResult(string algSynonim, string password, int pocketKey, TestResult[] learnResults, TestResult[] testResults)

Параметры:

  • algSynonim (string) – синоним алгоритма (значение должно совпадать со значением, введенным при регистрации алгоритма на сайте).
  • passwd (string) – пароль для соединения с системой Полигон. Пароль указывается при регистрации алгоритма и может быть изменен при редактировании карточки алгоритма.
  • pocketKey (int) – идентификатор задания на тестирование (значение содержится в соответствующем поле ProcessingTask).
  • learnResults (TestResult[]) – результат работы алгоритма на обучающих подвыборках (описание типа TestResult приведено ниже);
  • testResults (TestResult[])– результат работы алгоритма на контрольных подвыборках (описание типа TestResult приведено ниже);

Тип TestingResult состоит из полей:

  • Index (int) – индекс обучающей подвборки в исходной постановке задачи. Индексация начинается с нуля.
  • ProbabilityMatrix (double[][]) – матрица оценок принадлежности объектов классам задачи. Размерность матрицы [количество объектов] x [количество классов]. Сумма значений строки должна составлять 1. Если алгоритм не позволяет рассчитывать оценку принадлежности к классу (возвращает класс объекта), то оценка принадлежности объекта этому классу должна быть равна 1 (а остальные оценки нулевыми).
  • Answers (int[]) –вектор классификаций объектов.
  • PropertiesWeights (double[]) – необязательный вектор весов признаков. Если алгоритм не строит подобных оценок, значение этого поля должно содержать null.
  • ObjectsWeights (double[]) – необязательный вектор весов объектов. Если алгоритм не строит подобных оценок, значение этого поля должно содержать null.
  • Error (bool) – признак того, что при обсчете произошла ошибка.
  • ErrorException (string) – текст сообщения об ошибке.

Как правило, этот тип данных создается автоматически при подключении веб-сервиса в проект.

Личные инструменты