predict
説明
では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、予測子データの観測値が label
= predict(Mdl
,X
,Name=Value
)X
の列に沿うように指定するには ObservationsIn=columns
と指定します。
例
クラス ラベルの予測
従来式の学習済み ECOC モデルを変換してインクリメンタル学習モデルを作成し、両方のモデルを使用してクラス ラベルを予測します。
人の行動のデータ セットを読み込みます。
load humanactivity
データ セットの詳細については、コマンド ラインで Description
を入力してください。
マルチクラス ECOC 分類モデルをデータ セット全体に当てはめます。
Mdl = fitcecoc(feat,actid);
Mdl
は従来式の学習済み ECOC 分類モデルを表す ClassificationECOC
モデル オブジェクトです。
従来式の学習済み ECOC 分類モデルをインクリメンタル学習用のモデルに変換します。
IncrementalMdl = incrementalLearner(Mdl)
IncrementalMdl = incrementalClassificationECOC IsWarm: 1 Metrics: [1x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' BinaryLearners: {10x1 cell} CodingName: 'onevsone' Decoding: 'lossweighted'
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")
プロットは、分類器がインクリメンタル学習において行動を正しく予測していることを示しています。
入力引数
Mdl
— インクリメンタル学習用の ECOC 分類モデル
incrementalClassificationECOC
モデル オブジェクト
インクリメンタル学習用の ECOC 分類モデル。incrementalClassificationECOC
モデル オブジェクトとして指定します。Mdl
は、incrementalClassificationECOC
を直接呼び出して作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner
で変換して作成することもできます。
観測値のバッチでラベルを予測するように Mdl
を構成しなければなりません。
Mdl
が従来式の学習済みモデルから変換されたモデルの場合、いかなる修正も行うことなくラベルを予測できます。それ以外の場合、
fit
またはupdateMetricsAndFit
を使用してMdl
をデータに当てはめる必要があります。
X
— 予測子データのバッチ
浮動小数点行列
予測子データのバッチ。n 個の観測値と Mdl.NumPredictors
個の予測子変数で構成される浮動小数点行列として指定します。名前と値の引数 ObservationsIn
の値は、変数と観測値の方向を決定します。ObservationsIn
の既定値は "rows"
であり、予測子データの観測値が X
の行に沿うことを示しています。
メモ
predict
は、浮動小数点の入力予測子データのみをサポートしています。入力データに categorical データが含まれている場合は、エンコード バージョンの categorical データを準備する必要があります。dummyvar
を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: BinaryLoss="quadratic",Decoding="lossbased"
は、バイナリ学習器の損失関数として 2 次関数を使用し、損失に基づく復号化方式をバイナリ損失の集計に使用するよう指定します。
BinaryLoss
— バイナリ学習器損失関数
Mdl.BinaryLoss
(既定値) | "hamming"
| "linear"
| "logit"
| "exponential"
| "binodeviance"
| "hinge"
| "quadratic"
| 関数ハンドル
バイナリ学習器損失関数。組み込みの損失関数の名前または関数ハンドルとして指定します。
次の表で、組み込み関数について説明します。ここで、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
Decoding
— 復号化スキーム
Mdl.Decoding
(既定値) | "lossweighted"
| "lossbased"
復号化方式。"lossweighted"
または "lossbased"
として指定します。
ソフトウェアでバイナリ損失をどのように集計して各観測値の予測クラスを判定するかは、ECOC モデルの復号化方式で指定します。ソフトウェアでは 2 つの復号化方式をサポートしています。
"lossweighted"
— 観測値の予測クラスは、バイナリ学習器におけるバイナリ損失の合計が最小になるクラスに対応します。"lossbased"
— 観測値の予測クラスは、バイナリ学習器におけるバイナリ損失の平均が最小になるクラスに対応します。
詳細については、バイナリ損失を参照してください。
例: Decoding="lossbased"
データ型: char
| string
ObservationsIn
— 予測子データにおける観測値の次元
"rows"
(既定値) | "columns"
予測子データにおける観測値の次元。"rows"
または "columns"
として指定します。
例: ObservationsIn="columns"
データ型: char
| string
出力引数
label
— 予測応答 (ラベル)
categorical 配列 | 浮動小数点ベクトル | 文字配列 | logical ベクトル | string ベクトル | 文字ベクトルの cell 配列
予測応答 (ラベル)。n 行の categorical 配列または文字配列、浮動小数点ベクトル、logical ベクトルまたは string ベクトル、文字ベクトルの cell 配列として返されます。n は X
の観測値の数、label(
は観測値 j
)
の予測応答です。 j
label
は Mdl.ClassNames
に格納されているクラス名と同じデータ型になります。(string 配列は文字ベクトルの cell 配列として扱われます)。
関数 predict
は、符号を反転した平均バイナリ損失が最大になるクラス (つまり、平均バイナリ損失が最小になるクラス) に観測値を割り当てることで観測値の分類を予測します。観測値の損失値が NaN
の場合、関数はこの観測値を、学習ラベルの最大比率を占める多数クラスに分類します。
NegLoss
— 符号を反転した平均バイナリ損失
数値行列
符号を反転した平均バイナリ損失。n 行 K 列の数値行列として返されます。n は X
内の観測値の数、K は学習データ内の 異なるクラスの数 (numel(Mdl.ClassNames)
) です。
NegLoss(i,k)
は、観測値 i を k 番目のクラスに分類する平均バイナリ損失の符号を反転した値です。
Decoding
が'lossbased'
の場合、NegLoss(i,k)
はバイナリ損失の合計をバイナリ学習器の総数で割った値の符号を反転した値になります。Decoding
が'lossweighted'
の場合、NegLoss(i,k)
はバイナリ損失の合計を k 番目のクラスに対するバイナリ学習器の数で割った値の符号を反転した値になります。
詳細については、バイナリ損失を参照してください。
PBScore
— 陽性クラスのスコア
数値行列
各バイナリ学習器の陽性クラスのスコア。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.
バージョン履歴
R2022a で導入
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)