Numpy 如何避免JPMML输入字段的最大数量

Numpy 如何避免JPMML输入字段的最大数量,numpy,machine-learning,pca,pmml,Numpy,Machine Learning,Pca,Pmml,我在JPMML(scala)中使用带有许多输入字段的PMML模型时遇到问题。下面是一个简单的示例:加载一个300x150像素的图像,并将其用作PCA(python)的输入: 在第二步中,应使用JPMML(scala)加载此模型: 这将导致一个非常明显的例外: Exception in thread "main" org.jpmml.evaluator.InvalidElementException: Model has too many input fields at org.jpmml

我在JPMML(scala)中使用带有许多输入字段的PMML模型时遇到问题。下面是一个简单的示例:加载一个300x150像素的图像,并将其用作PCA(python)的输入:

在第二步中,应使用JPMML(scala)加载此模型:

这将导致一个非常明显的例外:

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)
    ...
如果查看源代码,您可以在
modeleevaluatorbuilder
中找到以下限制:

if((inputFields.size() + groupFields.size()) > 1000){
            throw new InvalidElementException("Model has too many input fields", miningSchema);
        }
所以我的45k输入字段太多了。如果我得到了正确的PMML文档,我只能对inpt字段使用原子数据类型(int、char、double等)


你知道我该如何绕过这个限制吗?

你可以用自己的检查逻辑(如“接受一切”)覆盖
modeleevaluatorbuilder\checkSchema(modeleevaluator)
方法:

evaluator=new LoadingModelEvaluatorBuilder(){
@凌驾
受保护的无效检查架构(ModelEvaluator ModelEvaluator){
//任何事情都会发生——我愿意为自己的行为承担责任
}
}
.setLocatable(错误)
.load(新文件(“/tmp/pca.pmml”))
.build();

这种精神检查是有原因的。(J) PMML不适用于处理二进制blob(如图像),将图像对象表示为45k双字段是一个非常糟糕的主意。

您可以使用自己的检查逻辑(如“接受所有内容”)覆盖
ModelEvaluatorBuilder\checkSchema(ModelEvaluator)
方法:

evaluator=new LoadingModelEvaluatorBuilder(){
@凌驾
受保护的无效检查架构(ModelEvaluator ModelEvaluator){
//任何事情都会发生——我愿意为自己的行为承担责任
}
}
.setLocatable(错误)
.load(新文件(“/tmp/pca.pmml”))
.build();

这种精神检查是有原因的。(J) PMML不适用于处理二进制斑点(如图像),将图像对象表示为45k双字段是一个非常糟糕的主意。

谢谢您的回答。您知道其他任何交换格式吗?如果模型是使用PIL+SkLearn进行训练的,那么相同的技术组合也是部署的最佳(尤其是性能)组合。翻译成任何其他表述都会导致效率低下。由于这是一个非常数值密集的计算(即矩阵运算),因此ONNX标准可能可以表示和执行此工作流(尽管KNN算法可能不受支持)。感谢您的回答。您知道其他任何交换格式吗?如果模型是使用PIL+SkLearn进行训练的,那么相同的技术组合也是部署的最佳(尤其是性能)组合。翻译成任何其他表述都会导致效率低下。由于这是一个数值密集型计算(即矩阵运算),因此ONNX标准可能可以表示和执行此工作流(尽管KNN算法可能不受支持)。
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)
    ...
if((inputFields.size() + groupFields.size()) > 1000){
            throw new InvalidElementException("Model has too many input fields", miningSchema);
        }
evaluator = new LoadingModelEvaluatorBuilder(){
    @Override
    protected void checkSchema(ModelEvaluator<?> modelEvaluator){
        // Anything goes - I'm willing to accept the responsibility for my own actions 
    }
}
    .setLocatable(false)
    .load(new File("/tmp/pca.pmml"))
    .build();