У меня проблемы с использованием моделей PMML в JPMML (scala) со многими полями ввода.Найдите минимальный пример ниже: Загрузите изображение с разрешением 300x150 пикселей и используйте его в качестве входных данных для PCA (python):
img = PIL.Image.open(filename)
img = img.resize(STANDARD_SIZE) # 300x150
img = np.array([int(np.mean(a)) for a in img])
pca = PCA(svd_solver=pca_method,n_components = components)
train = pca.fit_transform(train_x)
pipeline = PMMLPipeline(([('pca', pca), ('knn', neigh)]))
sklearn2pmml(pipeline, "/tmp/pca.pmml")
На втором шаге эта модель должна быть загружена с использованием JPMML (scala):
val evaluator = new LoadingModelEvaluatorBuilder()
.setLocatable(false)
.load(new File("/tmp/pca.pmml"))
.build()
evaluator.verify()
, что приведет к совершенно очевидному исключению:
Exception in thread "main" org.jpmml.evaluator.InvalidElementException: Model has too many input fields
at org.jpmml.evaluator.ModelEvaluatorBuilder.checkSchema(ModelEvaluatorBuilder.java:135)
at org.jpmml.evaluator.ModelEvaluatorBuilder.build(ModelEvaluatorBuilder.java:115)
...
Если вы посмотрите на исходный код, вы можете найти следующий предел в ModelEvaluatorBuilder
:
if((inputFields.size() + groupFields.size()) > 1000){
throw new InvalidElementException("Model has too many input fields", miningSchema);
}
Так что мои поля ввода 45k слишком много.Если я правильно понял документацию PMML, я могу использовать только атомарные типы данных (int, char, double и т. Д.) Для полей inpt.
Есть идеи, как я могу обойти этот предел?