。
この例では,分类および回帰モデルオブジェクトの予测を行うためのコードをコマンドラインで生成する方法を示します.MATLAB®编码器™アプリを使用してコードを生成することもできます。详细については,机械学习モデルの予测をMATLAB编码器アプリを使用して行うコードの生成を参照してください。
一部の分類および回帰モデルオブジェクトには,コード生成をサポートする関数预测
または随机的
があります。これらのオブジェクト关数を使用する予测には学习済みの分类または回帰モデルオブジェクトが必要ですが,Codegen.
(MATLAB编码器)の- args.
オプションはこれらのオブジェクトを受け入れません。この例で说明されているようにSavelarnerforcoder.
とloadlearnerforcoder.
を使用して,この制限に対处します。
次のフローチャートは,分类および回帰モデルオブジェクトのオブジェクト关数に対するコード生成ワークフローを示します。
モデルに学習をさせた後で,Savelarnerforcoder.
を使用して学习済みモデルを保存します。loadlearnerforcoder.
を使用して保存済みモデルを読み込んでオブジェクト関数を呼び出す,エントリポイント関数を定義します。次に,Codegen.
を使用してエントリポイント关数のコードを生成し,生成されたコードを确认します。
コード生成に対応している关数预测
がある分类モデルオブジェクトに学习をさせます。このケースでは,サポートベクターマシン(SVM)分类モデルに学习をさせます。
加载fisheririsINDS =〜的strcmp(物种,“setosa”);X = MEAS(INDS,3:4);Y =物种(INDS);MDL = fitcsvm(X,Y);
この手順には,データの前処理,特徴選択および(交差検証などの使用による)モデルの最適化が含まれる可能性があります。
Savelarnerforcoder.
の使用によるモデルの保存Savelarnerforcoder.
を使用して,分类モデルをSVMModel.mat
というファイルに保存します。
SavelAlnerForCoder(MDL,'SVMModel');
Savelarnerforcoder.
は,现在のフォルダーのMATLABバイナリファイルSVMModel.mat
に构造体配列として分类モデルを保存します。
“エントリポイント”关数は,コード生成用に定义する关数で, “最上位”関数または”プライマリ”関数とも呼ばれます。Codegen.
を使用して最上位レベルの关数を呼び出すことはできないので,コード生成に対応する关数を呼び出すエントリポイント关数を定义し,Codegen.
を使用してエントリポイント関数のC / c++コードを生成しなければなりません。エントリポイント関数内のすべての関数がコード生成をサポートしなければなりません。
入力された予测子データに対して予测したラベルを返すエントリポイント关数を定义します。この关数では,loadlearnerforcoder.
を使用して学习済みの分类モデルを読み込み,预测
に渡します。このケースでは,SVMモデルMdl
を使用してラベルを予测する关数predictLabelsSVM
を定义します。
类型predictLabelsSVM.m%predictLabelsSVM.m文件的显示内容
功能标记= predictLabelsSVM(X)%#代码生成%PREDICTLABELSSVM标签中使用训练的SVM模型铜牌%predictLabelsSVM预测标签的标签载体使用%新的观察所保存的SVM模型铜牌和预测器数据x。MDL = loadLearnerForCoder( 'SVMModel');标记=预测(MDL,X);结尾
MATLABのアルゴリズムについてのコードを生成しようとしていることを指示するため,コンパイラ命令%#代码生成
(またはプラグマ)をエントリポイント关数のシグネチャの后に追加します。この命令を追加すると,MATLAB代码分析器はコード生成时にエラーになる违反の诊断と修正を支援します。コードアナライザーによるコードのチェック(MATLAB编码器)を参照してください。
メモ:このページの右上にあるボタンをクリックしてこの例をMATLAB®で开くと,MATLAB®で例のフォルダーが开きます。このフォルダーには,エントリポイント关数のファイルが含まれています。
コンパイラの設定
C / c++コードを生成するには,適切に設定されているC / c++コンパイラにアクセスできなければなりません。MATLAB编码器は,サポートされているインストール済みのコンパイラを探して使用します。墨西哥人
-设置
を使用すると,既定のコンパイラを表示および変更できます详细。は,既定のコンパイラの変更を参照してください。
Codegen.
の使用によるコードの生成
Codegen.
(MATLAB编码器)を使用して,エントリポイント关数のコードを生成します.CおよびC ++は静的な型の言语なので,エントリポイント关数内のすべての変数のプロパティをコンパイル时に决定しなければなりません。Codegen.
を呼び出すときに- args.
オプションを使用して,エントリポイント关数のすべての入力についてデータ型とサイズを指定します。
このケースでは,- args.
オプションの値としてX
を渡し,生成コードが学习データX
と同じデータ型および配列サイズをもつ入力を受け入れなければならないことを指定します。
Codegen.predictLabelsSVM- args.{X}
コンパイル时に観测値の个数が不明である场合,Coder.typeof.
(MATLAB编码器)を使用して可変サイズの入力を指定することもできます。详细については,コード生成用の可変サイズ引数の指定とエントリポイント関数の入力のプロパティの指定(MATLAB编码器)を参照してください。
ビルドタイプ
MATLAB编码器は,以下のビルドタイプについてコードを生成できます。
MEX(MATLAB実行可能ファイル)关数
スタンドアロンC / C ++コード
スタティックライブラリにコンパイルされるスタンドアロンC / C ++コード
ダイナミックリンクライブラリにコンパイルされるスタンドアロンC / C ++コード
実行可能ファイルにコンパイルされるスタンドアロンC / C ++コード
ビルドタイプは,Codegen.
(MATLAB编码器)の-Config.
オプションを使用して指定できます。コード生成オプションの设定の详细については,Codegen.
(MATLAB编码器)の-Config.
オプションとビルド设定の构成(MATLAB编码器)を参照してください。
既定では,Codegen.
はMEX关数を生成します.MEX关数は,MATLABから実行できるC / C ++プログラムです.MEX关数を使用すると,MATLABのアルゴリズムを高速化し,生成されたコードの机能と実行时の问题をテストすることができます详细。は,MATLABアルゴリズムの高速化(MATLAB编码器)とMATLABで墨西哥人関数をテストする理由(MATLAB编码器)を参照してください。
コード生成レポート
-报告
フラグを使用して,コード生成レポートを作成できます。このレポートは,コード生成の问题のデバッグと,生成されたC / C ++コードの确认に役立ちます。详细については,コード生成レポート(MATLAB编码器)を参照してください。
MEX关数をテストして,生成されたコードが元のMATLABコードと同じ机能を提供するかどうかを确认します。このテストを実行するため,元のMATLABコードの実行に使用したものと同じ入力を使用してMEX关数を実行してから,结果を比较します。スタンドアロンコードを生成する前にMATLABでMEX关数を実行すると,実行时エラーを検出して修正することもできます。生成されたスタンドアロンコードでは,このようなエラーの诊断がはるかに困难になります详细。は,MATLABで墨西哥人関数をテストする理由(MATLAB编码器)を参照してください。
予測子データを渡して,预测
那predictLabelsSVM
およびMEX关数が同じラベルを返すかどうかを确认します。
labels1 =预测(MDL,X);标签2 = predictLabelsSVM(X);标签3 = predictLabelsSVM_mex(X);
是平等的
を使用して,予测されたラベルを比较します。
verifyMEX = isequal (labels1 labels2 labels3)
verifyMEX =逻辑1
是平等的
は,すべての入力が等しいことを意味する逻辑1(真正的
)を返します。この比较により,同じラベルを关数预测
,关数predictLabelsSVM
,および墨西哥人関数が返すことを確認します。
learnerCoderConfigurer
|loadlearnerforcoder.
|Savelarnerforcoder.
|Codegen.
(MATLAB编码器)