このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
コード生成用にモデルパラメーターを更新
コーダーコンフィギュアラーオブジェクトを使用して,機械学習モデルの関数预测
および更新
に対する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
オブジェクトです。表示には,预测
と更新
の調整可能な入力引数X
、BinaryLearners
、之前
および成本
が示されています。
パラメーターのコーダー属性の指定
预测
の引数(予測子データと名前と値のペアの引数“解码”
および“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_mex
とNegLoss
を比較します。
找到(abs (NegLoss-NegLoss_mex) > 1 e-8)
Ans = 0x1空双列向量
この比較により,許容誤差1 e-8
内でNegLoss
とNegLoss_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
が等しく,NegLoss
とNegLoss_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
には丸めによる差が含まれている場合があります。このような場合は,小さい誤差を許容してyfit
とyfit_mex
を比較します。
找到(abs (yfit-yfit_mex) > 1 e-6)
Ans = 0x1空双列向量
この比較により,許容誤差1 e-6
内でyfit
とyfit_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
内でyfit
とyfit_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
属性の最初の値を正
に設定します。ソフトウェアによって孩子们
、割点
およびCutPredictorIndex
のSizeVector
属性およびVariableDimensions
属性が変更され,木のノード数の新しい上限に合致するようになります。さらに,NodeMean
のVariableDimensions
属性の最初の値が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);
Yfit
をYfit_mex
と,节点
をnode_mex
と比較します。
马克斯(abs (Yfit-Yfit_mex), [],“所有”)
ans = 0
node_mex isequal(节点)
ans =逻辑1
一般的に,Yfit
と比較すると,Yfit_mex
には丸めによる差が含まれている可能性があります。この場合では,比較によってYfit
とYfit_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
この比較により,予測された応答およびノード数が等しいことを確認します。
Mdl
- - - - - -機械学習モデル機械学習モデル。モデルオブジェクトを指定します。サポートされるモデルは次の表に記載されています。
モデル | モデルオブジェクト |
---|---|
マルチクラス分類用の二分決定木 | CompactClassificationTree |
1クラスおよびバイナリ分類用のSVM | CompactClassificationSVM |
バイナリ分類用の線形モデル | ClassificationLinear |
SVMモデルおよび線形モデル用のマルチクラスモデル | CompactClassificationECOC |
回帰用の二分決定木 | CompactRegressionTree |
サポートベクターマシン(SVM)回帰 | CompactRegressionSVM |
線形回帰 | RegressionLinear |
機械学習モデルのコード生成に関する使用上の注意および制限については,モデルオブジェクトのページの”コード生成“セクションを参照してください。
参数个数
- - - - - -更新するパラメーター機械学習モデル内の更新するパラメーター。更新する各パラメーターについてのフィールドをもつ構造体を指定します。
関数validatedUpdateInputs
を使用して参数个数
を作成します。この関数は,再学習済みモデルの修正されたパラメーターを検出し、修正されたパラメーターの値がパラメーターのコーダー属性を満たすかどうかを検証し、更新するパラメーターを構造体として返します。
更新できるパラメーターは,次の表に記載されているように,機械学習モデルによって異なります。
モデル | 更新するパラメーター |
---|---|
マルチクラス分類用の二分決定木 | 孩子们 ,ClassProbability ,成本 ,割点 ,CutPredictorIndex ,之前 |
1クラスおよびバイナリ分類用のSVM |
|
バイナリ分類用の線形モデル | β ,偏见 ,成本 ,之前 |
SVMモデルおよび線形モデル用のマルチクラスモデル | |
回帰用の二分決定木 | 孩子们 ,割点 ,CutPredictorIndex ,NodeMean |
支持向量机回帰 |
|
線形回帰 | β ,偏见 |
モデルに再学習をさせるときに,次の表に記載されている名前と値のペアの引数のいずれかを変更した場合,更新
を使用してパラメーターを更新することはできません。C / c++コードを再生成しなければなりません。
モデル | 更新がサポートされない引数 |
---|---|
マルチクラス分類用の二分決定木 | fitctree の引数,“类名” 、“ScoreTransform” |
1クラスおよびバイナリ分類用のSVM | fitcsvm の引数,“类名” 、“KernelFunction” 、“PolynomialOrder” 、“ScoreTransform” 、“标准化” |
バイナリ分類用の線形モデル | fitclinear の引数,“类名” 、“ScoreTransform” |
SVMモデルおよび線形モデル用のマルチクラスモデル |
|
回帰用の二分決定木 | fitrtree の引数,“ResponseTransform” |
支持向量机回帰 | fitrsvm の引数,“KernelFunction” 、“PolynomialOrder” 、“ResponseTransform” 、“标准化” |
線形回帰 | fitrlinear の引数,“ResponseTransform” |
コーダーコンフィギュアラーのワークフローでgenerateCode
を使用して,エントリポイント関数update.m
と,そのエントリポイント関数の墨西哥人関数の両方を作成します。墨西哥人関数の名前がmyModel
であると仮定して,この構文を使用して更新
を呼び出します。
myModel (“更新”params)
このページで説明している構文がエントリポイント関数でどのように使用されているかを確認するには,関数类型
を使用してupdate.m
ファイルおよびinitialize.m
ファイルの内容を表示します。
类型update.m类型initialize.m
update.m
ファイルおよびinitialize.m
ファイルの内容を表示する例については,コーダーコンフィギュアラーの使用によるコードの生成を参照してください。
コーダーコンフィギュアラーのワークフローで,更新
の入力引数Mdl
は,loadLearnerForCoder
で返されるモデルです。このモデルとupdatedMdl
オブジェクトは,主に予測に必要なプロパティを含む,縮小した分類モデルまたは回帰モデルです。
使用上の注意事項および制限事項:
learnerCoderConfigurer
を使用してコーダーコンフィギュアラーを作成してから,オブジェクト関数generateCode
を使用して预测
および更新
に対するコードを生成します。
機械学習モデルMdl
のコード生成に関する使用上の注意および制限については,モデルオブジェクトのページの”コード生成“セクションを参照してください。
モデル | モデルオブジェクト |
---|---|
マルチクラス分類用の二分決定木 | CompactClassificationTree |
1クラスおよびバイナリ分類用のSVM | CompactClassificationSVM |
バイナリ分類用の線形モデル | ClassificationLinear |
SVMモデルおよび線形モデル用のマルチクラスモデル | CompactClassificationECOC |
回帰用の二分決定木 | CompactRegressionTree |
サポートベクターマシン(SVM)回帰 | CompactRegressionSVM |
線形回帰 | RegressionLinear |
詳細は,コード生成の紹介を参照してください。
次のMATLABコマンドに対応するリンクがクリックされました。
コマンドをMATLABコマンドウィンドウに入力して実行してください。WebブラウザーはMATLABコマンドをサポートしていません。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。