主要内容

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

使现代化

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

説明

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

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

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

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

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

すべて折りたたむ

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

モデルの学習

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

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

Mdlは,分类VMオブジェクトです。

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

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

configurer=learnercoderconfiguer(Mdl,X(1:50,:),“NumOutputs”,2);

配置器は,分类VMオブジェクトのコーダー コンフィギュアラーである分类VMCoderConfigurationオブジェクトです。

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

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

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

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

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

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

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

configurer.万博1manbetxSupportVectors.SizeVector=[250 34];
Alpha的SizeVector属性已修改为满足配置约束。SupportVectorLabels的SizeVector属性已修改为满足配置约束。万博1manbetx
configurer.万博1manbetxSupportVectors.VariableDimensions=[true-false];
已修改Alpha的VariableDimensions属性以满足配置约束。修改了SupportVectorLabels的VariableDi万博1manbetxmensions属性以满足配置约束。

万博1manbetx支持向量のコーダー属性が変更されると、阿尔法および万博1manbetxSupportVectorLabelsのコーダー属性が構成の制約を満たすように変更されます。あるパラメーターのコーダー属性の変更によって構成の制約を満たすために他の従属パラメーターの変更が必要になる場合,従属パラメーターのコーダー属性は変更されます。

コードの生成

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

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

生成代码(配置器)
generateCode在输出文件夹中创建这些文件:“initialize.m”、“predict.m”、“update.m”、“ClassificationSVMModel.mat”代码生成成功。

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

生成されたコードの確認

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

[label,score]=预测(Mdl,X);[label_-mex,score_-mex]=分类VMModel(“预测”,X);

等质量を使用して、标签label_mexを比較します。

isequal(标签,标签)
ans=必然的1.

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

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

查找(abs(分数-分数-平均值)>1e-8)
ans=0x1空双列向量

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

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

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

再培训DMDL=fitcsvm(X,Y);

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

params = validatedUpdateInputs(配置、retrainedMdl);

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

分类模型(“更新”,参数)

生成されたコードの確認

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

(标签,分数)=预测(retrainedMdl X);[label_mex, score_mex] = ClassificationSVMModel (“预测”,X);isequal(标签,标签)
ans=必然的1.
查找(abs(分数-分数-平均值)>1e-8)
ans=0x1空双列向量

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

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

モデルの学習

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

负载fisheririsX=平均值;Y=物种;

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

t=模板SVM(“KernelFunction”,“高斯”,“标准化”,对);

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

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

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

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

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

configurer=learnerCoderConfigurer(Mdl,X,“NumOutputs”,2)
configurer=ClassificationeCoderConfigurer with properties:更新输入:BinaryLearners:[1x1 ClassificationVMCoderConfigurer]Previor:[1x1 LearnerCoderInput]成本:[1x1 LearnerCoderInput]预测输入:X:[1x1 LearnerCoderInput]代码生成参数:numoutput:2输出文件名:“ClassificationeCodel”属性、方法

配置器は,分类オブジェクトのコーダー コンフィギュアラーである分类代码配置器オブジェクトです。表示には、预测使现代化の調整可能な入力引数XBinaryLearners之前および费用が示されています。

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

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

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

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

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

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

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

configurer.BinaryLoss
ans=EnumeratedInput,属性为:值:“铰链”SelectedOption:“内置”内置选项:{1x7单元}IsConstant:1可调性:0

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

configurer.BinaryLoss.Value=“指数型”;configurer.BinaryLoss
ans=EnumeratedInput,属性为:Value:'exponential'SelectedOption:'Buildin'内置选项:{1x7 cell}IsConstant:1可调性:1

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

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

配置器.解码
ans=EnumeratedInput,属性为:Value:'LossWighted'SelectedOption:'Buildin'内置选项:{'LossWighted''lossbased'}IsConstant:1可调性:0

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

configurer.Decoding.IsConstant=false;configurer.Decoding
ans=带属性的EnumeratedInput:值:[1x1 LearnerCoderInput]SelectedOption:'Nonctant'内置选项:{'LossWighted''lossbased'}IsConstant:0可调性:1

解码价值属性が学习者输入オブジェクトに変更されるので、“迷失方向”“lossbased' の両方を“解码”の値として使用できます。また、选择选项“非常数的”に、可调性真正的に設定されます。

最後に、BinaryLearners万博1manbetx支持向量のコーダー属性を変更します。万博1manbetx支持向量のコーダー属性を表示します。

configurer.BinaryLearners.万博1manbetxSupportVectors
ans=LearnerCoderInput,属性为:SizeVector:[54 4]VariableDimensions:[1 0]数据类型:“double”可调性:1

各学習器でサポート ベクターの個数が異なるので、可变尺寸の既定値は[真假]です。新しいデータまたは異なる設定を使用して 经济合作モデルに再学習をさせた場合、支持向量机学習器のサポート ベクターの個数が変化する可能性があります。したがって、サポート ベクターの個数の上限を増やします。

configurer.BinaryLearners.万博1manbetxSupportVectors.SizeVector = [150 4];
Alpha的SizeVector属性已修改为满足配置约束。SupportVectorLabels的SizeVector属性已修改为满足配置约束。万博1manbetx

万博1manbetx支持向量のコーダー属性が変更されると、阿尔法および万博1manbetxSupportVectorLabelsのコーダー属性が構成の制約を満たすように変更されます。あるパラメーターのコーダー属性の変更によって構成の制約を満たすために他の従属パラメーターの変更が必要になる場合,従属パラメーターのコーダー属性は変更されます。

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

配置器
configurer=ClassificationeCoderConfiger with properties:更新输入:BinaryLearners:[1x1 ClassificationsVMCoderConfigure]Previor:[1x1 LearnerCoderInput]成本:[1x1 LearnerCoderInput]预测输入:X:[1x1 LearnerCoderInput]BinaryLoss:[1x1 EnumeratedInput]解码:[1x1 EnumeratedInput]代码生成参数:NumOutputs:2 OutputFileName:“ClassificationeComModel”属性、方法

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

コードの生成

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

经济合作分類モデル (Mdl) の関数预测および使现代化のコードを生成します。

生成代码(配置器)
generateCode在输出文件夹中创建这些文件:米”、“预测。米”、“更新。米”、“ClassificationECOCModel。代码生成成功。

関数生成代码は,以下の処理を実行します。

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

  • 2.つのエントリポイント関数に対して、分类模型という名前の 墨西哥関数を作成する。

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

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

生成されたコードの確認

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

[label,NegLoss]=预测(Mdl,X,“BinaryLoss”,“指数型”);[label_-mex,NegLoss_-mex]=分类模型(“预测”,X,“BinaryLoss”,“指数型”,“解码”,“迷失方向”);

等质量を使用して、标签label_mexを比較します。

isequal(标签,标签)
ans=必然的1.

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

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

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

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

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

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

t_new=模板SVM(“KernelFunction”,“高斯”,“标准化”,真的,“内核尺度”,“自动”);再培训DMDL=fitcecoc(X,Y,“学习者”(t_new),;

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

params = validatedUpdateInputs(配置、retrainedMdl);

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

ClassificationECOCModel (“更新”,参数)

生成されたコードの確認

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

[label,NegLoss]=预测(重新训练的DMDL,X,“BinaryLoss”,“指数型”,“解码”,“损失基础”);[label_-mex,NegLoss_-mex]=分类模型(“预测”,X,“BinaryLoss”,“指数型”,“解码”,“损失基础”);isequal(标签,标签)
ans=必然的1.
查找(abs(NegLoss-NegLoss_mex)>1e-8)
ans=0x1空双列向量

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

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

モデルの学習

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

负载carsmallX=马力,重量;Y=每加仑;Mdl=fitrsvm(X(1:50,:),Y(1:50));

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

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

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

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

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

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

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

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

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

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

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

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

configurer.万博1manbetxSupportVectors.SizeVector=[250 2];
Alpha的SizeVector属性已修改以满足配置约束。
configurer.万博1manbetxSupportVectors.VariableDimensions=[true-false];
已修改Alpha的VariableDimensions属性以满足配置约束。

万博1manbetx支持向量のコーダー属性が変更されると、阿尔法のコーダー属性が構成の制約を満たすように変更されます。あるパラメーターのコーダー属性の変更によって構成の制約を満たすために他の従属パラメーターの変更が必要になる場合,従属パラメーターのコーダー属性は変更されます。

コードの生成

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

生成代码を使用して、支持向量机回帰モデル (Mdl) の関数预测および使现代化について、既定の設定でコードを生成します。

生成代码(配置器)
generateCode在输出文件夹中创建这些文件:“initialize.m”、“predict.m”、“update.m”、“RegressionSVMModel.mat”代码生成成功。

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

生成されたコードの確認

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

yfit=预测(Mdl,X);yfit_mex=回归模型(“预测”,X);

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

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

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

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

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

retrainedMdl = fitrsvm (X, Y);

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

params = validatedUpdateInputs(配置、retrainedMdl);

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

回归模型(“更新”,参数)

生成されたコードの確認

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

yfit=预测(再培训DMDL,X);yfit\u mex=回归VMModel(“预测”,X);查找(abs(yfit-yfit_-mex)>1e-6)
ans=0x1空双列向量

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

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

モデルの学習

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

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

Mdlは,回归树オブジェクトです。

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

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

configurer=learnercoderconfiguer(Mdl、XTrain、,“NumOutputs”,2);

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

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

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

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

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

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

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

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

たとえば、诺德米安プロパティのSizeVector属性の最初の値をInfに設定します。ソフトウェアによって儿童切点および切割预测指数SizeVector属性および可变尺寸属性が変更され、木のノード数の新しい上限に合致するようになります。さらに、诺德米安可变尺寸属性の最初の値が1.に変更されます。

configurer.NodeMean.SizeVector=[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在输出文件夹中创建这些文件:“initialize.m”、“predict.m”、“update.m”、“RegressionTreeModel.mat”代码生成成功。

関数生成代码は,以下の処理を実行します。

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

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

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

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

生成されたコードの確認

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

[Yfit,node]=预测(Mdl,XTrain);[Yfit\u-mex,node\u-mex]=回归树模型(“预测”,XTrain);

伊菲特Yfit_mexと、节点node_-mexと比較します。

最大值(abs(Yfit-Yfit_-mex),[],“全部”)
ans=0
isequal(node,node_-mex)
ans=必然的1.

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

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

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

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

重新训练的DMDL=Firtree(X,Y);

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

params = validatedUpdateInputs(配置、retrainedMdl);

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

回归树模型(“更新”,参数)

生成されたコードの確認

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

[Yfit,node]=预测(retainedmdl,X);[Yfit\u-mex,node\u-mex]=回归树模型(“预测”,X);最大值(abs(Yfit-Yfit_-mex),[],“全部”)
ans=0
isequal(node,node_-mex)
ans=必然的1.

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

入力引数

すべて折りたたむ

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

モデル モデルオブジェクト
マルチクラス分類用の二分決定木 CompactClassificationTree
1クラスおよびバイナリ分類用のSVM CompactClassificationSVM
バイナリ分類用の線形モデル ClassificationLinear
支持向量机モデルおよび線形モデル用のマルチクラス モデル 紧凑分类
回帰用の二分決定木 CompactRegressionTree
サポート ベクター マシン (支持向量机)回帰 压缩回归
線形回帰 RegressionLinear

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

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

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

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

モデル 更新するパラメーター
マルチクラス分類用の二分決定木 儿童,ClassProbability,费用,切点,切割预测指数,之前
1クラスおよびバイナリ分類用のSVM
  • Mdlが 1.クラス 支持向量机分類モデルである場合、params费用之前を含めることはできません。

バイナリ分類用の線形モデル β,偏见,费用,之前
支持向量机モデルおよび線形モデル用のマルチクラス モデル

BinaryLearners,费用,之前

回帰用の二分決定木 儿童,切点,切割预测指数,诺德米安
支持向量机回帰
線形回帰 β,偏见

出力引数

すべて折りたたむ

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

ヒント

アルゴリズム

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

拡張機能

R2018bで導入