主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

更新

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

説明

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

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

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

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

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

すべて折りたたむ

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

モデルの学習

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

负载电离层Mdl = fitcsvm (X (1:50:), Y (1:50));

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

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

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

配置= learnerCoderConfigurer (Mdl X (1:50,:)“NumOutputs”2);

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

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

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

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

configuration . x . sizevector = [Inf 34];configurer.X.VariableDimensions = [true false];

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

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

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

configurati金宝appon . supportvectors . sizevector = [250 34];
Alpha的SizeVector属性已被修改以满足配置约束。修改了SupportVectorLabels的Si金宝appzeVector属性以满足配置约束。
configurer.金宝appSupportVectors.VariableDimensions = [true false];
已修改Alpha的VariableDimensions属性以满足配置约束。修改了SupportVectorLabels的VariableDi金宝appmensions属性以满足配置约束。

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

コードの生成

C / c++コードを生成するには,適切に設定されているC / c++コンパイラにアクセスできなければなりません。MATLAB编码器は,サポートされているインストール済みのコンパイラを探して使用します。墨西哥人设置を使用すると,既定のコンパイラを表示および変更できます。詳細は,既定のコンパイラの変更を参照してください。

generateCodeを使用して,支持向量机分類モデル(Mdl)の関数预测および更新について,既定の設定でコードを生成します。

generateCode(配置)
generateCode在输出文件夹中创建这些文件:米”、“预测。米”、“更新。米”、“ClassificationSVMModel.mat”

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

生成されたコードの確認

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

(标签,分数)=预测(Mdl X);[label_mex, score_mex] = ClassificationSVMModel (“预测”, X);

isequalを使用して,标签label_mexを比較します。

label_mex isequal(标签)
ans =逻辑1

すべての入力が等しい場合,isequalは逻辑1 (真正的)を返します。この比較により,同じラベルをMdlの関数预测と墨西哥人関数の関数预测が返すことを確認します。

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

找到(abs (score-score_mex) > 1 e-8)
Ans = 0x1空双列向量

この比較により,許容誤差1 e-8内で分数score_mexが等しいことを確認します。

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

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

retrainedMdl = fitcsvm (X, Y);

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

params = validatedUpdateInputs(配置、retrainedMdl);

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

ClassificationSVMModel (“更新”params)

生成されたコードの確認

retrainedMdlの関数预测の出力と,更新した墨西哥人関数の関数预测の出力を比較します。

(标签,分数)=预测(retrainedMdl X);[label_mex, score_mex] = ClassificationSVMModel (“预测”, X);label_mex isequal(标签)
ans =逻辑1
找到(abs (score-score_mex) > 1 e-8)
Ans = 0x1空双列向量

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

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

モデルの学習

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

负载fisheririsX =量;Y =物种;

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

t = templateSVM (“KernelFunction”“高斯”“标准化”,真正的);

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

Mdl = fitcecoc (X, Y,“学习者”t);

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

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

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

配置= learnerCoderConfigurer (Mdl X,“NumOutputs”, 2)
配置= ClassificationECOCCoderConfigurer属性:更新输入:BinaryLearners:之前[1 x1 ClassificationSVMCoderConfigurer]: [1 x1 LearnerCoderInput]成本:[1 x1 LearnerCoderInput]预测输入:X: [1 x1 LearnerCoderInput]代码生成参数:NumOutputs: 2 OutputFileName:“ClassificationECOCModel”属性,方法

配置は,ClassificationECOCオブジェクトのコーダーコンフィギュアラーであるClassificationECOCCoderConfigurerオブジェクトです。表示には,预测更新の調整可能な入力引数XBinaryLearners之前および成本が示されています。

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

预测の引数(予測子データと名前と値のペアの引数“解码”および“BinaryLoss”)と更新の引数(SVM学習器のサポートベクター)のコーダー属性を指定して,生成されるコードでこれらの引数を预测更新の入力引数として使用できるようにします。

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

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

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

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

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

配置。BinaryLoss
ans = EnumeratedInput与属性:值:'hinge' SelectedOption: ' built ' BuiltInOptions: {1x7 cell} IsConstant: 1可调性:0

生成されるコードで既定以外の値を使用するには,コードを生成する前に値を指定しなければなりません。BinaryLoss价值属性として“指数”を指定します。

configurer.BinaryLoss.Value =“指数”;配置。BinaryLoss
ans = EnumeratedInput与属性:值:'指数' SelectedOption: '内置' BuiltInOptions: {1x7 cell} IsConstant: 1可调性:1

可调谐性(逻辑0)である場合に属性値を変更すると,可调谐性真正的(逻辑1)に設定されます。

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

配置。解码
ans = EnumeratedInput与属性:值:' lossweights ' SelectedOption: ' built ' BuiltInOptions: {' lossweights ' ' losssbased '} IsConstant: 1可调性:0

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

configurer.Decoding.IsConstant = false;配置。解码
ans = EnumeratedInput的属性:值:[1x1 LearnerCoderInput] SelectedOption: 'NonConstant' BuiltInOptions: {' lossweightight ' ' losssbased '} IsConstant: 0可调性:1

解码价值属性がLearnerCoderInputオブジェクトに変更されるので,“lossweighted”“lossbased“の両方を“解码”の値として使用できます。また,SelectedOption“非常数的”に,可调谐性真正的に設定されます。

最後に,BinaryLearners金宝appSupportVectorsのコーダー属性を変更します。金宝appSupportVectorsのコーダー属性を表示します。

configurer.BinaryLearners.金宝appSupportVectors
ans = LearnerCoderInput带有属性:SizeVector: [54 4] VariableDimensions: [1 0] DataType: 'double'可调性:1

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

configurer.BinaryLearners.金宝appSupportVectors.SizeVector = [150 4];
Alpha的SizeVector属性已被修改以满足配置约束。修改了SupportVectorLabels的Si金宝appzeVector属性以满足配置约束。

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

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

配置
配置= ClassificationECOCCoderConfigurer属性:更新输入:BinaryLearners:之前[1 x1 ClassificationSVMCoderConfigurer]: [1 x1 LearnerCoderInput]成本:[1 x1 LearnerCoderInput]预测输入:X: [1 x1 LearnerCoderInput] BinaryLoss: [1 x1 EnumeratedInput]解码:[1 x1 EnumeratedInput]代码生成参数:NumOutputs:2 OutputFileName: 'ClassificationECOCModel'属性,方法

BinaryLoss解码も表示に含まれるようになりました。

コードの生成

C / c++コードを生成するには,適切に設定されているC / c++コンパイラにアクセスできなければなりません。MATLAB编码器は,サポートされているインストール済みのコンパイラを探して使用します。墨西哥人设置を使用すると,既定のコンパイラを表示および変更できます。詳細は,既定のコンパイラの変更を参照してください。

ECOC分類モデル(Mdl)の関数预测および更新のコードを生成します。

generateCode(配置)
generateCode在输出文件夹中创建这些文件:米”、“预测。米”、“更新。米”、“ClassificationECOCModel.mat”

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

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

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

  • 墨西哥人関数のコードをcodegen \墨西哥人\ ClassificationECOCModelフォルダーに作成する。

  • 墨西哥人関数を現在のフォルダーにコピーする。

生成されたコードの確認

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

[标签,NegLoss] =预测(Mdl X,“BinaryLoss”“指数”);[label_mex, NegLoss_mex] = ClassificationECOCModel (“预测”, X,“BinaryLoss”“指数”“解码”“lossweighted”);

isequalを使用して,标签label_mexを比較します。

label_mex isequal(标签)
ans =逻辑1

すべての入力が等しい場合,isequalは逻辑1 (真正的)を返します。この比較により,同じラベルをMdlの関数预测と墨西哥人関数の関数预测が返すことを確認します。

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

找到(abs (NegLoss-NegLoss_mex) > 1 e-8)
Ans = 0x1空双列向量

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

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

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

t_new = templateSVM (“KernelFunction”“高斯”“标准化”,真的,“KernelScale”“汽车”);retrainedMdl = fitcecoc (X, Y,“学习者”, t_new);

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

params = validatedUpdateInputs(配置、retrainedMdl);

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

ClassificationECOCModel (“更新”params)

生成されたコードの確認

retrainedMdlの関数预测の出力と,更新した墨西哥人関数の関数预测の出力を比較します。

[标签,NegLoss] =预测(retrainedMdl X,“BinaryLoss”“指数”“解码”“lossbased”);[label_mex, NegLoss_mex] = ClassificationECOCModel (“预测”, X,“BinaryLoss”“指数”“解码”“lossbased”);label_mex isequal(标签)
ans =逻辑1
找到(abs (NegLoss-NegLoss_mex) > 1 e-8)
Ans = 0x1空双列向量

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

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

モデルの学習

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

负载carsmallX =(功率、重量);Y = MPG;Mdl = fitrsvm (X (1:50:), Y (1:50));

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

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

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

配置= learnerCoderConfigurer (Mdl X (1:50,:));

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

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

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

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

configuration . x . sizevector = [Inf 2];configurer.X.VariableDimensions = [true false];

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

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

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

configurati金宝appon . supportvectors . sizevector = [250 2];
Alpha的SizeVector属性已被修改以满足配置约束。
configurer.金宝appSupportVectors.VariableDimensions = [true false];
已修改Alpha的VariableDimensions属性以满足配置约束。

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

コードの生成

C / c++コードを生成するには,適切に設定されているC / c++コンパイラにアクセスできなければなりません。MATLAB编码器は,サポートされているインストール済みのコンパイラを探して使用します。墨西哥人设置を使用すると,既定のコンパイラを表示および変更できます。詳細は,既定のコンパイラの変更を参照してください。

generateCodeを使用して,SVM回帰モデル(Mdl)の関数预测および更新について,既定の設定でコードを生成します。

generateCode(配置)
generateCode在输出文件夹中创建这些文件:米”、“预测。米”、“更新。米”、“RegressionSVMModel.mat”

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

生成されたコードの確認

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

yfit =预测(Mdl X);yfit_mex = RegressionSVMModel (“预测”, X);

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

找到(abs (yfit-yfit_mex) > 1 e-6)
Ans = 0x1空双列向量

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

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

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

retrainedMdl = fitrsvm (X, Y);

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

params = validatedUpdateInputs(配置、retrainedMdl);

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

RegressionSVMModel (“更新”params)

生成されたコードの確認

retrainedMdlの関数预测の出力と,更新した墨西哥人関数の関数预测の出力を比較します。

yfit =预测(retrainedMdl X);yfit_mex = RegressionSVMModel (“预测”, X);找到(abs (yfit-yfit_mex) > 1 e-6)
Ans = 0x1空双列向量

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

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

モデルの学習

carbigデータセットを読み込み,観測値の半分を使用して回帰木モデルに学習させます。

负载carbigX =[排量马力重量];Y = MPG;rng (“默认”%的再现性n =长度(Y);idxTrain = randsample (n, n / 2);XTrain = X (idxTrain:);YTrain = Y (idxTrain);Mdl = fitrtree (XTrain YTrain);

Mdlは,RegressionTreeオブジェクトです。

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

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

配置= learnerCoderConfigurer (Mdl XTrain,“NumOutputs”2);

配置は,RegressionTreeオブジェクトのコーダーコンフィギュアラーであるRegressionTreeCoderConfigurerオブジェクトです。

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

生成されたコードのパラメーターをモデルの再学習後に更新できるようにするため,回帰木モデルのパラメーターのコーダー属性を指定します。

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

[Inf 3];configurer.X.VariableDimensions
ans =1 x2逻辑阵列1 0

1番目の次元のサイズは,観測値の個数です。属性SizeVectorの値をに設定すると,ソフトウェアは属性VariableDimensionsの値を1に変更します。言い換えると,サイズの上限はであり,サイズは可変です。これは,予測子データが任意の数の観測値をもつことができることを意味しています。この指定は,コードを生成するときに観測値の個数が不明である場合に便利です。

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

新しいデータまたは異なる設定を使用して木モデルに再学習させる場合,木のノードの数が変化する可能性があります。したがって,生成されたコードでノードの数を更新できるように,孩子们割点CutPredictorIndexまたはNodeMeanのいずれかのプロパティのSizeVector属性の最初の次元を指定します。そうすると,他のプロパティは自動的に変更されます。

たとえば,NodeMeanプロパティのSizeVector属性の最初の値をに設定します。ソフトウェアによって孩子们割点およびCutPredictorIndexSizeVector属性およびVariableDimensions属性が変更され,木のノード数の新しい上限に合致するようになります。さらに,NodeMeanVariableDimensions属性の最初の値が1に変更されます。

[Inf 1];
修改了Children的sizeevector属性以满足配置约束。CutPoint的SizeVector属性已被修改以满足配置约束。CutPredictorIndex的SizeVector属性已被修改以满足配置约束。已修改Children的VariableDimensions属性以满足配置约束。已修改CutPoint的VariableDimensions属性以满足配置约束。已修改CutPredictorIndex的VariableDimensions属性以满足配置约束。
configurer.NodeMean.VariableDimensions
ans =1 x2逻辑阵列1 0

コードの生成

C / c++コードを生成するには,適切に設定されているC / c++コンパイラにアクセスできなければなりません。MATLAB编码器は,サポートされているインストール済みのコンパイラを探して使用します。墨西哥人设置を使用すると,既定のコンパイラを表示および変更できます。詳細は,既定のコンパイラの変更を参照してください。

回帰木モデル(Mdl)の関数预测および更新のコードを生成します。

generateCode(配置)
generateCode在输出文件夹中创建这些文件:米”、“预测。米”、“更新。米”、“RegressionTreeModel.mat”

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

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

  • 2つのエントリポイント関数に対して,RegressionTreeModelという名前の墨西哥人関数を作成する。

  • 墨西哥人関数のコードをcodegen \墨西哥人\ RegressionTreeModelフォルダーに作成する。

  • 墨西哥人関数を現在のフォルダーにコピーする。

生成されたコードの確認

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

[Yfit、节点]=预测(Mdl XTrain);[Yfit_mex, node_mex] = RegressionTreeModel (“预测”, XTrain);

YfitYfit_mexと,节点node_mexと比較します。

马克斯(abs (Yfit-Yfit_mex), [],“所有”
ans = 0
node_mex isequal(节点)
ans =逻辑1

一般的に,Yfitと比較すると,Yfit_mexには丸めによる差が含まれている可能性があります。この場合では,比較によってYfitYfit_mexが等しいことが確かめられます。

isequalは,すべての入力引数が等しい場合に逻辑1 (真正的)を返します。この比較により,Mdlの関数预测と墨西哥人関数の関数预测が同じノード数を返すことを確認します。

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

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

retrainedMdl = fitrtree (X, Y);

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

params = validatedUpdateInputs(配置、retrainedMdl);

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

RegressionTreeModel (“更新”params)

生成されたコードの確認

retrainedMdlの関数预测の出力引数と,更新した墨西哥人関数の関数预测の出力引数を比較します。

[Yfit、节点]=预测(retrainedMdl X);[Yfit_mex, node_mex] = RegressionTreeModel (“预测”, X);马克斯(abs (Yfit-Yfit_mex), [],“所有”
ans = 0
node_mex isequal(节点)
ans =逻辑1

この比較により,予測された応答およびノード数が等しいことを確認します。

入力引数

すべて折りたたむ

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

モデル モデルオブジェクト
マルチクラス分類用の二分決定木 CompactClassificationTree
1クラスおよびバイナリ分類用のSVM CompactClassificationSVM
バイナリ分類用の線形モデル ClassificationLinear
SVMモデルおよび線形モデル用のマルチクラスモデル CompactClassificationECOC
回帰用の二分決定木 CompactRegressionTree
サポートベクターマシン(SVM)回帰 CompactRegressionSVM
線形回帰 RegressionLinear

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

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

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

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

モデル 更新するパラメーター
マルチクラス分類用の二分決定木 孩子们ClassProbability成本割点CutPredictorIndex之前
1クラスおよびバイナリ分類用のSVM
  • Mdlが1クラスSVM分類モデルである場合,参数个数成本之前を含めることはできません。

バイナリ分類用の線形モデル β偏见成本之前
SVMモデルおよび線形モデル用のマルチクラスモデル

BinaryLearners成本之前

回帰用の二分決定木 孩子们割点CutPredictorIndexNodeMean
支持向量机回帰
線形回帰 β偏见

出力引数

すべて折りたたむ

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

ヒント

アルゴリズム

コーダーコンフィギュアラーのワークフローで,更新の入力引数Mdlは,loadLearnerForCoderで返されるモデルです。このモデルとupdatedMdlオブジェクトは,主に予測に必要なプロパティを含む,縮小した分類モデルまたは回帰モデルです。

拡張機能

R2018bで導入