Main Content

perObservationLoss

インクリメンタル学習用モデルの観測値ごとの分類誤差

R2022a 以降

    説明

    Err = perObservationLoss(Mdl,X,Y) は、X の予測子と Y の真のラベルを使用して学習させたモデル Mdl の観測値ごとの分類誤差を返します。

    Err は n 行 1 列のベクトルで、n は観測値の数です。

    Err = perObservationLoss(Mdl,X,Y,Name=Value) は、1 つ以上の Name=Value の引数を使用して追加のオプションを指定します。

    すべて折りたたむ

    人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。

    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');

    MdlincrementalClassificationLinear モデルです。そのプロパティはすべて読み取り専用です。

    データ ストリームの作成用に各チャンクの変数の数を事前に割り当てて、パフォーマンス メトリクスを格納するための変数の数も割り当てます。

    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 個の観測値の入力チャンクを使用して、データ ストリームをシミュレートします。各反復で次を行います。

    1. updateMetricsAndFit を呼び出して、パフォーマンス メトリクスを更新し、モデルを入力データに当てはめます。前のインクリメンタル モデルを新しいモデルで上書きします。

    2. 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) になった後) にデータの各チャンクに含まれる観測値ごとの損失を計算します。PoLnchunknumObsPerChunk 列の行列で、この例では 481 行 50 列の行列に対応します。各行はストリーム内の観測値のチャンクに対応し、各列は対応するチャンク内の観測値に対応します。既定のウォームアップ期間は観測値 1000 個で、入力データ チャンク 20 個に対応します。したがって、PoL の最初の 20 行には NaN 値のみが含まれます。loss は、モデルがウォームかどうかに関係なく各データ チャンクの分類誤差の計算を開始するため、L には最初の 20 個についての損失の値も含まれます。

    入力引数

    すべて折りたたむ

    インクリメンタル学習モデル。incrementalClassificationKernelincrementalClassificationLinearincrementalClassificationECOC、または incrementalClassificationNaiveBayes のいずれかのモデル オブジェクトとして指定します。Mdl は、直接作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner によって変換して作成することもできます。詳細については、対応するリファレンス ページを参照してください。

    観測値ごとの損失を計算するための予測子データのチャンク。n 個の観測値および Mdl.NumPredictors 個の予測子変数の浮動小数点行列として指定します。名前と値の引数 ObservationsIn の値は、変数と観測値の方向を決定します。

    観測値のラベル Y の長さと X の観測値の数は同じでなければなりません。Y(j)X 内の観測値 j (行または列) のラベルです。

    メモ

    perObservationLoss は、浮動小数点の入力予測子データのみをサポートしています。入力データに categorical データが含まれている場合は、エンコード バージョンの categorical データを準備する必要があります。dummyvar を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。

    データ型: single | double

    観測値ごとの損失を計算するためのラベルのチャンク。categorical 配列、文字配列、string 配列、logical ベクトル、または文字ベクトルの cell 配列として指定します。

    観測値のラベル Y の長さと X の観測値の数は同じでなければなりません。Y(j)X 内の観測値 j (行または列) のラベルです。

    分類問題では次のようになります。

    • YMdl.ClassNames のメンバーではないラベルを含む場合、perObservationLoss はエラーを生成します。

    • YMdl.ClassNames のデータ型は同じでなければなりません。

    データ型: char | string | cell | categorical | logical

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    例: ObservationsIn="columns",LossFun="hinge" は、観測値が列単位であり、損失関数が組み込みのヒンジ損失であることを指定します。

    X 内のデータの方向。"rows" または "columns" を指定します。

    例: ObservationsIn="columns"

    損失関数。組み込みの損失関数名または関数ハンドルとして指定します。

    次の表は、組み込みの損失関数名の一覧です。

    名前説明
    "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 列の数値行列です。Spredict の出力 Score に似ています。ここで、行はデータの観測値に対応し、列の順序は ClassNames プロパティのクラスの順序に対応しています。S(p,q) は、クラス q に分類されている観測値 p の分類スコアです。

    例: LossFun="logit"

    例: LossFun=@lossfcn

    データ型: char | string | function_handle

    バージョン履歴

    R2022a で導入