Есть ли способ импортировать файл pmml в Python?

Я обучил модель с помощью sklearn и экспортировал ее в формат pmml с помощью sklearn2pmml. Есть ли способ преобразовать этот файл pmml обратно во что-то, что можно импортировать и запускать в python?

Причина, по которой я хочу это сделать, заключается в том, что я заметил небольшие различия в поведении модели pmml по сравнению с моделью sklearn. В частности, файл pmml устанавливает жесткие верхнюю и нижнюю границы для переменных (использует max и min переменной в обучающем наборе), тогда как sklearn этого не делает. Я сталкиваюсь с проблемами, когда модель pmml встречает данные, выходящие за эти границы. Это всего лишь одно различие между моделью pmml и моделью sklearn, и я хочу иметь возможность повторно импортировать файл pmml в python, чтобы запустить его и посмотреть, есть ли другие.


person swang16    schedule 10.03.2017    source источник
comment
Классический вопрос: зачем вам этот промежуточный шаг PMML, если вы обучаете свои модели с помощью Python и хотите развернуть их с помощью Python? Почему не рассол?   -  person user1808924    schedule 10.03.2017
comment
Я использовал python для создания модели, но команда, которую я передаю для ее развертывания, использует java, поэтому преобразование в pmml   -  person swang16    schedule 10.03.2017
comment
В зависимости от типа модели, дубликат stackoverflow.com/questions/41630562 / chaid-pmml-parsing-in, stackoverflow.com/questions/41466964/, stackoverflow.com/questions/40048987/, stackoverflow.com/questions/41383735/ и / или stackoverflow.com/questions/40532 336 / ...   -  person nekomatic    schedule 13.03.2017


Ответы (1)


Вам не нужно проверять правильность сгенерированных моделей sklearn2pmml. Он основан на библиотеке JPMML-SkLearn, которая полностью покрывает интеграционные тесты - Scikit-Learn прогнозы и прогнозы PMML доказуемо идентичны.

Ваша реальная проблема заключается в том, что вы хотите применять модели за пределами их предполагаемой «области применимости». Это неплохая идея, потому что в этом случае поведение модели не указывается - ввод мусора, прогнозы мусора.

Однако, если вы настаиваете на том, что вы должны иметь возможность загружать мусор в свои модели в производственной среде, просто отключите проверку границ значений PMML. Есть много способов сделать это:

  1. Удалите дочерние элементы Value и Interval из /PMML/DataDictionary/DataField элементов.
  2. Измените дочерние элементы Value и Interval так, чтобы ранее невидимые значения распознавались как допустимые. Например, вы можете определить поля элемента Input, чтобы включить все значения [-Inf, + Inf]. См. Объяснение Value и _ 8_ в спецификации PMML для правильного синтаксиса.
  3. Измените значение атрибута invalidValueTreatment всех /PMML/<Model>/MiningSchema/MiningField элементов с «returnInvalid» на «asIs». Если этот атрибут отсутствует, по умолчанию используется returnInvalid. Значит, вам нужно вставить туда invalidValueTreatment=asIs.

Я бы порекомендовал вариант №3. Вы можете автоматизировать процесс с помощью библиотеки JPMML-Model:

org.dmg.pmml.PMML pmml = loadFromFile(..)
org.dmg.pmml.Visitor mfUpdater = new org.jpmml.model.visitors.AbstractVisitor(){
  @Override
  public VisitorAction visit(MiningField miningField){
    miningField.setInvalidValueTreatment(InvalidValueTreatmentMethod.AS_IS);
    return VisitorAction.CONTINUE;
  }
}
mfUpdater.applyTo(pmml);
saveToFile(pmml, ...)
person user1808924    schedule 10.03.2017
comment
Кроме того, sklearn2pmml позволяет указать asIs обработку недопустимого значения во время создания модели. Просто замените CountinuousDomain() на ContinuousDomain(invalid_value_treatment = "as_is") в своем скрипте Python: github. com / jpmml / sklearn2pmml / blob / master / sklearn2pmml / - person user1808924; 11.03.2017