最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
サポート ベクター マシン (SVM) を使用するマルチクラス モデルのコーダー コンフィギュアラー
ClassificationECOCCoderConfigurer
オブジェクトは、SVM バイナリ学習器を使用する誤り訂正出力符号 (ECOC) 分類モデル (ClassificationECOC
または CompactClassificationECOC
) のコーダー コンフィギュアラーです。
コーダー コンフィギュアラーには、コード生成オプションの設定、C/C++ コードの生成、および生成されたコード内のモデル パラメーターの更新を行うための便利な機能があります。
コード生成オプションを設定し、オブジェクトのプロパティを使用してモデル パラメーターのコーダー属性を指定します。
generateCode
を使用して、ECOC モデルの関数 predict
および update
に対して C/C++ コードを生成します。C/C++ コードの生成には MATLAB® Coder™ が必要です。
コードを再生成せずに、生成された C/C++ コードのモデル パラメーターを更新します。この機能により、新しいデータまたは設定でモデルに再学習をさせるときに、C/C++ コードの再生成、再展開および再確認に必要な作業が不要になります。モデル パラメーターを更新する前に、validatedUpdateInputs
を使用して更新対象のモデル パラメーターを検証および抽出します。
次のフロー チャートは、コーダー コンフィギュアラーを使用するコード生成のワークフローを示します。
マルチクラス ECOC 分類モデルのコード生成に関する使用上の注意および制限については、CompactClassificationECOC
、predict
および update
の「コード生成」の節を参照してください。
fitcecoc
を使用して SVM バイナリ学習器が含まれているマルチクラス ECOC 分類モデルに学習をさせた後で、learnerCoderConfigurer
を使用してモデルのコーダー コンフィギュアラーを作成します。コーダー コンフィギュアラーのプロパティを使用して、predict
および update
の引数のコーダー属性を指定します。その後、generateCode
を使用して、指定したコーダー属性に基づく C/C++ コードを生成します。
predict
の引数この節に記載されているプロパティは、生成されるコードにおける関数 predict
の引数のコーダー属性を指定します。
X
— 予測子データのコーダー属性LearnerCoderInput
オブジェクトECOC 分類モデルの関数 predict
に対して生成される C/C++ コードに渡す、予測子データのコーダー属性。LearnerCoderInput
オブジェクトを指定します。
関数 learnerCoderConfigurer
を使用してコーダー コンフィギュアラーを作成する場合、入力引数 X
は LearnerCoderInput
のコーダー属性の既定値を決定します。
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++ コードを生成する場合、次のようにコーダー コンフィギュアラー configurer
の X
のコーダー属性を指定します。
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
を指定します。
BinaryLoss
— バイナリ学習器の損失関数のコーダー属性EnumeratedInput
オブジェクトバイナリ学習器の損失関数 (predict
の名前と値のペアの引数 'BinaryLoss'
) のコーダー属性。EnumeratedInput
オブジェクトを指定します。
EnumeratedInput
オブジェクトの既定の属性値は、次のように関数 predict
の既定値に基づきます。
Value
— バイナリ学習器の損失関数。BuiltInOptions
内の文字ベクトルまたはカスタム関数名を指定する文字ベクトルを指定します。既定値は 'hinge'
です。
カスタム オプションを使用するには、MATLAB の検索パス上でカスタム関数を定義し、カスタム関数の名前として Value
を指定します。
SelectedOption
— この値は 'Built-in'
(既定) または 'Custom'
です。SelectedOption
は Value
に従って設定されます。この属性は読み取り専用です。
BuiltInOptions
— 'hamming'
、'linear'
、'quadratic'
、'exponential'
、'binodeviance'
、'hinge'
および 'logit'
から構成される cell 配列。この属性は読み取り専用です。
IsConstant
— この値は true
でなければなりません。
Tunability
— 既定値は false
です。Tunability
が false
である場合に他の属性値を指定すると、Tunability
は true
に設定されます。
Decoding
— 復号化方式のコーダー属性EnumeratedInput
オブジェクト復号化方式 (predict
の名前と値のペアの引数 'Decoding'
) のコーダー属性。EnumeratedInput
オブジェクトを指定します。
EnumeratedInput
オブジェクトの既定の属性値は、次のように関数 predict
の既定値に基づきます。
Value
— 復号化方式の値。'lossweighted'
(既定)、'lossbased'
、または LearnerCoderInput
オブジェクトを指定します。
IsConstant
を false
に設定した場合、以下の読み取り専用コーダー属性値を使用して Value
が LearnerCoderInput
オブジェクトに変更されます。
SizeVector
— [1,12]
VariableDimensions
— [0,1]
DataType
— 'char'
Tunability
— 1
生成されるコードの入力は可変サイズの調整可能な文字ベクトルであり、'lossweighted'
または 'lossbased'
になります。
SelectedOption
— この値は 'Built-in'
(既定) または 'NonConstant'
です。SelectedOption
は Value
に従って設定されます。この属性は読み取り専用です。
BuiltInOptions
— 'lossweighted'
と 'lossbased'
から構成される cell 配列。この属性は読み取り専用です。
IsConstant
— 既定値は true
です。この値を false
に設定した場合、Value
が LearnerCoderInput
オブジェクトに変更されます。
Tunability
— 既定値は false
です。Tunability
が false
である場合に他の属性値を指定すると、Tunability
は true
に設定されます。
ObservationsIn
— 予測子データにおける観測値の次元のコーダー属性EnumeratedInput
オブジェクト予測子データにおける観測値の次元 (predict
の名前と値のペアの引数 'ObservationsIn'
) のコーダー属性。EnumeratedInput
オブジェクトを指定します。
EnumeratedInput
オブジェクトの既定の属性値は、次のように関数 predict
の既定値に基づきます。
Value
— 予測子データにおける観測値の次元。'rows'
(既定) または 'columns'
を指定します。SVM バイナリ学習器を使用するモデルの場合、この値は 'rows'
でなければなりません。
SelectedOption
— この値は常に 'Built-in'
です。この属性は読み取り専用です。
BuiltInOptions
— 'rows'
と 'columns'
から構成される cell 配列。この属性は読み取り専用です。
IsConstant
— この値は true
でなければなりません。
Tunability
— 既定値は false
です。Tunability
が false
である場合に他の属性値を指定すると、Tunability
は true
に設定されます。
NumOutputs
— predict
の出力の個数ECOC 分類モデルの関数 predict
に対して生成される C/C++ コードから返される出力引数の個数。1、2 または 3 を指定します。
predict
の出力引数は、順番に label
(予測されたクラス ラベル)、NegLoss
(符号を反転した平均バイナリ損失)、PBScore
(正のクラスのスコア) です。生成された C/C++ コードの predict
は、関数 predict
の最初の n
個の出力を返します。n
は NumOutputs
の値です。
コーダー コンフィギュアラー configurer
を作成した後で、ドット表記を使用して出力の個数を指定できます。
configurer.NumOutputs = 2;
NumOutputs
プロパティは、codegen
のコンパイラ オプション '-nargout'
と等価です。このオプションは、コード生成のエントリポイント関数における出力引数の個数を指定します。オブジェクト関数 generateCode
は、ECOC 分類モデルの関数 predict
および update
に対して predict.m
および update.m
という 2 つのエントリポイント関数をそれぞれ生成し、この 2 つのエントリポイント関数に対して C/C++ コードを生成します。NumOutputs
プロパティについて指定した値は、エントリポイント関数 predict.m
の出力引数の個数に対応します。
データ型: double
update
の引数この節に記載されているプロパティは、生成されるコードにおける関数 update
の引数のコーダー属性を指定します。関数 update
は、学習済みモデルと新しいモデル パラメーターを入力として受け入れ、新しいパラメーターが含まれている更新されたバージョンのモデルを返します。生成コード内のパラメーターを更新できるようにするには、コード生成の前にパラメーターのコーダー属性を指定する必要があります。各パラメーターのコーダー属性を指定するには、LearnerCoderInput
オブジェクトを使用します。既定の属性値は、learnerCoderConfigurer
の入力引数 Mdl
のモデル パラメーターに基づきます。
BinaryLearners
— 学習済みバイナリ学習器のコーダー属性ClassificationSVMCoderConfigurer
オブジェクト学習済みバイナリ学習器 (ECOC 分類モデルの BinaryLearners
) のコーダー属性。
オブジェクトを指定します。ClassificationSVMCoderConfigurer
ClassificationSVMCoderConfigurer
オブジェクトの update
の引数を使用して、すべてのバイナリ学習器のコーダー属性を指定します。update
の引数は、Alpha
、Beta
、Bias
、Cost
、Mu
、Prior
、Scale
、Sigma
、SupportVectorLabels
および SupportVectors
です。BinaryLearners
の構成に関して、update
の引数のプロパティのみが使用され、ClassificationSVMCoderConfigurer
の他のプロパティは無視されます。
各学習器には、異なる個数のサポート ベクターを含めることができます。したがって、すべてのバイナリ学習器に対応するため、learnerCoderConfigurer
の入力引数 Mdl
に基づいて、Alpha
、SupportVectorLabels
および SupportVectors
について LearnerCoderInput
オブジェクトの既定の属性値が設定されます。
SizeVector
Alpha
と SupportVectorLabels
の場合、この値は [s,1]
です。s
は、バイナリ学習器内のサポート ベクターの最大数です。
SupportVectors
の場合、この値は [s,p]
です。p
は、予測子の個数です。
VariableDimensions
— この値は [0,0]
または [1,0]
です。各学習器でサポート ベクターの個数が同じである場合、既定値は [0,0]
です。それ以外の場合、この値は [1,0]
でなければなりません。
[0,0]
は、SizeVector
の指定に従って配列サイズを固定することを示します。
[1,0]
は、配列の行が可変サイズ、列が固定サイズであることを示します。この場合、SizeVector
の 1 番目の値は行数の上限、SizeVector
の 2 番目の値は列数です。
DataType
— この値は single
または double
です。既定のデータ型は、Mdl
の学習に使用する学習データのデータ型に一致します。
Tunability
— 線形カーネル関数が含まれているモデルに学習をさせるときに、線形予測子の係数 (Beta
) がモデルに格納されており、サポート ベクターおよび関連する値は格納されていない場合、この値は false
でなければなりません。それ以外の場合、この値は true
でなければなりません。
他の update
の引数の詳細については、ClassificationSVMCoderConfigurer
の update
の引数を参照してください。
Cost
— 誤分類コストのコーダー属性LearnerCoderInput
オブジェクト誤分類コスト (ECOC 分類モデルの Cost
) のコーダー属性。LearnerCoderInput
オブジェクトを指定します。
LearnerCoderInput
オブジェクトの既定の属性値は、learnerCoderConfigurer
の入力引数 Mdl
に基づきます。
SizeVector
— この値は [c,c]
でなければなりません。c
は、クラスの個数です。
VariableDimensions
— この値は、SizeVector
の指定に従って配列サイズを固定することを示す [0,0]
でなければなりません。
DataType
— この値は single
または double
です。既定のデータ型は、Mdl
の学習に使用する学習データのデータ型に一致します。
Tunability
— 既定値は true
です。
Prior
— 事前確率のコーダー属性LearnerCoderInput
オブジェクト事前確率 (ECOC 分類モデルの Prior
) のコーダー属性。LearnerCoderInput
オブジェクトを指定します。
LearnerCoderInput
オブジェクトの既定の属性値は、learnerCoderConfigurer
の入力引数 Mdl
に基づきます。
SizeVector
— この値は [1,c]
でなければなりません。c
は、クラスの個数です。
VariableDimensions
— この値は、SizeVector
の指定に従って配列サイズを固定することを示す [0,0]
でなければなりません。
DataType
— この値は single
または double
です。既定のデータ型は、Mdl
の学習に使用する学習データのデータ型に一致します。
Tunability
— 既定値は true
です。
OutputFileName
— 生成される C/C++ コードのファイル名'ClassificationECOCModel'
(既定値) | 文字ベクトル生成される C/C++ コードのファイル名。文字ベクトルを指定します。
ClassificationECOCCoderConfigurer
のオブジェクト関数 generateCode
は、このファイル名を使用して C/C++ コードを生成します。
オペレーティング システムの構成によってはコード生成に失敗する可能性があるので、ファイル名には空白を含めないでください。また、名前は有効な MATLAB 関数名でなければなりません。
コーダー コンフィギュアラー configurer
を作成した後で、ドット表記を使用してファイル名を指定できます。
configurer.OutputFileName = 'myModel';
データ型: char
Verbose
— 詳細レベルtrue
(logical 1) (既定値) | false
(logical 0)詳細レベル。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 つのプロパティを使用します。
CodeGenerationArguments
— codegen
の引数このプロパティは読み取り専用です。
codegen
の引数。cell 配列を指定します。
このプロパティにより、コード生成ワークフローをカスタマイズできます。ワークフローをカスタマイズする必要がない場合は関数 generateCode
を使用します。
generateCode
をコーダー コンフィギュアラー configurer
に対して使用する代わりに、次のようにして C/C++ コードを生成できます。
generateFiles(configurer) cgArgs = configurer.CodeGenerationArguments; codegen(cgArgs{:})
codegen
を呼び出す前に cgArgs
を変更します。
configurer
の他のプロパティを変更すると、それに従って CodeGenerationArguments
プロパティが更新されます。
データ型: cell
PredictInputs
— predict
の調整可能な入力引数のリストコード生成用のエントリポイント関数 predict.m
の調整可能な入力引数のリスト。cell 配列を指定します。この cell 配列には、coder.PrimitiveType
オブジェクトと coder.Constant
オブジェクトが含まれている他の cell 配列を格納します。
predict
の引数のコーダー属性を変更すると、それに従って対応するオブジェクトが更新されます。Tunability
属性として false
を指定した場合、対応するオブジェクトが PredictInputs
のリストから削除されます。
PredictInputs
の cell 配列は、コーダー コンフィギュアラー configurer
の configurer.CodeGenerationArguments{6}
と等価です。
データ型: cell
UpdateInputs
— update
の調整可能な入力引数のリストコード生成用のエントリポイント関数 update.m
の調整可能な入力引数のリスト。構造体の cell 配列を指定します。この構造体には、BinaryLearners
については coder.CellType
オブジェクトを、Cost
と Prior
については coder.PrimitiveType
オブジェクトを格納します。
update
の引数のコーダー属性を変更すると、それに従って対応するオブジェクトが更新されます。Tunability
属性として false
を指定した場合、対応するオブジェクトが UpdateInputs
のリストから削除されます。
UpdateInputs
の構造体は、コーダー コンフィギュアラー configurer
の configurer.CodeGenerationArguments{3}
と等価です。
データ型: cell
generateCode | コーダー コンフィギュアラーの使用による C/C++ コードの生成 |
generateFiles | コーダー コンフィギュアラーを使用するコード生成用 MATLAB ファイルの生成 |
validatedUpdateInputs | 更新する機械学習モデルのパラメーターの検証および抽出 |
機械学習モデルに学習をさせてから、コーダー コンフィギュアラーを使用して、このモデルの関数 predict
および update
に対してコードを生成します。
フィッシャーのアヤメのデータセットを読み込み、SVM バイナリ学習器を使用するマルチクラス ECOC モデルに学習をさせます。
load fisheriris
X = meas;
Y = species;
Mdl = fitcecoc(X,Y);
Mdl
は、ClassificationECOC
オブジェクトです。
learnerCoderConfigurer
を使用して、ClassificationECOC
モデルについてコーダー コンフィギュアラーを作成します。予測子データ X
を指定します。関数 learnerCoderConfigurer
は、入力 X
を使用して、関数 predict
の入力のコーダー属性を設定します。
configurer = learnerCoderConfigurer(Mdl,X)
configurer = ClassificationECOCCoderConfigurer with properties: Update Inputs: BinaryLearners: [1x1 ClassificationSVMCoderConfigurer] Prior: [1x1 LearnerCoderInput] Cost: [1x1 LearnerCoderInput] Predict Inputs: X: [1x1 LearnerCoderInput] Code Generation Parameters: NumOutputs: 1 OutputFileName: 'ClassificationECOCModel' Properties, Methods
configurer
は、ClassificationECOC
オブジェクトのコーダー コンフィギュアラーである ClassificationECOCCoderConfigurer
オブジェクトです。
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 関数を現在のフォルダーにコピーする。
関数type
を使用して、predict.m
、update.m
および initialize.m
ファイルの内容を表示します。
type predict.m
function varargout = predict(X,varargin) %#codegen % Autogenerated by MATLAB, 09-Feb-2019 00:40:41 [varargout{1:nargout}] = initialize('predict',X,varargin{:}); end
type update.m
function update(varargin) %#codegen % Autogenerated by MATLAB, 09-Feb-2019 00:40:41 initialize('update',varargin{:}); end
type initialize.m
function [varargout] = initialize(command,varargin) %#codegen % Autogenerated by MATLAB, 09-Feb-2019 00:40:41 coder.inline('always'); persistent model; if isempty(model) model = loadCompactModel('ClassificationECOCModel.mat'); end switch(command) case 'update' % Update struct fields: BinaryLearners % 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 バイナリ学習器を使用する誤り訂正出力符号 (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
オブジェクトです。表示には、predict
と update
の調整可能な入力引数 X
、BinaryLearners
、Prior
および Cost
が示されています。
パラメーターのコーダー属性の指定
predict
の引数 (予測子データと名前と値のペアの引数 'Decoding'
および 'BinaryLoss'
) と update
の引数 (SVM 学習器のサポート ベクター) のコーダー属性を指定して、生成されるコードでこれらの引数を predict
と update
の入力引数として使用できるようにします。
はじめに、生成されたコードが任意の個数の観測値を受け入れるように、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'
を使用するように、BinaryLoss
と Decoding
のコーダー属性を変更します。BinaryLoss
のコーダー属性を表示します。
configurer.BinaryLoss
ans = EnumeratedInput with properties: Value: 'hinge' SelectedOption: 'Built-in' BuiltInOptions: {'hamming' 'linear' 'quadratic' 'exponential' 'binodeviance' 'hinge' 'logit'} IsConstant: 1 Tunability: 0
生成されるコードで既定以外の値を使用するには、コードを生成する前に値を指定しなければなりません。BinaryLoss
の Value
属性として '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
Tunability
が false
(logical 0) である場合に属性値を変更すると、Tunability
は true
(logical 1) に設定されます。
Decoding
のコーダー属性を表示します。
configurer.Decoding
ans = EnumeratedInput with properties: Value: 'lossweighted' SelectedOption: 'Built-in' BuiltInOptions: {'lossweighted' 'lossbased'} IsConstant: 1 Tunability: 0
生成されるコードで BuiltInOptions
の利用可能なすべての値を使用できるようにするため、Decoding
の IsConstant
属性として false
を指定します。
configurer.Decoding.IsConstant = false; configurer.Decoding
ans = EnumeratedInput with properties: Value: [1×1 LearnerCoderInput] SelectedOption: 'NonConstant' BuiltInOptions: {'lossweighted' 'lossbased'} IsConstant: 0 Tunability: 1
Decoding
の Value
属性が LearnerCoderInput
オブジェクトに変更されるので、'lossweighted'
と 'lossbased
' の両方を 'Decoding'
の値として使用できます。また、SelectedOption
が 'NonConstant'
に、Tunability
が true
に設定されます。
最後に、BinaryLearners
の SupportVectors
のコーダー属性を変更します。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
BinaryLoss
と Decoding
も表示に含まれるようになりました。
コードの生成
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
を使用して、label
と label_mex
を比較します。
isequal(label,label_mex)
ans = logical
1
すべての入力が等しい場合、isequal
は logical 1 (true
) を返します。この比較により、同じラベルを Mdl
の関数 predict
と MEX 関数の関数 predict
が返すことを確認します。
NegLoss
と比較すると、NegLoss_mex
には丸めによる差が含まれている可能性があります。このケースでは、小さい誤差を許容して NegLoss_mex
と NegLoss
を比較します。
find(abs(NegLoss-NegLoss_mex) > 1e-8)
ans = 0×1 empty double column vector
この比較により、許容誤差 1e–8
内で NegLoss
と NegLoss_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
この比較により、labels
と labels_mex
が等しく、NegLoss
と NegLoss_mex
が許容誤差内で等しいことが確認されます。
LearnerCoderInput
オブジェクトコーダー コンフィギュアラーは、LearnerCoderInput
オブジェクトを使用して predict
および update
の入力引数のコーダー属性を指定します。
LearnerCoderInput
オブジェクトには、生成されるコードにおける入力引数配列のプロパティを指定するための属性として、次のようなものがあります。
属性名 | 説明 |
---|---|
SizeVector |
|
VariableDimensions | 配列の各次元が可変サイズと固定サイズのどちらであるかを指定するインジケーター。
|
DataType | 配列のデータ型 |
Tunability | 生成されるコードで引数を入力として
|
コーダー コンフィギュアラーを作成した後で、ドット表記を使用してコーダー属性を変更できます。たとえば、コーダー コンフィギュアラー configurer
の BinaryLearners
における係数 Alpha
のコーダー属性を指定するには、次のようにします。
configurer.BinaryLearners.Alpha.SizeVector = [100 1];
configurer.BinaryLearners.Alpha.VariableDimensions = [1 0];
configurer.BinaryLearners.Alpha.DataType = 'double';
Verbose
) として true
(既定) を指定した場合、機械学習モデルのパラメーターのコーダー属性を変更することによって他の従属するパラメーターのコーダー属性が変化すると、通知メッセージが表示されます。EnumeratedInput
オブジェクトコーダー コンフィギュアラーは、EnumeratedInput
オブジェクトを使用して、有限個の使用可能な値がある predict
の入力引数のコーダー属性を指定します。
EnumeratedInput
オブジェクトには、生成されるコードにおける入力引数配列のプロパティを指定するための属性として、次のようなものがあります。
属性名 | 説明 |
---|---|
Value | 生成されるコードにおける
|
SelectedOption | 選択したオプションのステータス。
この属性は読み取り専用です。 |
BuiltInOptions | 対応する この属性は読み取り専用です。 |
IsConstant | 生成されるコードで配列の値がコンパイル時の定数 ( この値を |
Tunability | 生成されるコードで引数を入力として
|
コーダー コンフィギュアラーを作成した後で、ドット表記を使用してコーダー属性を変更できます。たとえば、コーダー コンフィギュアラー BinaryLoss
の configurer
のコーダー属性を指定するには、次のようにします。
configurer.BinaryLoss.Value = 'linear';
ClassificationECOC
| ClassificationSVMCoderConfigurer
| CompactClassificationECOC
| learnerCoderConfigurer
| predict
| update
A modified version of this example exists on your system. Do you want to open this version instead? (ja_JP)
MATLAB のコマンドを実行するリンクがクリックされました。
このリンクは、Web ブラウザーでは動作しません。MATLAB コマンド ウィンドウに以下を入力すると、このコマンドを実行できます。
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.