下位互換性のあるJava API¶
このセクションでは、別のバージョンのDataRobotで作成されたモデルでのスコアリングコードの使用プロセスについて説明します。 同じバージョンで作成されたモデルの例も参照してください。
1つのJavaアプリケーションに同じJVMランタイムに複数のDataRobotモデルをロードできます。 全てのモデルが同じバージョンのDataRobotで生成されていれば、これらのJARファイル(com.datarobot.prediction
パッケージ)に埋め込まれているモデルAPIを使用しても安全です。
さまざまなバージョンのDataRobotによって生成された複数のモデルをJVMプロセスでホストしている場合、いずれかのJARファイルから正しいバージョンのモデルAPIがロードされない可能性があります。
モデルをロードしようとすると、次のような例外が生成させることがあります。
Exception in thread "main" java.lang.IllegalArgumentException:
Cannot find a` `predictor with the 5d2db3e5bad451002ac53318 ID.
さまざまなバージョンのDataRobotによって生成された複数のモデルを使用するには、以下に説明するCompatible Model APIを使用します。
-
datarobot-predictionおよびdatarobot-transform Mavenリファレンスをプロジェクトに追加します。
-
すべてのクラスの名前空間を
com.datarobot.prediction
からcom.datarobot.prediction.compatible
に変更します。
Compatible Model APIは、常に最新のAPIをサポートし、すべてのバージョンのDataRobotとの下位互換性があります。
Compatible Model APIを使用するコードの例を以下に示します。
import com.datarobot.prediction.compatible.IPredictorInfo;
import com.datarobot.prediction.compatible.IRegressionPredictor;
import com.datarobot.prediction.compatible.Predictors;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// data is being passed as a Java map
Map<String, Object> row = new HashMap<>();
row.put("a", 1);
row.put("b", "some string feature");
row.put("c", 999);
// below is an example of prediction of a single variable (regression)
// model id is the name of the .jar file
String regression_modelId = "5d2db3e5bad451002ac53318";
// get a regression predictor object given model
IRegressionPredictor regression_predictor =
Predictors.getPredictor(regression_modelId);
double scored_value = regression_predictor.score(row);
System.out.println("The predicted variable: " + scored_value);
// below is an example of prediction of class probabilities (classification)
// model id is the name of the .jar file
String classification_modelId = "5d36ee03962d7429f0a6be72";
// get a classification predictor object given model
IClassificationPredictor predictor =
Predictors.getPredictor(classification_modelId);
Map<String, Double> class_probabilities = predictor.score(row);
for (String class_label : class_probabilities.keySet()) {
System.out.println(String.format("The probability of the row belonging to class %s is %f",
class_label, class_probabilities.get(class_label)));
}
}
}
別のクラスローダーでモデルをロードする¶
JavaクラスパスにモデルのJARファイルを含めると、モデルのJARファイル内の依存関係と、アプリケーションコードや他のモデルのJARファイル内の依存関係が競合する可能性があります。 こうした競合を避けるために、getPredictor(ClassLoader classLoader)を使用して、実行時にファイルシステムからモデルをロードすることができます。
import com.datarobot.prediction.compatible.IRegressionPredictor;
import com.datarobot.prediction.compatible.Predictors;
String jarPath = "/path/to/model.jar";
ClassLoader classLoader = new URLClassLoader(
new URL[] {new File(jarPath).toURI().toURL()},
Thread.currentThread().getContextClassLoader()
);
IRegressionPredictor predictor = Predictors.getPredictor(classLoader);