Skip to content

アプリケーション内で をクリックすると、お使いのDataRobotバージョンに関する全プラットフォームドキュメントにアクセスできます。

下位互換性のある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を使用します。

  1. datarobot-predictionおよびdatarobot-transform Mavenリファレンスをプロジェクトに追加します。

  2. すべてのクラスの名前空間を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); 

更新しました October 3, 2023