2017-06-09 7 views
0
に作成

RからPMMLにランダムフォレスト回帰モデルを保存し、Spark(ScalaまたはJava)にロードします。残念ながら、私は第2ステップで問題があります。Scala/JavaのモデルをpmmlからR

ランダムフォレスト回帰モデルのPMMLをRに保存するという最小の例を以下に示します。私は、xmlファイルを編集して、このエラーを克服することができます

Exception in thread "main" java.lang.IllegalArgumentException: http://www.dmg.org/PMML-4_3 

:属性「のxmlns私はjpmmlを使用してスカラ座またはJavaからこのモデルをロードしようとすると

(以下のコードを参照してください)、私は次のエラーを取得しますタグ "PMML"にエラーメッセージに表示されるURLが含まれています。 URLを完全に削除した場合、または4_3を4_2に変更した場合、このエラーは表示されなくなります。しかし、新しいエラーメッセージが表示されます。

Exception in thread "main" org.jpmml.evaluator.UnsupportedFeatureException (at or around line 19): MiningModel 

あなたは、この特定のエラーがまたは、より一般的には、どのようにScalaでRで作成されたPMMLをロードするために解決する方法上の任意の提案やアイデアをしてください持っていますか?

ありがとうございました!


更新:問題は、@ user1808924によって答えとして、jpmmlライブラリのバージョンでした。下のコードはうまくいきます。正しいLIBSは、Mavenの中央リポジトリを使用して、たとえば、ロードする必要があります。

<dependency> 
     <groupId>org.jpmml</groupId> 
     <artifactId>pmml-evaluator</artifactId> 
     <version>1.3.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jpmml</groupId> 
     <artifactId>pmml-model</artifactId> 
     <version>1.3.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jpmml</groupId> 
     <artifactId>pmml-spark</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 

RにおけるランダムフォレストregresionモデルのPMML節約の最小例:

library(randomForest) 
library(r2pmml) 
data(mtcars) 

MPGmodel.rf <- randomForest(mpg~., mtcars, ntree=5, do.trace=1) 

# with package "r2pmml", convert model to pmml version 4.3 and save to xml: 
r2pmml(MPGmodel.rf, "MPGmodel-r2pmml.pmml") 

をScalaでのモデルの読み込み:

import java.io.File 
import org.jpmml.evaluator.Evaluator 
import org.jpmml.spark.EvaluatorUtil 

val fileNamePmml = "MPGmodel-r2pmml.pmml" 
val pmmlFile = new File(fileNamePmml) 
// the "UnsupportedFeature MiningModel" error appears here: 
val myEvaluator: Evaluator = EvaluatorUtil.createEvaluator(pmmlFile) 

私も同じエラーメッセージで、Javaを使用してモデルをロードしようとしました:

import org.dmg.pmml.PMML; 
import org.jpmml.evaluator.ModelEvaluator; 
import org.jpmml.evaluator.ModelEvaluatorFactory; 
import java.io.*; 
import java.util.Scanner; 
import java.io.ByteArrayInputStream; 

File pmmlFile = new File(fileNamePmml); 

// the pmml file is successfully loaded as a string: 
String pmmlString = null; 
pmmlString = new Scanner(pmmlFile).useDelimiter("FILEFINISHESHERE").next(); 

// a PMML object is successfully created from the pmml string: 
PMML myPmml = null; 
try(InputStream is = new ByteArrayInputStream(pmmlString.getBytes())){ 
    myPmml = org.jpmml.model.PMMLUtil.unmarshal(is); 
} 

// the "UnsupportedFeature MiningModel" error appears here: 
ModelEvaluatorFactory modelEvaluatorFactory = ModelEvaluatorFactory.newInstance(); 
ModelEvaluator<?> modelEvaluator = modelEvaluatorFactory.newModelEvaluator(myPmml); 

答えて

1

あなたは数年前3+中止されたレガシーJPMMLライブラリーを、使用しています。もちろん、それ以降追加された新しいPMML機能(PMML 4.2や4.3スキーマなど)はサポートしていません。

JPMML-Evaluatorライブラリにアップグレードするだけです。ボーナスとして、あなたのコードははるかに短くてきれいになります。

+0

ありがとうございます。以前は間違ったライブラリをインストールしていましたが、新しいものをインストールするために-Uフラグ(update-snapshots)を使うのを忘れました:mvn clean install -U – queise

+0

どのシナリオでJPMML-EvaluatorとJPMML-Modelを使用すべきですか? – NetanelRabinowitz

関連する問題