loss
説明
loss
は、カーネル回帰 (incrementalRegressionKernel
オブジェクト) またはバイナリ カーネル分類 (incrementalClassificationKernel
オブジェクト) 用に構成されたインクリメンタル学習モデルの回帰損失または分類損失を返します。
データ ストリームでのモデルの性能を測定し、結果を出力モデルに保存するには、updateMetrics
または updateMetricsAndFit
を呼び出します。
例
インクリメンタル学習中のモデルの性能の測定
ストリーミング データでのインクリメンタル モデルの性能を 3 通りの方法で測定します。
累積メトリクスで、インクリメンタル学習の開始以降の性能を測定します。
ウィンドウ メトリクスで、指定した観測値ウィンドウでの性能を測定します。指定したウィンドウをモデルが処理するたびにメトリクスが更新されます。
関数
loss
で、指定したデータのバッチについてのみ性能を測定します。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
応答は、次の 5 つのクラスのいずれかになります。座る、立つ、歩く、走る、または踊る。被験者が移動しているかどうか (actid
> 2) を基準に、応答を二分します。
Y = Y > 2;
バイナリ分類用のインクリメンタル カーネル モデルを作成します。メトリクス ウィンドウ サイズを観測値 1000 個に指定します。モデルを最初の 10 個の観測値に当てはめて loss
用に構成します。
p = size(X,2); Mdl = incrementalClassificationKernel(MetricsWindowSize=1000); initobs = 10; Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
Mdl
は incrementalClassificationKernel
モデルです。そのプロパティはすべて読み取り専用です。
データ ストリームをシミュレートし、50 個の観測値の入力チャンクごとに次のアクションを実行します。
updateMetrics
を呼び出して、累積性能および観測値ウィンドウ内での性能を測定します。前のインクリメンタル モデルを新しいモデルで上書きして、パフォーマンス メトリクスを追跡します。loss
を呼び出して、入力チャンクでのモデルの性能を測定します。fit
を呼び出して、モデルを入力チャンクに当てはめます。前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。すべてのパフォーマンス メトリクスを保存して、インクリメンタル学習中にそれらがどのように進化するかを確認します。
% Preallocation numObsPerChunk = 50; nchunk = floor((n - initobs)/numObsPerChunk); ce = array2table(zeros(nchunk,3),VariableNames=["Cumulative","Window","Loss"]); % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; Mdl = updateMetrics(Mdl,X(idx,:),Y(idx)); ce{j,["Cumulative","Window"]} = Mdl.Metrics{"ClassificationError",:}; ce{j,"Loss"} = loss(Mdl,X(idx,:),Y(idx)); Mdl = fit(Mdl,X(idx,:),Y(idx)); end
Mdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationKernel
モデル オブジェクトです。インクリメンタル学習中およびモデルがウォームアップされた後、updateMetrics
は入力観測値でのモデルの性能をチェックし、関数 fit
はモデルをその観測値に当てはめます。loss
はメトリクスのウォームアップ期間に依存しないため、すべての反復について分類誤差を測定します。
パフォーマンス メトリクスが学習中にどのように進化するかを確認するには、それらをプロットします。
plot(ce.Variables) xlim([0 nchunk]) ylabel("Classification Error") xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,"--") legend(ce.Properties.VariableNames) xlabel("Iteration")
黄色の線は、入力データの各チャンクの分類誤差を表します。メトリクスのウォームアップ期間後、Mdl
は累積およびウィンドウ メトリクスを追跡します。累積およびバッチ損失は、関数 fit
が入力データにインクリメンタル モデルを当てはめるにつれて収束します。
データの入力チャンクでのカスタム損失の計算
ストリーミング データに回帰用のインクリメンタル学習モデルを当てはめ、入力データのバッチの平均絶対偏差 (MAD) を計算します。
ロボット アームのデータ セットを読み込みます。標本サイズ n
と予測子変数の数 p
を取得します。
load robotarm
n = numel(ytrain);
p = size(Xtrain,2);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
回帰用のインクリメンタル カーネル モデルを作成します。次のようにモデルを構成します。
メトリクスのウォームアップ期間を観測値 1000 個に指定。
メトリクス ウィンドウ サイズを観測値 500 個に指定。
平均絶対偏差 (MAD) を追跡して、モデルの性能を測定。新しい各観測値の絶対誤差を測定する無名関数を作成します。名前
MeanAbsoluteError
とそれに対応する関数を含む構造体配列を作成します。モデルを最初の 10 個の観測値に当てはめて応答予測用に構成。
maefcn = @(z,zfit,w)(abs(z - zfit));
maemetric = struct(MeanAbsoluteError=maefcn);
Mdl = incrementalRegressionKernel(MetricsWarmupPeriod=1000,MetricsWindowSize=500, ...
Metrics=maemetric);
initobs = 10;
Mdl = fit(Mdl,Xtrain(1:initobs,:),ytrain(1:initobs));
Mdl
はインクリメンタル学習用に構成された incrementalRegressionKernel
モデル オブジェクトです。
インクリメンタル学習を実行します。各反復で次を行います。
50 個の観測値のチャンクを処理して、データ ストリームをシミュレート。
updateMetrics
を呼び出して、データの入力チャンクの累積メトリクスとウィンドウ メトリクスを計算します。前のインクリメンタル モデルを、前のメトリクスを上書きするように当てはめた新しいモデルで上書きします。loss
を呼び出して、データの入力チャンクの MAD を計算します。累積メトリクスおよびウィンドウ メトリクスでは、カスタム損失が各観測値の損失を返す必要がありますが、loss
ではチャンク全体での損失が必要です。絶対偏差の平均を計算します。fit
を呼び出して、データの入力チャンクにインクリメンタル モデルを当てはめます。累積、ウィンドウ、およびチャンクのメトリクスを保存して、インクリメンタル学習中にそれらがどのように進化するかを確認します。
% Preallocation numObsPerChunk = 50; nchunk = floor((n - initobs)/numObsPerChunk); mae = array2table(zeros(nchunk,3),VariableNames=["Cumulative","Window","Chunk"]); % Incremental fitting for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; Mdl = updateMetrics(Mdl,Xtrain(idx,:),ytrain(idx)); mae{j,1:2} = Mdl.Metrics{"MeanAbsoluteError",:}; mae{j,3} = loss(Mdl,Xtrain(idx,:),ytrain(idx),LossFun=@(x,y,w)mean(maefcn(x,y,w))); Mdl = fit(Mdl,Xtrain(idx,:),ytrain(idx)); end
Mdl
は、ストリーム内のすべてのデータで学習させた incrementalRegressionKernel
モデル オブジェクトです。インクリメンタル学習中およびモデルがウォームアップされた後、updateMetrics
は入力観測値でのモデルの性能をチェックし、関数 fit
はモデルをその観測値に当てはめます。
パフォーマンス メトリクスをプロットして、インクリメンタル学習中にそれらがどのように進化したかを確認します。
plot(mae.Variables) ylabel("Mean Absolute Deviation") xlabel("Iteration") xlim([0 nchunk]) xline(Mdl.EstimationPeriod/numObsPerChunk,"-.") xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,"--") legend(mae.Properties.VariableNames)
プロットは次のことを示しています。
updateMetrics
は、パフォーマンス メトリクスをメトリクスのウォームアップ期間後にのみ計算。updateMetrics
は、累積メトリクスを各反復中に計算。updateMetrics
は、ウィンドウ メトリクスを 500 個の観測値 (10 回の反復) の処理後に計算。Mdl
が観測値の予測のためにインクリメンタル学習の初めから構成されたため、loss
はデータの入力チャンクごとに MAD を計算できます。
入力引数
Mdl
— インクリメンタル学習モデル
incrementalClassificationKernel
モデル オブジェクト | incrementalRegressionKernel
モデル オブジェクト
インクリメンタル学習モデル。incrementalClassificationKernel
または incrementalRegressionKernel
というモデル オブジェクトとして指定します。Mdl
は、直接作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner
によって変換して作成することもできます。詳細については、対応するリファレンス ページを参照してください。
観測値のバッチでラベルを予測するように Mdl
を構成しなければなりません。
Mdl
が従来式の学習済みモデルから変換されたモデルの場合、いかなる修正も行うことなくラベルを予測できます。それ以外の場合、
fit
またはupdateMetricsAndFit
を使用してMdl
をデータに当てはめる必要があります。
X
— 予測子データのバッチ
浮動小数点行列
予測子データのバッチ。n 個の観測値と Mdl.NumPredictors
個の予測子変数で構成される浮動小数点行列として指定します。
観測値のラベル Y
の長さと X
の観測値の数は同じでなければなりません。Y(
は j
)X
内の観測値 j (行) のラベルです。
メモ
loss
は、浮動小数点の入力予測子データのみをサポートしています。入力データに categorical データが含まれている場合は、エンコード バージョンの categorical データを準備する必要があります。dummyvar
を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。
データ型: single
| double
Y
— 応答 (ラベル) のバッチ
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 浮動小数点ベクトル | 文字ベクトルの cell 配列
応答 (ラベル) のバッチ。分類問題については、categorical 配列、文字配列、string 配列、logical ベクトル、浮動小数点ベクトル、または文字ベクトルの cell 配列として指定します。回帰問題については、浮動小数点ベクトルとして指定します。
観測値のラベル Y
の長さと X
の観測値の数は同じでなければなりません。Y(
は j
)X
内の観測値 j (行) のラベルです。
分類問題では次のようになります。
loss
はバイナリ分類のみをサポートします。Y
がMdl.ClassNames
のメンバーではないラベルを含む場合、loss
はエラーを生成します。Y
とMdl.ClassNames
のデータ型は同じでなければなりません。
データ型: char
| string
| cell
| categorical
| logical
| single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: LossFun="epsiloninsensitive",Weights=W
は、イプシロン不感応損失を返し、観測値の重みをベクトル W
として指定します。
LossFun
— 損失関数
string ベクトル | 関数ハンドル | cell ベクトル | 構造体配列
損失関数。組み込みの損失関数名または関数ハンドルとして指定します。
分類問題: 次の表は、
Mdl
がincrementalClassificationKernel
モデルであるときに使用可能な損失関数の一覧です。対応する文字ベクトルまたは string スカラーを使用して、いずれかを指定します。名前 説明 "binodeviance"
二項分布からの逸脱度 "classiferror"
(既定の設定)10 進数の誤分類率 "exponential"
指数損失 "hinge"
ヒンジ損失 "logit"
ロジスティック損失 "quadratic"
二次損失 詳細については、分類損失を参照してください。
ロジスティック回帰学習器は事後確率を分類スコアとして返しますが、SVM 学習器はそうではありません (
predict
を参照)。カスタム損失関数を指定するには、関数ハンドル表記を使用します。関数は次の形式でなければなりません。
lossval = lossfcn(C,S,W)
出力引数
lossval
は n 行 1 列の浮動小数点ベクトルです。lossval(
は観測値j
)
の分類損失です。j
関数名 (
) を指定します。lossfcn
C
は n 行 2 列の logical 行列であり、対応する観測値が属するクラスを各行が示します。列の順序はClassNames
プロパティのクラスの順序に対応します。C
を作成するには、指定されたデータの各観測値について観測値
がクラスp
に属する場合にq
C(
=p
,q
)1
を設定します。行
の他の要素をp
0
に設定します。S
は、予測分類スコアの n 行 2 列の数値行列です。S
はpredict
の出力score
に似ています。ここで、行はデータの観測値に対応し、列の順序はClassNames
プロパティのクラスの順序に対応しています。S(
は、クラスp
,q
)
に分類されている観測値q
の分類スコアです。p
W
は、観測値の重みの n 行 1 列の数値ベクトルです。
回帰問題: 次の表は、
Mdl
がincrementalRegressionKernel
モデルであるときに使用可能な損失関数の一覧です。対応する文字ベクトルまたは string スカラーを使用して、いずれかを指定します。名前 説明 メトリクスをサポートする学習器 "epsiloninsensitive"
イプシロン不感応損失 'svm'
"mse"
(既定の設定)重み付けされた平均二乗誤差 'svm'
および'leastsquares'
詳細については、回帰損失を参照してください。
カスタム損失関数を指定するには、関数ハンドル表記を使用します。関数は次の形式でなければなりません。
lossval = lossfcn(Y,YFit,W)
出力引数
lossval
は浮動小数点スカラーです。関数名 (
) を指定します。lossfcn
Y
は、観測応答の長さ n の数値ベクトルです。YFit
は、対応する予測応答の長さ n の数値ベクトルです。W
は、観測値の重みの n 行 1 列の数値ベクトルです。
例: LossFun="mse"
例: LossFun=@
lossfcn
データ型: char
| string
| function_handle
Weights
— 観測値の重みのバッチ
正の値の浮動小数点ベクトル
観測値の重みのバッチ。正の値の浮動小数点ベクトルとして指定します。loss
は、Weights
内の対応する値を使用して入力データ内の観測値に重みを付けます。Weights
のサイズは入力データ内の観測値の数 n と同じでなければなりません。
既定では Weights
は ones(
です。n
,1)
詳細については、観測値の重みを参照してください。
例: Weights=W
は、観測値の重みをベクトル W
として指定します。
データ型: double
| single
詳細
分類損失
"分類損失" 関数は分類モデルの予測誤差を評価します。複数のモデルで同じタイプの損失を比較した場合、損失が低い方が予測モデルとして優れていることになります。
以下のシナリオを考えます。
L は加重平均分類損失です。
n は標本サイズです。
yj は観測されたクラス ラベルです。陰性クラスを示す -1 または陽性クラスを示す 1 (あるいは、
ClassNames
プロパティの最初のクラスを示す -1 または 2 番目のクラスを示す 1) を使用して符号化されます。f(Xj) は予測子データ X の観測値 (行) j に対する陽性クラスの分類スコアです。
mj = yjf(Xj) は、yj に対応するクラスに観測値 j を分類する分類スコアです。正の値の mj は正しい分類を示しており、平均損失に対する寄与は大きくありません。負の値の mj は正しくない分類を示しており、平均損失に大きく寄与します。
観測値 j の重みは wj です。
この状況では、名前と値の引数 LossFun
を使用して指定できる、サポートされる損失関数は次の表のようになります。
損失関数 | LossFun の値 | 式 |
---|---|---|
二項分布からの逸脱度 | "binodeviance" | |
指数損失 | "exponential" | |
10 進数の誤分類率 | "classiferror" | ここで、 はスコアが最大であるクラスに対応するクラス ラベル、I{·} はインジケーター関数です。 |
ヒンジ損失 | "hinge" | |
ロジット損失 | "logit" | |
二次損失 | "quadratic" |
関数 loss
で加重平均損失を計算する際、スコアが NaN
の観測値は省略されません。そのため、予測子データ X
に欠損値があり、名前と値の引数 LossFun
が "classiferror"
として指定されていない場合に、loss
で NaN
が返されることがあります。ほとんどの場合、データ セットに予測子の欠損がなければ、関数 loss
で NaN
が返されることはありません。
次の図では、1 つの観測値のスコア m に対する損失関数を比較しています。いくつかの関数は、点 (0,1) を通過するように正規化されています。
回帰損失
"回帰損失" 関数は、回帰モデルの予測誤差を評価します。複数のモデルで同じタイプの損失を比較した場合、損失が低い方が予測モデルとして優れていることになります。
以下のシナリオを考えます。
L は加重平均分類損失です。
n は標本サイズです。
yj は、観測値 j の観測された応答です。
f(Xj) は、予測子データ X の観測値 j の予測値です。
観測値 j の重みは wj です。
この状況では、名前と値の引数 LossFun
を使用して指定できる、サポートされる損失関数は次の表のようになります。
損失関数 | LossFun の値 | 式 |
---|---|---|
イプシロン不感応損失 | "epsiloninsensitive" | |
平均二乗誤差 | "mse" |
関数 loss
で加重平均損失を計算する際、予測が NaN
の観測値は省略されません。そのため、予測子データ X
に欠損値がある場合に loss
で NaN
が返されることがあります。ほとんどの場合、データ セットに予測子の欠損がなければ、関数 loss
で NaN
が返されることはありません。
アルゴリズム
観測値の重み
分類問題では、クラスの事前確率分布が既知の場合 (つまり、事前分布が経験的分布でない場合)、loss
は、観測値の重みを正規化して、それぞれのクラスの事前クラス確率の合計になるようにします。このアクションは、観測値の重みが既定でそれぞれのクラスの事前確率であることを前提としています。
回帰問題の場合、またはクラスの事前確率分布が経験的分布の場合、ソフトウェアは、loss
が呼び出されるたびに、指定された観測値の重みを正規化して、合計が 1 になるようにします。
バージョン履歴
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)