分類学習器で学習させたモデルの MATLAB Production Server への展開
この例では、分類学習器でモデルに学習させ、MATLAB® Production Server™ への展開用にエクスポートする方法を示します。このワークフローには MATLAB Compiler SDK™ が必要です。
展開する学習済みモデルの選択
コマンド ウィンドウで、
patients
データ セットを読み込み、データ セットの変数のサブセットから table を作成します。patientTbl
の各行が患者に対応し、各列が診断の変数に対応します。load patients patientTbl = table(Age,Diastolic,Gender,Height, ... SelfAssessedHealthStatus,Systolic,Weight,Smoker);
変数
SelfAssessedHealthStatus
を順序カテゴリカル予測子に変換します。patientTbl.SelfAssessedHealthStatus = categorical(patientTbl.SelfAssessedHealthStatus, ... ["Poor","Fair","Good","Excellent"],"Ordinal",true);
コマンド ウィンドウから、分類学習器アプリを開きます。
patientTbl
内の予測子データと応答変数Smoker
を [引数からの新規セッション] ダイアログ ボックスに取り込みます。既定の検証オプションは 5 分割交差検証であるため、過適合が防止されます。この例では、既定の検証設定を変更しないでください。classificationLearner(patientTbl,"Smoker")
[引数からの新規セッション] ダイアログ ボックスの選択をそのまま使用して続行するため、[セッションの開始] をクリックします。
事前設定されたすべてのモデルに学習させます。[分類学習器] タブの [モデル] セクションで矢印をクリックしてギャラリーを開きます。[開始] グループで [すべて] をクリックします。[学習] セクションで、[すべてを学習] をクリックして [すべてを学習] を選択します。事前設定されたすべてのモデルの学習が既定の複雑な木のモデルと共に行われ、モデルが [モデル] ペインに表示されます。
メモ
Parallel Computing Toolbox™ がある場合は、[並列の使用] ボタンが既定でオンに切り替わります。[すべてを学習] をクリックして [すべてを学習] または [選択を学習] を選択すると、ワーカーの並列プールが開きます。この間、ソフトウェアの対話的な操作はできません。プールが開いた後、モデルの学習を並列で実行しながらアプリの操作を続けることができます。
Parallel Computing Toolbox がない場合は、[すべてを学習] メニューの [バックグラウンド学習を使用] チェック ボックスが既定でオンになります。オプションを選択してモデルに学習させると、バックグラウンド プールが開きます。プールが開いた後、モデルの学習をバックグラウンドで実行しながらアプリの操作を続けることができます。
2 番目の複雑な木のモデル (モデル 2.1) の混同行列が表示されます。青色の値は正しい分類を示し、赤色の値は誤った分類を示します。左の [モデル] ペインに各モデルの検証精度が表示されます。
検証精度に基づいてモデルを並べ替えます。[モデル] ペインで [並べ替え] リストを開き、
[精度 (検証)]
を選択します。検証精度が最も高いモデル (または上位の複数のモデル) のメトリクスの概要が表示されます。[モデル] ペインで検証精度が最も高いモデルを選択します。
展開用のモデルのエクスポート
選択したモデルを MATLAB Production Server への展開用にエクスポートします。[分類学習器] タブで、[エクスポート] をクリックして [モデルのエクスポート] をクリックし、[展開用にモデルをエクスポート] を選択します。
[モデルの展開用のプロジェクト ファイルの選択] ダイアログ ボックスで、プロジェクト ファイルの場所と名前を選択します。この例では、既定のプロジェクト名
ClassificationLearnerDeployedModel.prj
を使用します。[保存] をクリックします。Production Server コンパイラ アプリが開き、自動生成された
predictFunction.m
ファイルが開きます。Production Server コンパイラ アプリの [コンパイラ] タブで、[エクスポートする関数] セクションに
modelInformation.m
ファイルとpredictFunction.m
ファイルが含まれています。[アーカイブの実行に必要な追加ファイル] セクションにprocessInputData.m
ファイルとTrainedClassificationModel.mat
ファイルが含まれています。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
predictFunction.m
ファイルで、次のコード行のコメントを解除し、関数predictFunction
で関数processInputData
が呼び出されるようにします。processedData = processInputData(T); T = processedData;
predictFunction.m
のコードを編集し、関数から単一の出力result
ではなく 2 つの出力labels
およびscores
が返されるようにします。コードの最初の行にある関数シグネチャを更新します。次に、コード行function [labels,scores] = predictFunction(varargin)
result = model.predictFcn(T);
を更新し、2 つの出力引数を含めます。[labels,scores] = model.predictFcn(T);
さらに、関数
predictFunction
のコメントアウトされた説明を更新し、新しい出力引数の説明を含めます。labels
には学習済みモデルから返される予測ラベルが格納され、scores
には学習済みモデルから返される予測スコアが格納されます。predictFunction.m
ファイルとprocessInputData.m
ファイルを閉じます。
(オプション) モデルの展開のシミュレーション
コードを MATLAB Production Server への展開用にパッケージ化する前に、MATLAB クライアントを使用してモデルの展開をシミュレートできます。この処理を完了するには、MATLAB のインスタンスをもう 1 つ開く必要があります。サーバーに展開された MATLAB 関数にデータを送信する方法を示すサンプルの Java® クライアントを使用した例については、Evaluate Deployed Machine Learning Models Using Java Client (MATLAB Production Server)を参照してください。
Production Server コンパイラ アプリで、[コンパイラ] タブの [テスト] セクションにある [クライアントのテスト] ボタンをクリックします。
[テスト] タブの [サーバー アクション] セクションで、[開始] ボタンをクリックします。[サーバー アクション] ペインにリストされたアドレスをメモします。この例では
http://localhost:9910/DeployedClassificationModel
です。MATLAB の新しいインスタンスを開きます。
新しい MATLAB インスタンスで、Production Server コンパイラ アプリが自動的に開きます。このアプリのインスタンスを閉じます。
新しい MATLAB インスタンスのコマンド ウィンドウで、予測子と応答のデータを読み込みます。データの形式が分類学習器で使用された学習データと同じであることを確認してください。
load patients patientTbl = table(Age,Diastolic,Gender,Height, ... SelfAssessedHealthStatus,Systolic,Weight,Smoker); patientTbl.SelfAssessedHealthStatus = categorical(patientTbl.SelfAssessedHealthStatus, ... ["Poor","Fair","Good","Excellent"],"Ordinal",true);
データを 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);
入力データを 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 クライアントの間の成功した要求が表示されます。
新しい MATLAB インスタンスのコマンド ウィンドウで、変数
response
から予測ラベルと予測スコアを抽出します。予測値が正しいことを確認します。labels = response.lhs{1}; scores = response.lhs{2};
元の MATLAB インスタンスの Production Server コンパイラ アプリで、[テスト] タブの [サーバー アクション] セクションにある [停止] をクリックします。[閉じる] セクションで [テストを閉じる] をクリックします。
コードのパッケージ化
Production Server コンパイラ アプリを使用して、モデルおよび予測関数をパッケージ化します。[コンパイラ] タブの [パッケージ] セクションで、[パッケージ] ボタンをクリックします。
[パッケージ] ダイアログ ボックスで、[プロセスが完了したら出力フォルダーを開く] オプションが選択されていることを確認します。
展開プロセスの完了後、生成された出力を調べます。
for_redistribution
—DeployedClassificationModel.ctf
ファイルが格納されたフォルダーfor_testing
— インストーラーの作成に必要な生の生成ファイルが格納されたフォルダーPackagingLog.html
— MATLAB Compiler SDK で生成されたログ ファイル
関連するトピック
- 分類学習器における分類器の性能の可視化と評価
- 新しいデータを予測するための分類モデルのエクスポート
- Create Deployable Archive for MATLAB Production Server (MATLAB Production Server)
- Evaluate Deployed Machine Learning Models Using Java Client (MATLAB Production Server)
- Execute Deployed MATLAB Functions (MATLAB Production Server)