ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ClassificationSVMCoderConfigurer

1 クラスおよびバイナリ分類用のサポート ベクター マシン (SVM) のコーダー コンフィギュアラー

説明

ClassificationSVMCoderConfigurer オブジェクトは、SVM 分類モデル (ClassificationSVM または CompactClassificationSVM) のコーダー コンフィギュアラーです。

コーダー コンフィギュアラーには、コード生成オプションの設定、C/C++ コードの生成、および生成されたコード内のモデル パラメーターの更新を行うための便利な機能があります。

  • コード生成オプションを設定し、オブジェクトのプロパティを使用して SVM モデル パラメーターのコーダー属性を指定します。

  • generateCode を使用して、SVM 分類モデルの関数 predict および update に対して C/C++ コードを生成します。C/C++ コードの生成には MATLAB® Coder™ が必要です。

  • コードを再生成せずに、生成された C/C++ コードのモデル パラメーターを更新します。この機能により、新しいデータまたは設定で SVM モデルに再学習をさせるときに、C/C++ コードの再生成、再展開および再確認に必要な作業が不要になります。モデル パラメーターを更新する前に、validatedUpdateInputs を使用して更新対象のモデル パラメーターを検証および抽出します。

次のフロー チャートは、コーダー コンフィギュアラーを使用するコード生成のワークフローを示します。

SVM 分類モデルのコード生成に関する使用上の注意および制限については、CompactClassificationSVMpredict および update の「コード生成」セクションを参照してください。

作成

fitcsvm を使用して SVM 分類モデルに学習をさせた後で、learnerCoderConfigurer を使用してモデルのコーダー コンフィギュアラーを作成します。コーダー コンフィギュアラーのプロパティを使用して、predict および update の引数のコーダー属性を指定します。その後、generateCode を使用して、指定したコーダー属性に基づく C/C++ コードを生成します。

プロパティ

すべて展開する

predict の引数

この節に記載されているプロパティは、生成されるコードにおける関数 predict の引数のコーダー属性を指定します。

SVM 分類モデルの関数 predict に対して生成される C/C++ コードに渡す、予測子データのコーダー属性。LearnerCoderInput オブジェクトを指定します。

関数 learnerCoderConfigurer を使用してコーダー コンフィギュアラーを作成する場合、入力引数 XLearnerCoderInput のコーダー属性の既定値を決定します。

  • SizeVector — 既定値は入力 X の配列サイズです。

  • VariableDimensions — この値は [0,0] (既定) または [1,0] です。

    • [0,0] は、SizeVector の指定に従って配列サイズを固定することを示します。

    • [1,0] は、配列の行が可変サイズ、列が固定サイズであることを示します。この場合、SizeVector の 1 番目の値は行数の上限、SizeVector の 2 番目の値は列数です。

  • DataType — この値は single または double です。既定のデータ型は、入力 X のデータ型に依存します。

  • Tunability — この値は、生成される C/C++ コードの predict に必ず予測子データを入力として含めることを意味する true でなければなりません。

コーダー属性は、ドット表記を使用して変更できます。たとえば、3 つの予測子変数に対する観測値が 100 個含まれている予測子データを受け入れる C/C++ コードを生成する場合、次のようにコーダー コンフィギュアラー configurerX のコーダー属性を指定します。

configurer.X.SizeVector = [100 3];
configurer.X.DataType = 'double';
configurer.X.VariableDimensions = [0 0];
[0 0] は、X の 1 番目および 2 番目の次元 (それぞれ観測値の個数と予測子変数の個数) が固定サイズであることを示します。

生成される C/C++ コードが、最大 100 個の観測値がある予測子データを受け入れるようにするには、次のように X のコーダー属性を指定します。

configurer.X.SizeVector = [100 3];
configurer.X.DataType = 'double';
configurer.X.VariableDimensions = [1 0];
[1 0] は、X の 1 番目の次元 (観測値の個数) が可変サイズであり、X の 2 番目の次元 (予測子変数の個数) が固定サイズであることを示します。指定した観測値の個数 (この例では 100) は、生成される C/C++ コードで許容される観測値の最大数になります。任意の個数の観測値を可能にするには、上限として Inf を指定します。

SVM 分類モデルの関数 predict に対して生成される C/C++ コードから返される出力引数の個数。1 または 2 を指定します。

predict の出力引数は、順番に label (予測されたクラス ラベル) および score (スコアまたは事後確率) です。生成された C/C++ コードの predict は、関数 predict の最初の n 個の出力を返します。nNumOutputs の値です。

コーダー コンフィギュアラー configurer を作成した後で、ドット表記を使用して出力の個数を指定できます。

configurer.NumOutputs = 2;

NumOutputs プロパティは、codegen のコンパイラ オプション '-nargout' と等価です。このオプションは、コード生成のエントリポイント関数における出力引数の個数を指定します。オブジェクト関数 generateCode は、SVM 分類モデルの関数 predict および update に対して predict.m および update.m という 2 つのエントリポイント関数をそれぞれ生成し、この 2 つのエントリポイント関数に対して C/C++ コードを生成します。NumOutputs プロパティについて指定した値は、エントリポイント関数 predict.m の出力引数の個数に対応します。

データ型: double

update の引数

この節に記載されているプロパティは、生成されるコードにおける関数 update の引数のコーダー属性を指定します。関数 update は、学習済みモデルと新しいモデル パラメーターを入力として受け入れ、新しいパラメーターが含まれている更新されたバージョンのモデルを返します。生成コード内のパラメーターを更新できるようにするには、コード生成の前にパラメーターのコーダー属性を指定する必要があります。各パラメーターのコーダー属性を指定するには、LearnerCoderInput オブジェクトを使用します。既定の属性値は、learnerCoderConfigurer の入力引数 Mdl のモデル パラメーターに基づきます。

学習済み分類器の係数 (SVM 分類モデルの Alpha) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector — 既定値は [s,1] です。s は、Mdl 内のサポート ベクターの個数です。

  • VariableDimensions — この値は [0,0] (既定) または [1,0] です。

    • [0,0] は、SizeVector の指定に従って配列サイズを固定することを示します。

    • [1,0] は、配列の行が可変サイズ、列が固定サイズであることを示します。この場合、SizeVector の 1 番目の値は行数の上限、SizeVector の 2 番目の値は列数です。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability — 線形カーネル関数が含まれているモデルに学習をさせるときに、線形予測子の係数 (Beta) がモデルに格納されており、サポート ベクターおよび関連する値は格納されていない場合、この値は false でなければなりません。それ以外の場合、この値は true でなければなりません。

線形予測子の係数 (SVM 分類モデルの Beta) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector — この値は [p,1] でなければなりません。p は、Mdl 内の予測子の個数です。

  • VariableDimensions — この値は、SizeVector の指定に従って配列サイズを固定することを示す [0,0] でなければなりません。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability — 線形カーネル関数が含まれているモデルに学習をさせるときに、線形予測子の係数 (Beta) がモデルに格納されており、サポート ベクターおよび関連する値は格納されていない場合、この値は true でなければなりません。それ以外の場合、この値は false でなければなりません。

バイアス項 (SVM 分類モデルの Bias) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector — この値は [1,1] でなければなりません。

  • VariableDimensions — この値は、SizeVector の指定に従って配列サイズを固定することを示す [0,0] でなければなりません。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability — この値は true でなければなりません。

誤分類コスト (SVM 分類モデルの Cost) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector — バイナリ分類の場合、この値は [2 2] でなければなりません。1 クラス分類の場合、この値は [1 1] でなければなりません。

  • VariableDimensions — この値は、SizeVector の指定に従って配列サイズを固定することを示す [0,0] でなければなりません。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability — バイナリ分類の場合、既定値は true です。1 クラス分類の場合、この値は false でなければなりません。

予測子の平均 (SVM 分類モデルの Mu) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector'Standardize',true を指定することにより、標準化された予測子データを使用して Mdl に学習をさせる場合、この値は [1,p] でなければなりません。pMdl 内の予測子の個数です。それ以外の場合、この値は [0,0] でなければなりません。

  • VariableDimensions — この値は、SizeVector の指定に従って配列サイズを固定することを示す [0,0] でなければなりません。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability'Standardize',true を指定することにより、標準化された予測子データを使用して Mdl に学習をさせる場合、既定値は true です。それ以外の場合、この値は false でなければなりません。

事前確率 (SVM 分類モデルの Prior) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector — バイナリ分類の場合、この値は [1 2] でなければなりません。1 クラス分類の場合、この値は [1 1] でなければなりません。

  • VariableDimensions — この値は、SizeVector の指定に従って配列サイズを固定することを示す [0,0] でなければなりません。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability — バイナリ分類の場合、既定値は true です。1 クラス分類の場合、この値は false でなければなりません。

カーネル スケール パラメーター (SVM 分類モデルの KernelParameters.Scale) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector — この値は [1,1] でなければなりません。

  • VariableDimensions — この値は、SizeVector の指定に従って配列サイズを固定することを示す [0,0] でなければなりません。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability — 既定値は true です。

予測子の標準偏差 (SVM 分類モデルの Sigma) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector'Standardize',true を指定することにより、標準化された予測子データを使用して Mdl に学習をさせる場合、この値は [1,p] でなければなりません。pMdl 内の予測子の個数です。それ以外の場合、この値は [0,0] でなければなりません。

  • VariableDimensions — この値は、SizeVector の指定に従って配列サイズを固定することを示す [0,0] でなければなりません。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability'Standardize',true を指定することにより、標準化された予測子データを使用して Mdl に学習をさせる場合、既定値は true です。それ以外の場合、この値は false でなければなりません。

サポート ベクターのクラス ラベル (SVM 分類モデルの SupportVectorLabels) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector — 既定値は [s,1] です。s は、Mdl 内のサポート ベクターの個数です。

  • VariableDimensions — この値は [0,0] (既定) または [1,0] です。

    • [0,0] は、SizeVector の指定に従って配列サイズを固定することを示します。

    • [1,0] は、配列の行が可変サイズ、列が固定サイズであることを示します。この場合、SizeVector の 1 番目の値は行数の上限、SizeVector の 2 番目の値は列数です。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability — 線形カーネル関数が含まれているモデルに学習をさせるときに、線形予測子の係数 (Beta) がモデルに格納されており、サポート ベクターおよび関連する値は格納されていない場合、この値は false でなければなりません。それ以外の場合、この値は true でなければなりません。

サポート ベクター (SVM 分類モデルの SupportVectors) のコーダー属性。LearnerCoderInput オブジェクトを指定します。

LearnerCoderInput オブジェクトの既定の属性値は、learnerCoderConfigurer の入力引数 Mdl に基づきます。

  • SizeVector — 既定値は [s,p] です。sMdl 内のサポート ベクターの個数、p は予測子の個数です。

  • VariableDimensions — この値は [0,0] (既定) または [1,0] です。

    • [0,0] は、SizeVector の指定に従って配列サイズを固定することを示します。

    • [1,0] は、配列の行が可変サイズ、列が固定サイズであることを示します。この場合、SizeVector の 1 番目の値は行数の上限、SizeVector の 2 番目の値は列数です。

  • DataType — この値は single または double です。既定のデータ型は、Mdl の学習に使用する学習データのデータ型に一致します。

  • Tunability — 線形カーネル関数が含まれているモデルに学習をさせるときに、線形予測子の係数 (Beta) がモデルに格納されており、サポート ベクターおよび関連する値は格納されていない場合、この値は false でなければなりません。それ以外の場合、この値は true でなければなりません。

他のコンフィギュアラーのオプション

生成される C/C++ コードのファイル名。文字ベクトルを指定します。

ClassificationSVMCoderConfigurer のオブジェクト関数 generateCode は、このファイル名を使用して C/C++ コードを生成します。

オペレーティング システムの構成によってはコード生成に失敗する可能性があるので、ファイル名には空白を含めないでください。また、名前は有効な MATLAB 関数名でなければなりません。

コーダー コンフィギュアラー configurer を作成した後で、ドット表記を使用してファイル名を指定できます。

configurer.OutputFileName = 'myModel';

データ型: char

詳細レベル。true (logical 1) または false (logical 0) を指定します。詳細レベルは、コマンド ラインにおける通知メッセージの表示を制御します。

説明
true (logical 1)パラメーターのコーダー属性に対する変更によって他の従属するパラメーターが変化する場合、通知メッセージが表示されます。
false (logical 0)通知メッセージは表示されません。

生成コード内の機械学習のモデル パラメーターを更新できるようにするには、コード生成の前にパラメーターのコーダー属性を構成する必要があります。パラメーターのコーダー属性は互いに依存するので、依存関係が構成の制約として保存されます。コーダー コンフィギュアラーを使用してパラメーターのコーダー属性を変更するときに、構成の制約を満たすために他の従属するパラメーターも変更する必要がある場合、従属するパラメーターのコーダー属性が変更されます。詳細レベルは、これらの引き続いて起きた変更についてメッセージを表示するかどうかを決定します。

コーダー コンフィギュアラー configurer を作成した後で、ドット表記を使用して詳細レベルを変更できます。

configurer.Verbose = false;

データ型: logical

コード生成のカスタマイズのオプション

コード生成ワークフローをカスタマイズするには、関数 generateCode を使用するのではなく、関数 generateFiles と以下の 3 つのプロパティを codegen で使用します。

関数 generateFiles を使用して 2 つのエントリポイント関数ファイル (predict.m および update.m) を生成した後で、独自のコード生成ワークフローに従って、これらのファイルを変更できます。たとえば、predict.m ファイルを変更してデータの前処理を含めたり、これらのエントリポイント関数を別のコード生成プロジェクトに追加したりできます。その後、関数 codegen と、変更したエントリポイント関数またはコード生成プロジェクトに適した codegen の引数とを使用して C/C++ コードを生成できます。引数 codegen を設定するための出発点として、このセクションで説明されている 3 つのプロパティを使用します。

このプロパティは読み取り専用です。

codegen の引数。cell 配列を指定します。

このプロパティにより、コード生成ワークフローをカスタマイズできます。ワークフローをカスタマイズする必要がない場合は関数 generateCode を使用します。

generateCode をコーダー コンフィギュアラー configurer に対して使用する代わりに、次のようにして C/C++ コードを生成できます。

generateFiles(configurer)
cgArgs = configurer.CodeGenerationArguments;
codegen(cgArgs{:})
コード生成ワークフローをカスタマイズする場合、それに応じて、codegen を呼び出す前に cgArgs を変更します。

configurer の他のプロパティを変更すると、それに従って CodeGenerationArguments プロパティが更新されます。

データ型: cell

このプロパティは読み取り専用です。

コード生成用のエントリポイント関数 predict.m の入力引数。coder.PrimitiveType オブジェクトの cell 配列を指定します。coder.PrimitiveType オブジェクトには、X プロパティに格納されている予測子データのコーダー属性が格納されます。

予測子データのコーダー属性を変更すると、それに従って coder.PrimitiveType オブジェクトが更新されます。

PredictInputscoder.PrimitiveType オブジェクトは、コーダー コンフィギュアラー configurerconfigurer.CodeGenerationArguments{6} と等価です。

データ型: cell

このプロパティは読み取り専用です。

コード生成用のエントリポイント関数 update.m の調整可能な入力引数のリスト。coder.PrimitiveType オブジェクトが含まれている構造体の cell 配列を指定します。各 coder.PrimitiveType オブジェクトには、調整可能な機械学習モデル パラメーターのコーダー属性が格納されます。

コーダー コンフィギュアラーのプロパティ (update の引数のプロパティ) を使用してモデル パラメーターのコーダー属性を変更すると、それに従って対応する coder.PrimitiveType オブジェクトが更新されます。機械学習モデル パラメーターの Tunability 属性として false を指定した場合、対応する coder.PrimitiveType オブジェクトが UpdateInputs のリストから削除されます。

UpdateInputs の構造体は、コーダー コンフィギュアラー configurerconfigurer.CodeGenerationArguments{3} と等価です。

データ型: cell

オブジェクト関数

generateCodeコーダー コンフィギュアラーの使用による C/C++ コードの生成
generateFilesコーダー コンフィギュアラーを使用するコード生成用 MATLAB ファイルの生成
validatedUpdateInputs更新する機械学習モデルのパラメーターの検証および抽出

すべて折りたたむ

機械学習モデルに学習をさせてから、コーダー コンフィギュアラーを使用して、このモデルの関数 predict および update に対してコードを生成します。

ionosphere データセットを読み込み、バイナリ SVM 分類モデルに学習をさせます。

load ionosphere
Mdl = fitcsvm(X,Y);

Mdl は、ClassificationSVM オブジェクトです。

learnerCoderConfigurer を使用して、ClassificationSVM モデルについてコーダー コンフィギュアラーを作成します。予測子データ X を指定します。関数 learnerCoderConfigurer は、入力 X を使用して、関数 predict の入力のコーダー属性を設定します。

configurer = learnerCoderConfigurer(Mdl,X)
configurer = 
  ClassificationSVMCoderConfigurer with properties:

   Update Inputs:
                  Alpha: [1x1 LearnerCoderInput]
         SupportVectors: [1x1 LearnerCoderInput]
    SupportVectorLabels: [1x1 LearnerCoderInput]
                  Scale: [1x1 LearnerCoderInput]
                   Bias: [1x1 LearnerCoderInput]
                  Prior: [1x1 LearnerCoderInput]
                   Cost: [1x1 LearnerCoderInput]

   Predict Inputs:
                      X: [1x1 LearnerCoderInput]

   Code Generation Parameters:
             NumOutputs: 1
         OutputFileName: 'ClassificationSVMModel'


  Properties, Methods

configurer は、ClassificationSVM オブジェクトのコーダー コンフィギュアラーである ClassificationSVMCoderConfigurer オブジェクトです。

C/C++ コードを生成するには、適切に設定されている C/C++ コンパイラにアクセスできなければなりません。MATLAB Coder は、サポートされているインストール済みのコンパイラを探して使用します。mex -setup を使用すると、既定のコンパイラを表示および変更できます。詳細は、既定のコンパイラの変更 (MATLAB)を参照してください。

既定の設定を使用して、SVM 分類モデル (Mdl) の関数 predict および update に対するコードを生成します。

generateCode(configurer)
generateCode creates these files in output folder:
'initialize.m', 'predict.m', 'update.m', 'ClassificationSVMModel.mat'

関数generateCodeは以下の処理を実行します。

  • コードを生成するために必要な MATLAB ファイルを生成する。これには、Mdl の関数 predict および update にそれぞれ対応する 2 つのエントリポイント関数 predict.m および update.m が含まれます。

  • 2 つのエントリポイント関数に対して、ClassificationSVMModel という名前の MEX 関数を作成する。

  • MEX 関数のコードを codegen\mex\ClassificationSVMModel フォルダーに作成する。

  • MEX 関数を現在のフォルダーにコピーする。

関数typeを使用して、predict.mupdate.m および initialize.m ファイルの内容を表示します。

type predict.m
function varargout = predict(X,varargin) %#codegen
% Autogenerated by MATLAB,  09-Feb-2019 00:41:18
[varargout{1:nargout}] = initialize('predict',X,varargin{:});
end
type update.m
function update(varargin) %#codegen
% Autogenerated by MATLAB,  09-Feb-2019 00:41:18
initialize('update',varargin{:});
end
type initialize.m
function [varargout] = initialize(command,varargin) %#codegen
% Autogenerated by MATLAB, 09-Feb-2019 00:41:18
coder.inline('always');
persistent model;
if isempty(model)
    model = loadCompactModel('ClassificationSVMModel.mat');
end
switch(command)
    case 'update'
        % Update struct fields: Alpha
        %                       SupportVectors
        %                       SupportVectorLabels
        %                       Scale
        %                       Bias
        %                       Prior
        %                       Cost
        
        model = update(model,varargin{:});
    case 'predict'
        % Predict Inputs: X
        
        X = varargin{1};
        if nargin == 2
            [varargout{1:nargout}] = predict(model,X);
        else
            PVPairs = cell(1,nargin-2);
            for i = 1:nargin-2
                PVPairs{1,i} = varargin{i+1};
            end
            [varargout{1:nargout}] = predict(model,X,PVPairs{:});
        end
end
end

データセットの一部を使用して SVM モデルに学習をさせ、モデルについてコーダー コンフィギュアラーを作成します。コーダー コンフィギュアラーのプロパティを使用して、SVM モデル パラメーターのコーダー属性を指定します。コーダー コンフィギュアラーのオブジェクト関数を使用して、新しい予測子データについてラベルを予測する C コードを生成します。その後、データセット全体を使用してモデルに再学習をさせ、コードを再生成せずに、生成されたコードのパラメーターを更新します。

モデルの学習

ionosphere データセットを読み込みます。このデータセットには、レーダー反射についての 34 個の予測子と、不良 ('b') または良好 ('g') という 351 個の二項反応が含まれています。最初の 50 個の観測値を使用して、バイナリ SVM 分類モデルに学習をさせます。

load ionosphere
Mdl = fitcsvm(X(1:50,:),Y(1:50));

Mdl は、ClassificationSVM オブジェクトです。

コーダー コンフィギュアラーの作成

learnerCoderConfigurer を使用して、ClassificationSVM モデルについてコーダー コンフィギュアラーを作成します。予測子データ X を指定します。関数 learnerCoderConfigurer は、入力 X を使用して、関数 predict の入力のコーダー属性を設定します。また、生成されるコードが予測ラベルおよびスコアを返すようにするため、出力の個数を 2 に設定します。

configurer = learnerCoderConfigurer(Mdl,X(1:50,:),'NumOutputs',2);

configurer は、ClassificationSVM オブジェクトのコーダー コンフィギュアラーである ClassificationSVMCoderConfigurer オブジェクトです。

パラメーターのコーダー属性の指定

生成されたコードのパラメーターをモデルの再学習後に更新できるようにするため、SVM 分類モデルのパラメーターのコーダー属性を指定します。この例では、生成されたコードに渡す予測子データのコーダー属性と、SVM モデルのサポート ベクターのコーダー属性を指定します。

はじめに、生成されたコードが任意の個数の観測値を受け入れるように、X のコーダー属性を指定します。属性 SizeVector および VariableDimensions を変更します。属性 SizeVector は、予測子データのサイズの上限を指定し、属性 VariableDimensions は、予測子データの各次元が可変サイズと固定サイズのどちらであるかを指定します。

configurer.X.SizeVector = [Inf 34];
configurer.X.VariableDimensions = [true false];

1 番目の次元のサイズは、観測値の個数です。このケースでは、サイズの上限が Inf であり、サイズが可変、つまり X の観測値の個数が任意であることを指定します。この指定は、コードを生成するときに観測値の個数が不明である場合に便利です。

2 番目の次元のサイズは、予測子変数の個数です。この値は、機械学習モデルに対し固定でなければなりません。X には 34 個の予測子が含まれているので、属性 SizeVector の値は 34、属性 VariableDimensions の値は false でなければなりません。

新しいデータまたは異なる設定を使用して SVM モデルに再学習をさせた場合、サポート ベクターの個数が変化する可能性があります。したがって、生成されたコードのサポート ベクターを更新できるように SupportVectors のコーダー属性を指定します。

configurer.SupportVectors.SizeVector = [250 34];
SizeVector attribute for Alpha has been modified to satisfy configuration constraints.
SizeVector attribute for SupportVectorLabels has been modified to satisfy configuration constraints.
configurer.SupportVectors.VariableDimensions = [true false];
VariableDimensions attribute for Alpha has been modified to satisfy configuration constraints.
VariableDimensions attribute for SupportVectorLabels has been modified to satisfy configuration constraints.

SupportVectors のコーダー属性が変更されると、Alpha および SupportVectorLabels のコーダー属性が構成の制約を満たすように変更されます。あるパラメーターのコーダー属性の変更によって構成の制約を満たすために他の従属パラメーターの変更が必要になる場合、従属パラメーターのコーダー属性は変更されます。

コードの生成

C/C++ コードを生成するには、適切に設定されている C/C++ コンパイラにアクセスできなければなりません。MATLAB Coder は、サポートされているインストール済みのコンパイラを探して使用します。mex -setup を使用すると、既定のコンパイラを表示および変更できます。詳細は、既定のコンパイラの変更 (MATLAB)を参照してください。

generateCodeを使用して、SVM 分類モデル (Mdl) の関数 predict および update について、既定の設定でコードを生成します。

generateCode(configurer)
generateCode creates these files in output folder:
'initialize.m', 'predict.m', 'update.m', 'ClassificationSVMModel.mat'

generateCode は、コードを生成するために必要な MATLAB ファイルを生成します。これには、Mdl の関数 predict および update にそれぞれ対応する 2 つのエントリポイント関数 predict.m および update.m が含まれます。次に generateCode は、2 つのエントリポイント関数に対して ClassificationSVMModel という名前の MEX 関数を codegen\mex\ClassificationSVMModel フォルダー内に作成し、この MEX 関数を現在のフォルダーにコピーします。

生成されたコードの確認

予測子データを渡して、Mdl の関数 predict と MEX 関数の関数 predict が同じラベルを返すかどうかを確認します。複数のエントリポイントがある MEX 関数内のエントリポイント関数を呼び出すため、1 番目の入力引数として関数名を指定します。

[label,score] = predict(Mdl,X);
[label_mex,score_mex] = ClassificationSVMModel('predict',X);

isequal を使用して、labellabel_mex を比較します。

isequal(label,label_mex)
ans = logical
   1

すべての入力が等しい場合、isequal は logical 1 (true) を返します。この比較により、同じラベルを Mdl の関数 predict と MEX 関数の関数 predict が返すことを確認します。

score と比較すると、score_mex には丸めによる差が含まれている場合があります。このような場合は、小さい誤差を許容して score_mexscore を比較します。

find(abs(score-score_mex) > 1e-8)
ans =

  0x1 empty double column vector

この比較により、許容誤差 1e–8 内で scorescore_mex が等しいことを確認します。

モデルの再学習と生成コード内のパラメーターの更新

データセット全体を使用してモデルに再学習をさせます。

retrainedMdl = fitcsvm(X,Y);

validatedUpdateInputs を使用して、更新するパラメーターを抽出します。この関数は、retrainedMdl 内の修正されたモデル パラメーターを判別し、修正されたパラメーター値がパラメーターのコーダー属性を満たすかどうかを検証します。

params = validatedUpdateInputs(configurer,retrainedMdl);

生成されたコード内のパラメーターを更新します。

ClassificationSVMModel('update',params)

生成されたコードの確認

retrainedMdl の関数 predict の出力と、更新した MEX 関数の関数 predict の出力を比較します。

[label,score] = predict(retrainedMdl,X);
[label_mex,score_mex] = ClassificationSVMModel('predict',X);
isequal(label,label_mex)
ans = logical
   1

find(abs(score-score_mex) > 1e-8)
ans =

  0x1 empty double column vector

この比較により、labelslabels_mex が等しく、スコアの値が許容誤差内で等しいことを確認します。

詳細

すべて展開する

R2018b で導入