Main Content

回帰学習器で学習させたモデルの MATLAB Production Server への展開

この例では、回帰学習器でモデルに学習させ、MATLAB® Production Server™ への展開用にエクスポートする方法を示します。このワークフローには MATLAB Compiler SDK™ が必要です。

展開する学習済みモデルの選択

  1. コマンド ウィンドウで、4 つの予測子変数をもつ回帰モデルから 100 個の観測値をシミュレートします。行が観測値に対応し、列が予測子変数に対応するランダム行列 X を作成します。各列の約 2% の値を無作為に NaN として設定して、行列に欠損値を追加します。X の変数から応答変数 y を作成します。

    rng("default")
    numRows = 100;
    numCols = 4;
    X = rand(numRows,numCols);
    
    randIdx = randi(numRows*numCols,floor(0.02*numRows)*numCols,1);
    X(randIdx) = NaN;
    
    y = 10*X(:,1) + 5*X(:,2) + 3*X(:,3) + 7*X(:,4) + 0.1*randn(numRows,1);

  2. コマンド ウィンドウから、回帰学習器アプリを開きます。予測子行列 X と応答変数 y を [引数からの新規セッション] ダイアログ ボックスに取り込みます。

    regressionLearner(X,y)
    既定の検証オプションは 5 分割交差検証であるため、過適合が防止されます。この例では、既定の検証設定を変更しないでください。

  3. [引数からの新規セッション] ダイアログ ボックスの選択をそのまま使用して続行するため、[セッションの開始] をクリックします。

  4. 事前設定されたすべてのモデルに学習させます。[学習] タブの [モデル] セクションで矢印をクリックしてギャラリーを開きます。[開始] グループで [すべて] をクリックします。[学習] セクションで、[すべてを学習] をクリックして [すべてを学習] を選択します。事前設定されたすべてのモデルの学習が既定の複雑な木のモデルと共に行われ、モデルが [モデル] ペインに表示されます。

    メモ

    • Parallel Computing Toolbox™ がある場合は、[並列の使用] ボタンが既定でオンになります。[すべてを学習] をクリックして [すべてを学習] または [選択を学習] を選択すると、ワーカーの並列プールが開きます。この間、ソフトウェアの対話的な操作はできません。プールが開いた後、モデルの学習を並列で実行しながらアプリの操作を続けることができます。

    • Parallel Computing Toolbox がない場合は、[すべてを学習] メニューの [バックグラウンド学習を使用] チェック ボックスが既定でオンになります。オプションを選択してモデルに学習させると、バックグラウンド プールが開きます。プールが開いた後、モデルの学習をバックグラウンドで実行しながらアプリの操作を続けることができます。

    線形回帰モデル (モデル 2.1) の応答プロットが表示されます。青色の点は真の値、黄色の点は予測値です。左の [モデル] ペインに各モデルの検証 RMSE (平方根平均二乗誤差) が表示されます。

  5. 検証 RMSE に基づいてモデルを並べ替えます。[モデル] ペインで [並べ替え] リストを開き、[RMSE (検証)] を選択します。検証 RMSE が最も低いモデル (または下位の複数のモデル) のメトリクスの概要が表示されます。

  6. [モデル] ペインで検証 RMSE が最も低いモデルを選択します。

展開用のモデルのエクスポート

  1. 選択したモデルを MATLAB Production Server への展開用にエクスポートします。[学習] タブの [エクスポート] セクションで、[モデルのエクスポート] をクリックして [展開用にモデルをエクスポート] を選択します。

  2. [モデルの展開用のプロジェクト ファイルの選択] ダイアログ ボックスで、プロジェクト ファイルの場所と名前を選択します。この例では、既定のプロジェクト名 RegressionLearnerDeployedModel.prj を使用します。[保存] をクリックします。

    Production Server コンパイラ アプリが開き、自動生成された predictFunction.m ファイルが開きます。

  3. Production Server コンパイラ アプリの [コンパイラ] タブで、[エクスポートする関数] セクションに modelInformation.m ファイルと predictFunction.m ファイルが含まれています。[アーカイブの実行に必要な追加ファイル] セクションに processInputData.m ファイルと TrainedRegressionModel.mat ファイルが含まれています。それらの一部のファイルで前処理手順を含めるために必要になるコードの更新の例については、分類学習器で学習させたモデルの MATLAB Production Server への展開を参照してください。この例では、predictFunction.m のコードを検査してファイルを閉じます。

(オプション) モデルの展開のシミュレーション

コードを MATLAB Production Server への展開用にパッケージ化する前に、MATLAB クライアントを使用してモデルの展開をシミュレートできます。この処理を完了するには、MATLAB のインスタンスをもう 1 つ開く必要があります。サーバーに展開された MATLAB 関数にデータを送信する方法を示すサンプルの Java® クライアントを使用した例については、Evaluate Deployed Machine Learning Models Using Java Client (MATLAB Production Server)を参照してください。

  1. Production Server コンパイラ アプリで、[コンパイラ] タブの [テスト] セクションにある [クライアントのテスト] ボタンをクリックします。

  2. [テスト] タブの [サーバー アクション] セクションで、[開始] ボタンをクリックします。[サーバー アクション] ペインにリストされたアドレスをメモします。この例では http://localhost:9910/DeployedRegressionModel です。

  3. MATLAB の新しいインスタンスを開きます。

    新しい MATLAB インスタンスで、Production Server コンパイラ アプリが自動的に開きます。このアプリのインスタンスを閉じます。

  4. 新しい MATLAB インスタンスのコマンド ウィンドウで、回帰学習器で使用された学習データと同じ形式の予測子データを読み込みます。

    rng("default")
    numRows = 100;
    numCols = 4;
    X = rand(numRows,numCols);
    
    randIdx = randi(numRows*numCols,floor(0.02*numRows)*numCols,1);
    X(randIdx) = NaN;

  5. データを MATLAB Production Server に送信します。Production Server コンパイラ アプリで表示されたサーバーのアドレスを使用します。

    X は数値行列であるため、MATLAB Production Server への送信前に引数に関する追加の処理は必要ありません。MATLAB Production Server に送信する前に、カテゴリカル変数と table を cell 配列と構造体にそれぞれ変換する必要があります。例については、分類学習器で学習させたモデルの MATLAB Production Server への展開を参照してください。

    jsonData = mps.json.encoderequest({X},"Nargout",1, ...
        "OutputFormat","large");
    URL = "http://localhost:9910/DeployedRegressionModel/predictFunction";
    options = weboptions("MediaType","application/json","Timeout",30);
    response = webwrite(URL,jsonData,options);
    

    元の MATLAB インスタンスの開いている Production Server コンパイラ アプリで、[テスト] タブの [MATLAB 実行要求] ペインに、サーバーと MATLAB クライアントの間の成功した要求が表示されます。

  6. 新しい MATLAB インスタンスのコマンド ウィンドウで、変数 response から予測応答を抽出します。予測応答を数値ベクトルに変換し、値が正しいことを確認します。

    cellResults = response.lhs.mwdata;
    numericResults = arrayfun(@str2double,string(cellResults));
    response.lhs.mwdata のデータ型は NaN 値があるかどうかに応じて変わることに注意してください。たとえば、予測応答に NaN 値が含まれていなければ、response.lhs.mwdata は数値ベクトルです。

  7. 元の MATLAB インスタンスの Production Server コンパイラ アプリで、[テスト] タブの [サーバー アクション] セクションにある [停止] をクリックします。[閉じる] セクションで [テストを閉じる] をクリックします。

コードのパッケージ化

  1. Production Server コンパイラ アプリを使用して、モデルおよび予測関数をパッケージ化します。[コンパイラ] タブの [パッケージ] セクションで、[パッケージ] ボタンをクリックします。

  2. [パッケージ] ダイアログ ボックスで、[プロセスが完了したら出力フォルダーを開く] オプションが選択されていることを確認します。

    展開プロセスの完了後、生成された出力を調べます。

    • for_redistributionDeployedRegressionModel.ctf ファイルが格納されたフォルダー

    • for_testing — インストーラーの作成に必要な生の生成ファイルが格納されたフォルダー

    • PackagingLog.htmlMATLAB Compiler SDK で生成されたログ ファイル

関連するトピック