ドキュメンテーション

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

update

コード生成用にモデル パラメーターを更新

説明

コーダー コンフィギュアラー オブジェクトを使用して、機械学習モデルの関数 predict および update に対する C/C++ コードを生成します。learnerCoderConfigurer およびそのオブジェクト関数 generateCode を使用してこのオブジェクトを作成します。これにより、生成されたコードのモデル パラメーターは、コードの再生成を必要としない、関数 update を使用した更新が可能になります。この機能により、新しいデータや設定でモデルに再学習をさせるときに、C/C++ コードの再生成、再展開および再確認に必要な作業が低減されます。

次のフロー チャートは、コーダー コンフィギュアラーを使用するコード生成のワークフローを示します。強調表示されているステップで update を使用します。

コードを生成しない場合、関数 update を使用する必要はありません。MATLAB® でモデルに再学習をさせると、返されるモデルには修正されたパラメーターが既に含まれています。

updatedMdl = update(Mdl,params) は、params の新しいパラメーターが含まれている更新されたバージョンの Mdl を返します。

モデルに再学習をさせた後で、関数 validatedUpdateInputs を使用して、再学習済みモデルの修正されたパラメーターを検出し、修正されたパラメーターの値がパラメーターのコーダー属性を満たすかどうかを検証します。validatedUpdateInputs の出力である検証されたパラメーターを入力 params として使用して、モデル パラメーターを更新します。

すべて折りたたむ

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

モデルの学習

carsmall データセットを読み込み、最初の 50 個の観測値を使用して SVM 回帰モデルに学習をさせます。

load carsmall
X = [Horsepower,Weight];
Y = MPG;
Mdl = fitrsvm(X(1:50,:),Y(1:50));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

コードの生成

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', 'RegressionSVMModel.mat'

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

生成されたコードの確認

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

yfit = predict(Mdl,X);
yfit_mex = RegressionSVMModel('predict',X);

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

find(abs(yfit-yfit_mex) > 1e-6)
ans =

  0x1 empty double column vector

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

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

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

retrainedMdl = fitrsvm(X,Y);

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

params = validatedUpdateInputs(configurer,retrainedMdl);

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

RegressionSVMModel('update',params)

生成されたコードの確認

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

yfit = predict(retrainedMdl,X);
yfit_mex = RegressionSVMModel('predict',X);
find(abs(yfit-yfit_mex) > 1e-6)
ans =

  0x1 empty double column vector

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

データセットの一部を使用して 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 が等しく、スコアの値が許容誤差内で等しいことを確認します。

SVM バイナリ学習器を使用する誤り訂正出力符号 (ECOC) モデルに学習をさせ、このモデルのコーダー コンフィギュアラーを作成します。コーダー コンフィギュアラーのプロパティを使用して、ECOC モデルのパラメーターのコーダー属性を指定します。コーダー コンフィギュアラーのオブジェクト関数を使用して、新しい予測子データについてラベルを予測する C コードを生成します。その後、異なる設定を使用してモデルに再学習をさせ、コードを再生成せずに、生成されたコードのパラメーターを更新します。

モデルの学習

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris
X = meas;
Y = species;

ガウス カーネル関数を使用し、予測子データを標準化する、SVM バイナリ学習器テンプレートを作成します。

t = templateSVM('KernelFunction','gaussian','Standardize',true);

テンプレート t を使用して、マルチクラス ECOC モデルに学習をさせます。

Mdl = fitcecoc(X,Y,'Learners',t);

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

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

learnerCoderConfigurer を使用して、ClassificationECOC モデルについてコーダー コンフィギュアラーを作成します。予測子データ X を指定します。関数 learnerCoderConfigurer は、入力 X を使用して、関数 predict の入力のコーダー属性を設定します。また、出力の個数を 2 に設定して、生成されるコードが関数predictの最初の 2 つの出力 (予測されたラベルと符号を反転した平均バイナリ損失) を返すようにします。

configurer = learnerCoderConfigurer(Mdl,X,'NumOutputs',2)
configurer = 
  ClassificationECOCCoderConfigurer with properties:

   Update Inputs:
    BinaryLearners: [1×1 ClassificationSVMCoderConfigurer]
             Prior: [1×1 LearnerCoderInput]
              Cost: [1×1 LearnerCoderInput]

   Predict Inputs:
                 X: [1×1 LearnerCoderInput]

   Code Generation Parameters:
        NumOutputs: 2
    OutputFileName: 'ClassificationECOCModel'


  Properties, Methods

configurer は、ClassificationECOC オブジェクトのコーダー コンフィギュアラーである ClassificationECOCCoderConfigurer オブジェクトです。表示には、predictupdate の調整可能な入力引数 XBinaryLearnersPrior および Cost が示されています。

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

predict の引数 (予測子データと名前と値のペアの引数 'Decoding' および 'BinaryLoss') と update の引数 (SVM 学習器のサポート ベクター) のコーダー属性を指定して、生成されるコードでこれらの引数を predictupdate の入力引数として使用できるようにします。

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

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

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

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

次に、生成されるコードで名前と値のペアの引数 'BinaryLoss' および 'Decoding' を使用するように、BinaryLossDecoding のコーダー属性を変更します。BinaryLoss のコーダー属性を表示します。

configurer.BinaryLoss
ans = 
  EnumeratedInput with properties:

             Value: 'hinge'
    SelectedOption: 'Built-in'
    BuiltInOptions: {'hamming'  'linear'  'quadratic'  'exponential'  'binodeviance'  'hinge'  'logit'}
        IsConstant: 1
        Tunability: 0

生成されるコードで既定以外の値を使用するには、コードを生成する前に値を指定しなければなりません。BinaryLossValue 属性として 'exponential' を指定します。

configurer.BinaryLoss.Value = 'exponential';
configurer.BinaryLoss
ans = 
  EnumeratedInput with properties:

             Value: 'exponential'
    SelectedOption: 'Built-in'
    BuiltInOptions: {'hamming'  'linear'  'quadratic'  'exponential'  'binodeviance'  'hinge'  'logit'}
        IsConstant: 1
        Tunability: 1

Tunabilityfalse (logical 0) である場合に属性値を変更すると、Tunabilitytrue (logical 1) に設定されます。

Decoding のコーダー属性を表示します。

configurer.Decoding
ans = 
  EnumeratedInput with properties:

             Value: 'lossweighted'
    SelectedOption: 'Built-in'
    BuiltInOptions: {'lossweighted'  'lossbased'}
        IsConstant: 1
        Tunability: 0

生成されるコードで BuiltInOptions の利用可能なすべての値を使用できるようにするため、DecodingIsConstant 属性として false を指定します。

configurer.Decoding.IsConstant = false;
configurer.Decoding
ans = 
  EnumeratedInput with properties:

             Value: [1×1 LearnerCoderInput]
    SelectedOption: 'NonConstant'
    BuiltInOptions: {'lossweighted'  'lossbased'}
        IsConstant: 0
        Tunability: 1

DecodingValue 属性が LearnerCoderInput オブジェクトに変更されるので、'lossweighted''lossbased' の両方を 'Decoding' の値として使用できます。また、SelectedOption'NonConstant' に、Tunabilitytrue に設定されます。

最後に、BinaryLearnersSupportVectors のコーダー属性を変更します。SupportVectors のコーダー属性を表示します。

configurer.BinaryLearners.SupportVectors
ans = 
  LearnerCoderInput with properties:

            SizeVector: [54 4]
    VariableDimensions: [1 0]
              DataType: 'double'
            Tunability: 1

各学習器でサポート ベクターの個数が異なるので、VariableDimensions の既定値は [true false] です。新しいデータまたは異なる設定を使用して ECOC モデルに再学習をさせた場合、SVM 学習器のサポート ベクターの個数が変化する可能性があります。したがって、サポート ベクターの個数の上限を増やします。

configurer.BinaryLearners.SupportVectors.SizeVector = [150 4];
SizeVector attribute for Alpha has been modified to satisfy configuration constraints.
SizeVector attribute for SupportVectorLabels has been modified to satisfy configuration constraints.

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

コーダー コンフィギュアラーを表示します。

configurer
configurer = 
  ClassificationECOCCoderConfigurer with properties:

   Update Inputs:
    BinaryLearners: [1×1 ClassificationSVMCoderConfigurer]
             Prior: [1×1 LearnerCoderInput]
              Cost: [1×1 LearnerCoderInput]

   Predict Inputs:
                 X: [1×1 LearnerCoderInput]
        BinaryLoss: [1×1 EnumeratedInput]
          Decoding: [1×1 EnumeratedInput]

   Code Generation Parameters:
        NumOutputs: 2
    OutputFileName: 'ClassificationECOCModel'


  Properties, Methods

BinaryLossDecoding も表示に含まれるようになりました。

コードの生成

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

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

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

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

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

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

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

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

生成されたコードの確認

予測子データを渡して、Mdl の関数 predict と MEX 関数の関数 predict が同じラベルを返すかどうかを確認します。複数のエントリポイントがある MEX 関数内のエントリポイント関数を呼び出すため、1 番目の入力引数として関数名を指定します。コードを生成する前に IsConstant 属性を変更して 'Decoding' を調整可能な入力引数として指定したので、'lossweighted''Decoding' の既定値ですが、MEX 関数を呼び出すときにも同じ指定を行う必要があります。

[label,NegLoss] = predict(Mdl,X,'BinaryLoss','exponential');
[label_mex,NegLoss_mex] = ClassificationECOCModel('predict',X,'BinaryLoss','exponential','Decoding','lossweighted');

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

isequal(label,label_mex)
ans = logical
   1

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

NegLoss と比較すると、NegLoss_mex には丸めによる差が含まれている可能性があります。このケースでは、小さい誤差を許容して NegLoss_mexNegLoss を比較します。

find(abs(NegLoss-NegLoss_mex) > 1e-8)
ans =

  0×1 empty double column vector

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

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

異なる設定を使用してモデルに再学習をさせます。ヒューリスティック手法を使用して適切なスケール係数が選択されるようにするため、'KernelScale' として 'auto' を指定します。

t_new = templateSVM('KernelFunction','gaussian','Standardize',true,'KernelScale','auto');
retrainedMdl = fitcecoc(X,Y,'Learners',t_new);

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

params = validatedUpdateInputs(configurer,retrainedMdl);

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

ClassificationECOCModel('update',params)

生成されたコードの確認

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

[label,NegLoss] = predict(retrainedMdl,X,'BinaryLoss','exponential','Decoding','lossbased');
[label_mex,NegLoss_mex] = ClassificationECOCModel('predict',X,'BinaryLoss','exponential','Decoding','lossbased');
isequal(label,label_mex)
ans = logical
   1

find(abs(NegLoss-NegLoss_mex) > 1e-8)
ans =

  0×1 empty double column vector

この比較により、labelslabels_mex が等しく、NegLossNegLoss_mex が許容誤差内で等しいことが確認されます。

入力引数

すべて折りたたむ

機械学習モデル。コンパクトなモデル オブジェクトを指定します。サポートされるモデルは次の表に記載されています。

モデルコンパクトなモデル オブジェクト
サポート ベクター マシン (SVM) 回帰CompactRegressionSVM
1 クラスおよびバイナリ分類用の SVMCompactClassificationSVM
SVM 用のマルチクラス モデルCompactClassificationECOC

機械学習モデルのコード生成に関する使用上の注意および制限については、モデル オブジェクトのページの「コード生成」セクションを参照してください。

機械学習モデル内の更新するパラメーター。更新する各パラメーターについてのフィールドをもつ構造体を指定します。

更新できるパラメーターは、次の表に記載されているように、機械学習モデルによって異なります。

モデル更新するパラメーター
SVM 回帰
  • 線形カーネル関数を使用して SVM 回帰モデル (Mdl) に学習をさせ、discardSupportVectors を使用してサポート ベクターを破棄する場合、params には BetaBiasMuScale (KernelParameters のカーネル スケール パラメーター)、および Sigma を含めることができます。

  • それ以外の場合、params には AlphaBiasMuScale (KernelParameters のカーネル スケール パラメーター)、Sigma、および SupportVectors を含めることができます。

1 クラスおよびバイナリ分類用の SVM
  • Mdl が 1 クラス SVM 分類モデルである場合、paramsCostPrior を含めることはできません。

SVM 用のマルチクラス モデルBinaryLearnersCostPrior

params は、関数 validatedUpdateInputs を使用して作成できます。この関数は、再学習済みモデルの修正されたパラメーターを検出し、修正されたパラメーターの値がパラメーターのコーダー属性を満たすかどうかを検証し、更新するパラメーターを構造体として返します。

出力引数

すべて折りたたむ

更新された機械学習モデル。Mdl と同じタイプのコンパクトなモデル オブジェクトとして返されます。出力 updatedMdl は、params の新しいパラメーターを含む、入力 Mdl の更新バージョンです。

ヒント

拡張機能

R2018b で導入