predict
説明
例
従来式の学習済み ECOC モデルを変換してインクリメンタル学習モデルを作成し、両方のモデルを使用してクラス ラベルを予測します。
人の行動のデータ セットを読み込みます。
load humanactivity
データ セットの詳細については、コマンド ラインで Description
を入力してください。
マルチクラス ECOC 分類モデルをデータ セット全体に当てはめます。
Mdl = fitcecoc(feat,actid);
Mdl
は従来式の学習済み ECOC 分類モデルを表す ClassificationECOC
モデル オブジェクトです。
従来式の学習済み ECOC 分類モデルをインクリメンタル学習用のモデルに変換します。
IncrementalMdl = incrementalLearner(Mdl)
IncrementalMdl = incrementalClassificationECOC IsWarm: 1 Metrics: [1×2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' BinaryLearners: {10×1 cell} CodingName: 'onevsone' Decoding: 'lossweighted' Properties, Methods
IncrementalMdl
は、インクリメンタル学習用に準備された incrementalClassificationECOC
モデル オブジェクトです。
関数 incrementalLearner
は、バイナリ学習器の符号化設計とモデル パラメーターを、Mdl
が学習データから抽出する他の情報と共に渡して、インクリメンタル学習器を初期化します。IncrementalMdl
はウォーム (IsWarm
が 1
) です。これは、インクリメンタル学習関数がパフォーマンス メトリクスの追跡と予測を実行できることを意味します。
従来式の学習済みモデルから変換して作成したインクリメンタル学習器は、追加の処理なしで予測を生成できます。
両方のモデルを使用して、すべての観測値のクラス ラベルを予測します。
ttlabels = predict(Mdl,feat); illables = predict(IncrementalMdl,feat); isequal(ttlabels,illables)
ans = logical
1
各観測値についての予測ラベルが両方のモデルで同じになります。
モデルを観測値のチャンクに当てはめて predict
用にインクリメンタル ECOC モデルを準備します。関数 predict
を使用して、ストリーミング データの符号を反転した平均バイナリ損失を計算し、受信者動作特性 (ROC) 曲線の下の領域 (AUC) を使用してモデルの性能を評価します。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(10) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
インクリメンタル学習用の ECOC モデルを作成します。クラス名を指定します。モデルを最初の 10 個の観測値に当てはめて predict
用にモデルを準備します。
Mdl = incrementalClassificationECOC(ClassNames=unique(Y)); initobs = 10; Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
Mdl
は incrementalClassificationECOC
モデルです。そのプロパティはすべて読み取り専用です。モデルは予測を生成するように構成されています。
データ ストリームをシミュレートし、100 個の観測値の入力チャンクごとに次のアクションを実行します。
predict
を呼び出して、データの入力チャンクに含まれる各観測値の符号を反転した平均バイナリ損失を計算します。"lossbased"
復号化方式を使用するように指定します。rocmetrics
を呼び出して、符号を反転した平均バイナリ損失を使って AUC を計算し、すべてのクラスの平均の AUC 値を格納します。この AUC は、インクリメンタル モデルが平均でどの程度正しく行動を予測するかの尺度になります。fit
を呼び出して、モデルを入力チャンクに当てはめます。前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。
numObsPerChunk = 100; nchunk = floor((n - initobs)/numObsPerChunk); auc = zeros(nchunk,1); % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; [~,NegLoss] = predict(Mdl,X(idx,:),Decoding="lossbased"); mdlROC = rocmetrics(Y(idx),NegLoss,Mdl.ClassNames); [~,~,~,auc(j)] = average(mdlROC,"micro"); Mdl = fit(Mdl,X(idx,:),Y(idx)); end
Mdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationECOC
モデル オブジェクトです。
入力データの各チャンクの AUC 値をプロットします。
plot(auc) xlim([0 nchunk]) ylabel("AUC") xlabel("Iteration")
プロットは、分類器がインクリメンタル学習において行動を正しく予測していることを示しています。
入力引数
インクリメンタル学習用の ECOC 分類モデル。incrementalClassificationECOC
モデル オブジェクトとして指定します。Mdl
は、incrementalClassificationECOC
を直接呼び出して作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner
で変換して作成することもできます。
観測値のバッチでラベルを予測するように Mdl
を構成しなければなりません。
Mdl
が従来式の学習済みモデルから変換されたモデルの場合、いかなる修正も行うことなくラベルを予測できます。それ以外の場合、
fit
またはupdateMetricsAndFit
を使用してMdl
をデータに当てはめる必要があります。
予測子データのバッチ。n 個の観測値と Mdl.NumPredictors
個の予測子変数で構成される浮動小数点行列として指定します。名前と値の引数 ObservationsIn
の値は、変数と観測値の方向を決定します。ObservationsIn
の既定値は "rows"
であり、予測子データの観測値が X
の行に沿うことを示しています。
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: BinaryLoss="quadratic",Decoding="lossbased"
は、バイナリ学習器の損失関数として 2 次関数を使用し、損失に基づく復号化方式をバイナリ損失の集計に使用するよう指定します。
バイナリ学習器損失関数。組み込みの損失関数の名前または関数ハンドルとして指定します。
次の表で、組み込み関数について説明します。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコア、g(yj,sj) はバイナリ損失の式です。
値 説明 スコア領域 g(yj,sj) "binodeviance"
二項分布からの逸脱度 (–∞,∞) log[1 + exp(–2yjsj)]/[2log(2)] "exponential"
指数 (–∞,∞) exp(–yjsj)/2 "hamming"
ハミング [0,1] または (–∞,∞) [1 – sign(yjsj)]/2 "hinge"
ヒンジ (–∞,∞) max(0,1 – yjsj)/2 "linear"
線形 (–∞,∞) (1 – yjsj)/2 "logit"
ロジスティック (–∞,∞) log[1 + exp(–yjsj)]/[2log(2)] "quadratic"
2 次 [0,1] [1 – yj(2sj – 1)]2/2 バイナリ損失は、yj = 0 の場合に損失が 0.5 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます[1]。
カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、
customFunction
の場合はBinaryLoss=@customFunction
を指定します。customFunction
の形式は次のとおりです。bLoss = customFunction(M,s)
M
はMdl.CodingMatrix
に格納された K 行 B 列の符号化行列です。s
は 1 行 B 列の分類スコアの行ベクトルです。bLoss
は分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。K は、クラスの数です。
B はバイナリ学習器の数です。
カスタム バイナリ損失関数の例については、カスタム バイナリ損失関数の使用による ECOC モデルのテスト標本ラベルの予測を参照してください。この例は従来式の学習済みモデルの例です。この例で示しているように、インクリメンタル学習用のカスタム損失関数を定義できます。
詳細については、バイナリ損失を参照してください。
データ型: char
| string
| function_handle
復号化方式。"lossweighted"
または "lossbased"
として指定します。
ソフトウェアでバイナリ損失をどのように集計して各観測値の予測クラスを判定するかは、ECOC モデルの復号化方式で指定します。ソフトウェアでは 2 つの復号化方式をサポートしています。
"lossweighted"
— 観測値の予測クラスは、バイナリ学習器におけるバイナリ損失の合計が最小になるクラスに対応します。"lossbased"
— 観測値の予測クラスは、バイナリ学習器におけるバイナリ損失の平均が最小になるクラスに対応します。
詳細については、バイナリ損失を参照してください。
例: Decoding="lossbased"
データ型: char
| string
予測子データにおける観測値の次元。"rows"
または "columns"
として指定します。
例: ObservationsIn="columns"
データ型: char
| string
出力引数
予測応答 (ラベル)。n 行の categorical 配列または文字配列、浮動小数点ベクトル、logical ベクトルまたは string ベクトル、文字ベクトルの cell 配列として返されます。n は X
の観測値の数、label(
は観測値 j
)
の予測応答です。 j
label
は Mdl.ClassNames
に格納されているクラス名と同じデータ型になります。(string 配列は文字ベクトルの cell 配列として扱われます)。
関数 predict
は、符号を反転した平均バイナリ損失が最大になるクラス (つまり、平均バイナリ損失が最小になるクラス) に観測値を割り当てることで観測値の分類を予測します。観測値の損失値が NaN
の場合、関数はこの観測値を、学習ラベルの最大比率を占める多数クラスに分類します。
符号を反転した平均バイナリ損失。n 行 K 列の数値行列として返されます。n は X
内の観測値の数、K は学習データ内の 異なるクラスの数 (numel(Mdl.ClassNames)
) です。
NegLoss(i,k)
は、観測値 i を k 番目のクラスに分類する平均バイナリ損失の符号を反転した値です。
Decoding
が'lossbased'
の場合、NegLoss(i,k)
はバイナリ損失の合計をバイナリ学習器の総数で割った値の符号を反転した値になります。Decoding
が'lossweighted'
の場合、NegLoss(i,k)
はバイナリ損失の合計を k 番目のクラスに対するバイナリ学習器の数で割った値の符号を反転した値になります。
詳細については、バイナリ損失を参照してください。
各バイナリ学習器の陽性クラスのスコア。n 行 B 列の数値行列として返されます。n は X
内の観測値の数、B はバイナリ学習器の数 (numel(Mdl.BinaryLearners)
) です。
詳細
"バイナリ損失" は、バイナリ学習器がどの程度の精度で観測値をクラスに分類するかを決定する、クラスと分類スコアの関数です。ソフトウェアでバイナリ損失をどのように集計して各観測値の予測クラスを判定するかは、ECOC モデルの "復号化方式" で指定します。
以下のように仮定します。
mkj は符号化設計行列 M の要素 (k,j)、つまりバイナリ学習器 j のクラス k に対応する符号。M は K 行 B 列の行列であり、K はクラスの数、B はバイナリ学習器の数です。
sj は観測値に対するバイナリ学習器 j のスコア。
g はバイナリ損失関数。
は観測値の予測クラス。
ソフトウェアでは 2 つの復号化方式をサポートしています。
関数 predict
、resubPredict
、および kfoldPredict
は、それぞれの観測値とクラスについて、argmin
の目的関数の符号反転値を 2 番目の出力引数 (NegLoss
) として返します。
次の表は、サポートされる損失関数をまとめたものです。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコア、g(yj,sj) はバイナリ損失関数です。
値 | 説明 | スコア領域 | g(yj,sj) |
---|---|---|---|
"binodeviance" | 二項分布からの逸脱度 | (–∞,∞) | log[1 + exp(–2yjsj)]/[2log(2)] |
"exponential" | 指数 | (–∞,∞) | exp(–yjsj)/2 |
"hamming" | ハミング | [0,1] または (–∞,∞) | [1 – sign(yjsj)]/2 |
"hinge" | ヒンジ | (–∞,∞) | max(0,1 – yjsj)/2 |
"linear" | 線形 | (–∞,∞) | (1 – yjsj)/2 |
"logit" | ロジスティック | (–∞,∞) | log[1 + exp(–yjsj)]/[2log(2)] |
"quadratic" | 2 次 | [0,1] | [1 – yj(2sj – 1)]2/2 |
yj = 0 のときに損失が 0.5 になるようにバイナリ損失が正規化され、バイナリ学習器の平均が集計に使用されます[1]。
ECOC 分類器の全体的な性能の尺度である全体の分類損失 (オブジェクト関数 loss
および predict
の名前と値の引数 LossFun
により指定) とバイナリ損失を混同しないでください。
アルゴリズム
事前クラス確率分布が既知の場合 (つまり、事前分布が経験分布でない場合)、predict
は、観測値の重みを正規化して、それぞれのクラスの事前クラス確率の合計になるようにします。このアクションは、既定の観測値の重みがそれぞれの事前クラス確率であることを前提としています。
クラスの事前確率分布が経験分布の場合、ソフトウェアは、predict
が呼び出されるたびに、指定された観測値の重みを正規化して、合計が 1 になるようにします。
参照
[1] Allwein, E., R. Schapire, and Y. Singer. “Reducing multiclass to binary: A unifying approach for margin classifiers.” Journal of Machine Learning Research. Vol. 1, 2000, pp. 113–141.
[2] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recog. Lett. Vol. 30, Issue 3, 2009, pp. 285–297.
[3] Escalera, S., O. Pujol, and P. Radeva. “On the decoding process in ternary error-correcting output codes.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 32, Issue 7, 2010, pp. 120–134.
拡張機能
使用上の注意および制限:
saveLearnerForCoder
、loadLearnerForCoder
およびcodegen
(MATLAB Coder) を使用して、関数predict
のコードを生成します。saveLearnerForCoder
を使用して、学習済みモデルを保存します。loadLearnerForCoder
を使用して保存済みモデルを読み込んで関数predict
を呼び出す、エントリポイント関数を定義します。次に、codegen
を使用して、エントリポイント関数のコードを生成します。predict
の単精度の C/C++ コードを生成するには、loadLearnerForCoder
関数を呼び出すときにDataType="single"
を指定します。浮動小数点の入力引数およびオブジェクト プロパティには、すべて同質なデータ型を使用します。具体的には、
single
またはdouble
のいずれかです。次の表は、
predict
の引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。引数 注意と制限 Mdl
モデル オブジェクトの使用上の注意および制限については、
incrementalClassificationECOC
を参照してください。X
バッチ間の観測値の数は可変サイズにすることができます。
予測子変数の数は
Mdl.NumPredictors
と等しくなければなりません。X
はsingle
またはdouble
でなければなりません。
詳細は、コード生成の紹介を参照してください。
バージョン履歴
R2022a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)