ClassificationECOCCoderConfigurer
バイナリ学習器を使用するマルチクラス モデルのコーダー コンフィギュアラー
説明
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
の配列サイズです。ClassificationECOCCoderConfigurer
のObservationsIn
プロパティのValue
属性が'rows'
である場合、このSizeVector
の値は[n p]
です。ここで、n
は観測値の数に対応し、p
は予測子の数に対応します。ClassificationECOCCoderConfigurer
のObservationsIn
プロパティのValue
属性が'columns'
である場合、このSizeVector
の値は[p n]
です。
SizeVector
の要素を切り替える (たとえば、[n p]
を[p n]
に変更する) には、ClassificationECOCCoderConfigurer
のObservationsIn
プロパティのValue
属性をそのように変更します。SizeVector
の値を直接変更することはできません。VariableDimensions
— 既定値は[0 0]
です。これは、SizeVector
の指定に従って配列サイズを固定することを示します。SizeVector
の値が[n p]
の場合にこの値を[1 0]
に設定でき、[p n]
の場合には[0 1]
に設定できます。これは、配列の行が可変サイズ、列が固定サイズであることを示します。たとえば、[1 0]
は、SizeVector
の 1 番目の値 (n
) が行数の上限であり、SizeVector
の 2 番目の値 (p
) が列数であることを指定します。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
内の文字ベクトルまたはカスタム関数名を指定する文字ベクトルを指定します。バイナリ学習器が SVM であるか、SVM 学習器の線形分類モデルである場合、既定の値は'hinge'
です。バイナリ学習器がロジスティック回帰学習器の線形分類モデルである場合、既定の値は'quadratic'
です。カスタム オプションを使用するには、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
オブジェクトを指定します。
関数 learnerCoderConfigurer
を使用してコーダー コンフィギュアラーを作成する場合、'ObservationsIn'
の名前と値のペアの引数は EnumeratedInput
のコーダー属性の既定値を決定します。
Value
— 既定値はコーダー コンフィギュアラーを作成する際に使用する予測子データの観測値の次元であり、'rows'
または'columns'
として指定します。コーダー コンフィギュアラーを作成する際に'ObservationsIn'
を指定しない場合、既定値は'rows'
です。SVM バイナリ学習器を使用するモデルの場合、この値は
'rows'
でなければなりません。SelectedOption
— この値は常に'Built-in'
です。この属性は読み取り専用です。BuiltInOptions
—'rows'
と'columns'
から構成される cell 配列。この属性は読み取り専用です。IsConstant
— この値はtrue
でなければなりません。Tunability
— コーダー コンフィギュアラーを作成する際に'ObservationsIn','rows'
を指定する場合、既定値はfalse
であり、'ObservationsIn','columns'
を指定する場合はtrue
です。Tunability
をfalse
に設定する場合、ソフトウェアはValue
を'rows'
に設定します。Tunability
がfalse
である場合に他の属性値を指定すると、Tunability
はtrue
に設定されます。
NumOutputs
— predict
の出力の個数
1 (既定値) | 2 | 3
ECOC 分類モデルの関数 predict
に対して生成される C/C++ コードから返される出力引数の個数。1、2 または 3 を指定します。
predict
の出力引数は、順番に label
(予測されたクラス ラベル)、NegLoss
(符号を反転した平均バイナリ損失)、PBScore
(陽性クラスのスコア) です。生成された C/C++ コードの predict
は、関数 predict
の最初の n
個の出力を返します。n
は NumOutputs
の値です。
コーダー コンフィギュアラー configurer
を作成した後で、ドット表記を使用して出力の個数を指定できます。
configurer.NumOutputs = 2;
NumOutputs
プロパティは、codegen
(MATLAB Coder) のコンパイラ オプション '-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
オブジェクト | ClassificationLinearCoderConfigurer
オブジェクト
学習済みバイナリ学習器 (ECOC 分類モデルの BinaryLearners
) のコーダー属性。ClassificationSVMCoderConfigurer
オブジェクト (SVM バイナリ学習器の場合) または ClassificationLinearCoderConfigurer
オブジェクト (線形バイナリ学習器の場合) を指定します。
SVM または線形コーダー コンフィギュアラー オブジェクトの update
の引数を使用して、すべてのバイナリ学習器のコーダー属性を指定します。
BinaryLearners
の構成に関して、update
の引数のプロパティのみが使用され、オブジェクトの他のプロパティは無視されます。
SVM バイナリ学習器をもつ ECOC モデルを学習させる場合、各学習器には、異なる個数のサポート ベクターを含めることができます。したがって、すべてのバイナリ学習器に対応するため、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
の引数および ClassificationLinearCoderConfigurer
の 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
(MATLAB Coder) で使用します。
関数 generateFiles
を使用して 2 つのエントリポイント関数ファイル (predict.m
および update.m
) を生成した後で、独自のコード生成ワークフローに従って、これらのファイルを変更できます。たとえば、predict.m
ファイルを変更してデータの前処理を含めたり、これらのエントリポイント関数を別のコード生成プロジェクトに追加したりできます。その後、関数 codegen
と、変更したエントリポイント関数またはコード生成プロジェクトに適した codegen
(MATLAB Coder) の引数とを使用して C/C++ コードを生成できます。引数 codegen
を設定するための出発点として、このセクションで説明されている 3 つのプロパティを使用します。
CodeGenerationArguments
— codegen
の引数
cell 配列
この プロパティ は読み取り専用です。
codegen
(MATLAB Coder) の引数。cell 配列を指定します。
このプロパティにより、コード生成ワークフローをカスタマイズできます。ワークフローをカスタマイズする必要がない場合は関数 generateCode
を使用します。
generateCode
をコーダー コンフィギュアラー configurer
に対して使用する代わりに、次のようにして C/C++ コードを生成できます。
generateFiles(configurer) cgArgs = configurer.CodeGenerationArguments; codegen(cgArgs{:})
codegen
を呼び出す前に cgArgs
を変更します。
configurer
の他のプロパティを変更すると、それに従って CodeGenerationArguments
プロパティが更新されます。
データ型: cell
PredictInputs
— predict
の調整可能な入力引数のリスト
cell 配列
この プロパティ は読み取り専用です。
コード生成用のエントリポイント関数 predict.m
の調整可能な入力引数のリスト。cell 配列として指定します。この cell 配列には、coder.PrimitiveType
(MATLAB Coder) オブジェクトと coder.Constant
(MATLAB Coder) オブジェクトが含まれている他の cell 配列を格納します。
predict
の引数のコーダー属性を変更すると、それに従って対応するオブジェクトが更新されます。Tunability
属性として false
を指定した場合、対応するオブジェクトが PredictInputs
のリストから削除されます。
PredictInputs
の cell 配列は、コーダー コンフィギュアラー configurer
の configurer.CodeGenerationArguments{6}
と等価です。
データ型: cell
UpdateInputs
— update
の調整可能な入力引数のリスト
cell 配列
この プロパティ は読み取り専用です。
コード生成用のエントリポイント関数 update.m
の調整可能な入力引数のリスト。構造体の cell 配列を指定します。この構造体には、BinaryLearners
については coder.CellType
(MATLAB Coder) オブジェクトを、Cost
と Prior
については coder.PrimitiveType
(MATLAB Coder) オブジェクトを格納します。
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'
configurer
は、ClassificationECOC
オブジェクトのコーダー コンフィギュアラーである ClassificationECOCCoderConfigurer
オブジェクトです。
C/C++ コードを生成するには、適切に設定されている C/C++ コンパイラにアクセスできなければなりません。MATLAB Coder は、サポートされているインストール済みのコンパイラを探して使用します。mex
-setup
を使用すると、既定のコンパイラを表示および変更できます。詳細は、既定のコンパイラの変更を参照してください。
既定の設定を使用して、ECOC 分類モデル (Mdl
) の関数 predict
および update
に対するコードを生成します。
generateCode(configurer)
generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'ClassificationECOCModel.mat' Code generation successful.
関数 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, 20-Jul-2024 17:19:22 [varargout{1:nargout}] = initialize('predict',X,varargin{:}); end
type update.m
function update(varargin) %#codegen % Autogenerated by MATLAB, 20-Jul-2024 17:19:22 initialize('update',varargin{:}); end
type initialize.m
function [varargout] = initialize(command,varargin) %#codegen % Autogenerated by MATLAB, 20-Jul-2024 17:19:22 coder.inline('always') persistent model if isempty(model) model = loadLearnerForCoder('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
生成されたコードにおける ECOC 分類モデルのパラメーターの更新
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: [1x1 ClassificationSVMCoderConfigurer] Prior: [1x1 LearnerCoderInput] Cost: [1x1 LearnerCoderInput] Predict Inputs: X: [1x1 LearnerCoderInput] Code Generation Parameters: NumOutputs: 2 OutputFileName: 'ClassificationECOCModel'
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: [1x1 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: [1x1 ClassificationSVMCoderConfigurer] Prior: [1x1 LearnerCoderInput] Cost: [1x1 LearnerCoderInput] Predict Inputs: X: [1x1 LearnerCoderInput] BinaryLoss: [1x1 EnumeratedInput] Decoding: [1x1 EnumeratedInput] Code Generation Parameters: NumOutputs: 2 OutputFileName: 'ClassificationECOCModel'
BinaryLoss
と Decoding
も表示に含まれるようになりました。
コードの生成
C/C++ コードを生成するには、適切に設定されている C/C++ コンパイラにアクセスできなければなりません。MATLAB Coder は、サポートされているインストール済みのコンパイラを探して使用します。mex
-setup
を使用すると、既定のコンパイラを表示および変更できます。詳細は、既定のコンパイラの変更を参照してください。
ECOC 分類モデル (Mdl
) の関数 predict
および update
のコードを生成します。
generateCode(configurer)
generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'ClassificationECOCModel.mat' Code generation successful.
関数 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 = 0x1 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 = 0x1 empty double column vector
この比較により、label
と label_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 | 生成されるコードで引数を入力として
|
コーダー コンフィギュアラーを作成した後で、ドット表記を使用してコーダー属性を変更できます。たとえば、コーダー コンフィギュアラー configurer
の BinaryLoss
のコーダー属性を指定します。
configurer.BinaryLoss.Value = 'linear';
バージョン履歴
R2019a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
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: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)