Прогнозы CoreML отличаются от исходной модели - PullRequest
0 голосов
/ 01 ноября 2018

Я интегрировал модель Gradient Booster Régression Tree (GBRT), обученную с помощью Scikit, в большую программу двумя различными способами:

  • для iOS, используя CoreML и coremltools
  • для Linux с использованием pickle и вызовом сценария python для классификации.

Иногда предсказания были другими, чего не должно быть.

Обратите внимание, что это проблема двух классов: вывод равен либо 0, либо 1.

Что касается продажи объяснения, я выделю два образца: образец 3321 и образец 3330: 3321 был предсказан для класса 0 в обоих, но 3330 был предсказан как 1 для iOS и 0 для версии для Linux / python.

Вот что я пытался решить:

Возможности чтения

Поскольку я использовал классификатор GBRT, я подумал, что взгляну на вероятности, связанные с каждым классом. Они были разными в обоих образцах:

в версии для iOS:

  • образец 3321, класс 0, вероятности [0,00098, 0,99901]
  • образец 3330, класс 1, вероятности [0,57140, 0,42859]

в питоне:

  • выборка 3321, класс 0 вероятностей [0,000724739274, 0,999275261]
  • выборка 3330 класса 0 вероятностей [0.45024302, 0.54975698]

ясно, это разные.

Изменение классификаторов

Затем я попытался вставить классификатор SVM (который дал второй лучший результат после GBRT) с вероятностями: также разными (прогнозы и вероятности)

Значения функций

Тогда я подумал, что, возможно, значения объектов были разными (каким-то образом изменились при отправке из swift в скрипт python), поэтому я распечатал вектор объектов в обоих случаях непосредственно перед вызовом предиктора: значения были идентичны, очень последняя цифра.

Вопрос

Есть идеи, почему это происходит, или это нормально?

...