perObservationLoss
説明
例
インクリメンタル分類モデルの観測値ごとの損失の計算
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
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;
バイナリ分類用のインクリメンタル線形 SVM モデルを作成します。クラス名、事前クラス分布 (一様)、および任意の係数とバイアス値を指定して損失用にモデルを構成します。メトリクス ウィンドウ サイズを観測値 1000 個に指定します。
p = size(X,2); Beta = randn(p,1); Bias = randn(1); Mdl = incrementalClassificationLinear('Beta',Beta,'Bias',Bias,... 'ClassNames',unique(Y),'Prior','uniform','MetricsWindowSize',1000,'Metrics','classiferror');
Mdl
は incrementalClassificationLinear
モデルです。そのプロパティはすべて読み取り専用です。
データ ストリームの作成用に各チャンクの変数の数を事前に割り当てて、パフォーマンス メトリクスを格納するための変数の数も割り当てます。
numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); L = zeros(nchunk,1); % To store loss values PoL = zeros(nchunk,50); % To store per observation loss values
それぞれ 50 個の観測値の入力チャンクを使用して、データ ストリームをシミュレートします。各反復で次を行います。
updateMetricsAndFit
を呼び出して、パフォーマンス メトリクスを更新し、モデルを入力データに当てはめます。前のインクリメンタル モデルを新しいモデルで上書きします。loss
を呼び出して入力データでのモデルの性能を測定し、perObservationLoss
を呼び出してデータのチャンクに含まれる観測値ごとの分類誤差を計算し、パフォーマンス メトリクスを格納します。
for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = updateMetricsAndFit(Mdl,X(idx,:),Y(idx)); L(j) = loss(Mdl,X(idx,:),Y(idx)); PoL(j,:) = perObservationLoss(Mdl,X(idx,:),Y(idx)); end
PerObservationLoss
は、ウォーム アップ期間後 (IsWarm
プロパティが 1 (または true
) になった後) にデータの各チャンクに含まれる観測値ごとの損失を計算します。PoL
は nchunk
行 numObsPerChunk
列の行列で、この例では 481 行 50 列の行列に対応します。各行はストリーム内の観測値のチャンクに対応し、各列は対応するチャンク内の観測値に対応します。既定のウォームアップ期間は観測値 1000 個で、入力データ チャンク 20 個に対応します。したがって、PoL
の最初の 20 行には NaN
値のみが含まれます。loss
は、モデルがウォームかどうかに関係なく各データ チャンクの分類誤差の計算を開始するため、L
には最初の 20 個についての損失の値も含まれます。
入力引数
Mdl
— インクリメンタル学習モデル
incrementalClassificationKernel
モデル オブジェクト | incrementalClassificationLinear
モデル オブジェクト | incrementalClassificationECOC
モデル オブジェクト | incrementalClassificationNaiveBayes
モデル オブジェクト
インクリメンタル学習モデル。incrementalClassificationKernel
、incrementalClassificationLinear
、incrementalClassificationECOC
、または incrementalClassificationNaiveBayes
のいずれかのモデル オブジェクトとして指定します。Mdl
は、直接作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner
によって変換して作成することもできます。詳細については、対応するリファレンス ページを参照してください。
X
— 予測子データのチャンク
浮動小数点行列
観測値ごとの損失を計算するための予測子データのチャンク。n 個の観測値および Mdl.NumPredictors
個の予測子変数の浮動小数点行列として指定します。名前と値の引数 ObservationsIn
の値は、変数と観測値の方向を決定します。
観測値のラベル Y
の長さと X
の観測値の数は同じでなければなりません。Y(
は j
)X
内の観測値 j (行または列) のラベルです。
メモ
perObservationLoss
は、浮動小数点の入力予測子データのみをサポートしています。入力データに categorical データが含まれている場合は、エンコード バージョンの categorical データを準備する必要があります。dummyvar
を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。
データ型: single
| double
Y
— ラベルのチャンク
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 文字ベクトルの cell 配列
観測値ごとの損失を計算するためのラベルのチャンク。categorical 配列、文字配列、string 配列、logical ベクトル、または文字ベクトルの cell 配列として指定します。
観測値のラベル Y
の長さと X
の観測値の数は同じでなければなりません。Y(
は j
)X
内の観測値 j (行または列) のラベルです。
分類問題では次のようになります。
Y
がMdl.ClassNames
のメンバーではないラベルを含む場合、perObservationLoss
はエラーを生成します。Y
とMdl.ClassNames
のデータ型は同じでなければなりません。
データ型: char
| string
| cell
| categorical
| logical
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: ObservationsIn="columns",LossFun="hinge"
は、観測値が列単位であり、損失関数が組み込みのヒンジ損失であることを指定します。
ObservationsIn
— X
内のデータの方向
"rows"
(既定値) | "columns"
X
内のデータの方向。"rows"
または "columns"
を指定します。
例: ObservationsIn="columns"
LossFun
— 損失関数
"classiferror"
| "binodeviance"
| "exponential"
| "hinge"
| "logit"
| "quadratic"
| "mincost"
| 関数ハンドル
損失関数。組み込みの損失関数名または関数ハンドルとして指定します。
次の表は、組み込みの損失関数名の一覧です。
名前 | 説明 |
---|---|
"binodeviance" | 二項分布からの逸脱度 |
"classiferror" | 誤分類誤差率 |
"exponential" | 指数 |
"hinge" | ヒンジ |
"logit" | ロジスティック |
"quadratic" | 2 次 |
"mincost" | 最小予測誤分類コスト (incrementalClassificationNaiveBayes のみ) |
既定値は、incrementalClassificationNaiveBayes
モデル オブジェクトの場合は "mincost"
、その他のオブジェクトの場合は "classiferror"
です。
メモ
incrementalClassificationECOC
には "classiferror"
のみを指定できます。
カスタム損失関数を指定するには、関数ハンドル表記を使用します。関数は次の形式でなければなりません。
lossval = lossfcn(C,S)
出力引数
lossval
は n 行 1 列の浮動小数点ベクトルです。n はX
内の観測値の個数です。lossval(
の値は観測値j
)
の分類損失です。j
関数名 (
) を指定します。lossfcn
C
は n 行 K 列の logical 行列であり、対応する観測値が属するクラスを各行が示します。K
は異なるクラスの個数 (numel(Mdl.ClassNames)
) で、列の順序はClassNames
プロパティのクラスの順序に対応します。C
を作成するには、指定されたデータの各観測値について観測値
がクラスp
に属する場合にq
C(
=p
,q
)1
を設定します。行
の他の要素をp
0
に設定します。S
は、予測分類スコアの n 行 K 列の数値行列です。S
はpredict
の出力Score
に似ています。ここで、行はデータの観測値に対応し、列の順序はClassNames
プロパティのクラスの順序に対応しています。S(
は、クラスp
,q
)
に分類されている観測値q
の分類スコアです。p
例: LossFun="logit"
例: LossFun=@
lossfcn
データ型: char
| string
| function_handle
バージョン履歴
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)