このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,分類および回帰モデルオブジェクトの予測を行うためのコードをコマンドラインで生成する方法を示します。MATLAB®Coder™アプリを使用してコ,ドを生成することもできます。詳細にいては,機械学習モデルの予測をMATLAB Coderアプリを使用して行うコ,ドの生成を参照してください。
一部の分類および回帰モデルオブジェクトには,コ,ド生成をサポ,トする関数预测
または随机
があります。これらのオブジェクト関数を使用する予測には学習済みの分類または回帰モデルオブジェクトが必要ですが,codegen
(MATLAB编码器)のarg游戏
オプションはこれらのオブジェクトを受け入れません。この例で説明されているようにsaveLearnerForCoder
とloadLearnerForCoder
を使用して,この制限に対処します。
次のフローチャートは,分類および回帰モデルオブジェクトのオブジェクト関数に対するコード生成ワークフローを示します。
モデルに学習をさせた後で,saveLearnerForCoder
を使用して学習済みモデルを保存します。loadLearnerForCoder
を使用して保存済みモデルを読み込んでオブジェクト関数を呼び出す,エントリポ。次に,codegen
を使用してエントリポント関数のコドを生成し,生成されたコドを確認します。
コ,ド生成に対応している関数预测
がある分類モデルオブジェクトに学習をさせます。このケ,スでは,サポトベクター マシン (SVM) 分類モデルに学習をさせます。
负载fisheririsInds = ~strcmp(种,“setosa”);X = meas(inds,3:4);Y = species(inds);Mdl = fitcsvm(X,Y);
この手順には,データの前処理,特徴選択および(交差検証などの使用による)モデルの最適化が含まれる可能性があります。
saveLearnerForCoder
の使用によるモデルの保存saveLearnerForCoder
を使用して,分類モデルをSVMModel.mat
というファ@ @ルに保存します。
saveLearnerForCoder (Mdl“SVMModel”);
saveLearnerForCoder
は,現在のフォルダ,のmatlabバSVMModel.mat
に構造体配列として分類モデルを保存します。
“エントリポ电子邮箱ント”関数は,コ,ド生成用に定義する関数で,“最上位”関数または"プラ电子邮箱マリ"関数とも呼ばれます。codegen
を使用して最上位レベルの関数を呼び出すことはできないので,コード生成に対応する関数を呼び出すエントリポイント関数を定義し,codegen
を使用してエントリポc / c++コドを生成しなければなりません。エントリポント関数内のすべての関数がコド生成をサポトしなければなりません。
入力された予測子デタに対して予測したラベルを返すエントリポント関数を定義します。この関数では,loadLearnerForCoder
を使用して学習済みの分類モデルを読み込み,预测
に渡します。このケ,スでは,svmモデルMdl
を使用してラベルを予測する関数predictLabelsSVM
を定義します。
类型predictLabelsSVM.m显示predictLabelsSVM的内容。m文件
function label = predictLabelsSVM(x) %#codegen % predictLabelsSVM使用训练好的SVM模型Mdl标记新的观察结果% predictLabelsSVM使用%保存的SVM模型Mdl和预测器数据x预测标签的矢量标签。Mdl = loadLearnerForCoder('SVM model ');label = predict(Mdl,x);结束
MATLABのアルゴリズムについてのコードを生成しようとしていることを指示するため,コンパイラ命令% # codegen
(またはプラグマ)をエントリポ▪▪▪ント関数のシグネチャの後に追加します。この命令を追加すると,MATLAB代码分析器はコード生成時にエラーになる違反の診断と修正を支援します。コドアナラザによるコドのチェック(MATLAB编码器)を参照してください。
メモ:このページの右上にあるボタンをクリックしてこの例をMATLAB®で開くと,MATLAB®で例のフォルダーが開きます。このフォルダには,エントリポント関数のファルが含まれています。
コンパ@ @ラの設定
C / c++コードを生成するには,適切に設定されているC / c++コンパイラにアクセスできなければなりません。MATLAB编码器は,サポ,トされている,ンスト,ラを探して使用します。墨西哥人
设置
を使用すると,既定のコンパ。詳細は,既定のコンパ@ @ラの変更を参照してください。
codegen
の使用によるコ,ドの生成
codegen
(MATLAB编码器)を使用して,エントリポ。Cおよびc++は静的な型の言語なので,エントリポイント関数内のすべての変数のプロパティをコンパイル時に決定しなければなりません。codegen
を呼び出すときにarg游戏
オプションを使用して,エントリポ▪▪ント関数のすべての入力に▪▪いてデ▪タ型とサ▪▪ズを指定します。
このケ,スでは,arg游戏
オプションの値としてX
を渡し,生成コ,ドが学習デ,タX
と同じデ,タ型および配列サ,入力を受け入れなければならないことを指定します。
codegenpredictLabelsSVMarg游戏{X}
代码生成成功。
コンパ电子邮箱ル時に観測値の個数が不明である場合,coder.typeof
(MATLAB编码器)を使用して可変サ@ @ズの入力を指定することもできます。詳細にいては,コド生成用の可変サズ引数の指定とエントリポ@ @ント関数の入力のプロパティの指定(MATLAB编码器)を参照してください。
ビルドタ@ @プ
MATLAB编码器は,以下のビルドタ,。
Mex (matlab実行可能ファaapl . exeル)関数
スタンドアロンc / c++コド
c / c++コド
c / c++コド
c / c++コド
ビルドタ电子邮箱プは,codegen
(MATLAB编码器)の配置
オプションを使用して指定できます。コ,ド生成オプションの設定の詳細については、codegen
(MATLAB编码器)の配置
オプションとビルド設定の構成(MATLAB编码器)を参照してください。
既定では,codegen
はmex関数を生成します。Mex関数は,matlabから実行できるc / c++プログラムです。墨西哥人関数を使用すると,MATLABのアルゴリズムを高速化し,生成されたコードの機能と実行時の問題をテストすることができます。詳細は,Matlabアルゴリズムの高速化(MATLAB编码器)とMatlabでmex関数をテストする理由(MATLAB编码器)を参照してください。
コ,ド生成レポ,ト
报告
フラグを使用して,コ,ド生成レポ,トを作成できます。このレポトは,コド生成の問題のデバッグと,生成されたc / c++コドの確認に役立ます。詳細にいては,コ,ド生成レポ,ト(MATLAB编码器)を参照してください。
墨西哥人関数をテストして,生成されたコードが元のMATLABコードと同じ機能を提供するかどうかを確認します。このテストを実行するため,元のMATLABコードの実行に使用したものと同じ入力を使用して墨西哥人関数を実行してから,結果を比較します。スタンドアロンコードを生成する前にMATLABで墨西哥人関数を実行すると,実行時エラーを検出して修正することもできます。生成されたスタンドアロンコ,ドでは,このようなエラ,の診断がはるかに困難になります。詳細は,Matlabでmex関数をテストする理由(MATLAB编码器)を参照してください。
予測子デ,タを渡して,预测
、predictLabelsSVM
およびmex関数が同じラベルを返すかどうかを確認します。
labels1 =预测(Mdl,X);labels2 = predictLabelsSVM(X);labels3 = predictLabelsSVM_mex(X);
isequal
を使用して,予測されたラベルを比較します。
verifyMEX = isequal(labels1,labels2,labels3)
verifyMEX =逻辑1
isequal
は,すべての入力が等しいことを意味する逻辑1 (真正的
)を返します。この比較により,同じラベルを関数预测
、関数predictLabelsSVM
,およびmex関数が返すことを確認します。
codegen
(MATLAB编码器)|saveLearnerForCoder
|loadLearnerForCoder
|learnerCoderConfigurer