Main Content

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

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

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

  1. コマンド ウィンドウで、patients データ セットを読み込み、データ セットの変数のサブセットから table を作成します。patientTbl の各行が患者に対応し、各列が診断の変数に対応します。

    load patients
    patientTbl = table(Age,Diastolic,Gender,Height, ...
        SelfAssessedHealthStatus,Systolic,Weight,Smoker);

  2. 変数 SelfAssessedHealthStatus を順序カテゴリカル予測子に変換します。

    patientTbl.SelfAssessedHealthStatus = categorical(patientTbl.SelfAssessedHealthStatus, ...
        ["Poor","Fair","Good","Excellent"],"Ordinal",true);

  3. コマンド ウィンドウから、分類学習器アプリを開きます。patientTbl 内の予測子データと応答変数 Smoker を [引数からの新規セッション] ダイアログ ボックスに取り込みます。

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

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

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

    メモ

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

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

    2 番目の複雑な木のモデル (モデル 2.1) の混同行列が表示されます。青色の値は正しい分類を示し、赤色の値は誤った分類を示します。左の [モデル] ペインに各モデルの検証精度が表示されます。

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

  7. [モデル] ペインで検証精度が最も高いモデルを選択します。

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

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

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

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

    Production Server コンパイラ アプリの [コンパイラ] タブで、[エクスポートする関数] セクションに modelInformation.m ファイルと predictFunction.m ファイルが含まれています。[アーカイブの実行に必要な追加ファイル] セクションに processInputData.m ファイルと TrainedClassificationModel.mat ファイルが含まれています。

  3. processInputData.m ファイルと predictFunction.m ファイルのコードを更新して、分類学習器でデータをインポートする前に実行した前処理手順を含めます。ClassificationLearnerDeployedModel_resources フォルダーから processInputData.m ファイルを開き、コードを変更して SelfAssessedHealthStatus 変数の順序カテゴリカル予測子への変換を含めます。

    function processedData = processInputData(T)
        T.SelfAssessedHealthStatus = categorical(T.SelfAssessedHealthStatus, ...
            ["Poor","Fair","Good","Excellent"],"Ordinal",true);
        processedData = T;
    end

  4. predictFunction.m ファイルで、次のコード行のコメントを解除し、関数 predictFunction で関数 processInputData が呼び出されるようにします。

    processedData = processInputData(T);
    T = processedData;

  5. predictFunction.m のコードを編集し、関数から単一の出力 result ではなく 2 つの出力 labels および scores が返されるようにします。コードの最初の行にある関数シグネチャを更新します。

    function [labels,scores] = predictFunction(varargin)
    次に、コード行 result = model.predictFcn(T); を更新し、2 つの出力引数を含めます。
    [labels,scores] = model.predictFcn(T);

    さらに、関数 predictFunction のコメントアウトされた説明を更新し、新しい出力引数の説明を含めます。labels には学習済みモデルから返される予測ラベルが格納され、scores には学習済みモデルから返される予測スコアが格納されます。

  6. predictFunction.m ファイルと processInputData.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/DeployedClassificationModel です。

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

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

  4. 新しい MATLAB インスタンスのコマンド ウィンドウで、予測子と応答のデータを読み込みます。データの形式が分類学習器で使用された学習データと同じであることを確認してください。

    load patients
    patientTbl = table(Age,Diastolic,Gender,Height, ...
        SelfAssessedHealthStatus,Systolic,Weight,Smoker);
    patientTbl.SelfAssessedHealthStatus = categorical(patientTbl.SelfAssessedHealthStatus, ...
        ["Poor","Fair","Good","Excellent"],"Ordinal",true);

  5. データを MATLAB Production Server に送信できるように準備します。

    MATLAB Production Server に送信する前に、カテゴリカル変数と table を cell 配列と構造体にそれぞれ変換する必要があります。SelfAssessedHealthStatus はカテゴリカル変数であり、patientTbl は table であるため、入力データの送信前に追加の処理を行います。

    inputTbl = patientTbl;
    columnNames = patientTbl.Properties.VariableNames;
    for i=1:length(columnNames)
       if iscategorical(patientTbl.(columnNames{i}))
           inputTbl.(columnNames{i}) = cellstr(patientTbl.(columnNames{i}));
       end
    end
    inputData = table2struct(inputTbl);
    

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

    jsonData = mps.json.encoderequest({inputData},"Nargout",2);
    URL = "http://localhost:9910/DeployedClassificationModel/predictFunction";
    options = weboptions("MediaType","application/json","Timeout",30);
    response = webwrite(URL,jsonData,options);
    

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

  7. 新しい MATLAB インスタンスのコマンド ウィンドウで、変数 response から予測ラベルと予測スコアを抽出します。予測値が正しいことを確認します。

    labels = response.lhs{1};
    scores = response.lhs{2};

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

コードのパッケージ化

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

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

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

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

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

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

関連するトピック