updateMetrics
説明
は、インクリメンタル ドリフト認識学習モデル Mdl
= updateMetrics(Mdl
,X
,Y
)Mdl
を返します。これは、入力予測子と応答データ (それぞれ X
と Y
) のモデル パフォーマンス メトリクスを含むように変更された入力インクリメンタル ドリフト認識学習モデル Mdl
です。
入力モデルが "ウォーム" (Mdl.IsWarm
が true
) の場合、updateMetrics
は以前に計算されたメトリクスを上書きし、Metrics
プロパティに新しい値を保存します。それ以外の場合、updateMetrics
は代わりに Metrics
に NaN
値を保存します。
入力モデルと出力モデルのデータ型は同じです。
は、1 つ以上の名前と値の引数によって指定された追加オプションを使用します。たとえば、予測子データ行列の列が観測値に対応するように指定したり、観測値の重みを設定したりできます。Mdl
= updateMetrics(Mdl
,X
,Y
,Name=Value
)
例
インクリメンタル学習中のパフォーマンス メトリクスの計算と可視化
HelperSineGenerator
を使用してランダムな概念データを作成し、HelperConceptDriftGenerator
を使用して概念ドリフト発生器を作成します。
concept1 = HelperSineGenerator("ClassificationFunction",1,"IrrelevantFeatures",true,"TableOutput",false); concept2 = HelperSineGenerator("ClassificationFunction",3,"IrrelevantFeatures",true,"TableOutput",false); driftGenerator = HelperConceptDriftGenerator(concept1,concept2,15000,1000);
ClassificationFunction
が 1 の場合、HelperSineGenerator
は "x1" < "sin(x2)" を満たすすべての点に 1 のラベルを付け、それ以外に 0 のラベルを付けます。ClassificationFunction
が 3 の場合はその逆になります。つまり、HelperSineGenerator
は、"x1" >= "sin(x2)" を満たすすべての点に 1 のラベルを付け、それ以外に 0 のラベルを付けます。
HelperConceptDriftGenerator
は、概念ドリフトを確立します。このオブジェクトでは、シグモイド関数 1./(1+exp(-4*(numobservations-position)./width))
を使用して、データ生成時に 1 つ目のストリームが選択される確率を判定します [1]。この例では、位置の引数が 15000 で、幅の引数が 1000 です。観測値の数が位置の値から幅の半分を引いた値を超えると、データ生成時に 1 つ目のストリームから抽出される確率が低下します。このシグモイド関数により、一方のストリームからもう一方への滑らかな遷移が実現します。幅の値が大きいほど、両方のストリームがほぼ等しい確率で選択される遷移期間が大きいことを示します。
インクリメンタル ドリフト認識モデルを次のように開始します。
バイナリ分類用のインクリメンタル単純ベイズ分類モデルを作成します。
移動平均による Hoeffding 境界のドリフト検出法 (HDDMA) を使用するインクリメンタルな概念ドリフト検出器を開始します。
インクリメンタル線形モデルと概念ドリフト検出器を使用して、インクリメンタル ドリフト認識モデルをインスタンス化します。学習期間を 5000 個の観測値として指定します。
BaseLearner = incrementalClassificationLinear(Solver="sgd"); dd = incrementalConceptDriftDetector("hddma"); idaMdl = incrementalDriftAwareLearner(BaseLearner,DriftDetector=dd,TrainingPeriod=5000);
データ ストリームの作成用に各チャンクの変数の数と反復回数を事前に割り当てます。
numObsPerChunk = 10; numIterations = 4000;
ドリフト ステータスとドリフト時間を追跡する変数、および分類誤差を格納する変数を事前に割り当てます。
dstatus = zeros(numIterations,1); statusname = strings(numIterations,1); ce = array2table(zeros(numIterations,2),VariableNames=["Cumulative" "Window"]); driftTimes = [];
それぞれ 10 個の観測値の入力チャンクを使用してデータ ストリームをシミュレートし、インクリメンタル ドリフト認識学習を実行します。各反復で次を行います。
予測子データとラベルをシミュレートし、補助関数
hgenerate
を使用してドリフト発生器を更新します。updateMetrics
を呼び出して、累積性能および観測値ウィンドウ内での性能を測定します。前のインクリメンタル モデルを新しいモデルで上書きして、パフォーマンス メトリクスを追跡します。fit
を呼び出して、モデルを入力チャンクに当てはめます。前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。可視化のためにドリフト ステータスと分類誤差を追跡して記録します。
rng(12); % For reproducibility for j = 1:numIterations % Generate data [driftGenerator,X,Y] = hgenerate(driftGenerator,numObsPerChunk); % Update performance metrics and fit the model idaMdl = updateMetrics(idaMdl,X,Y); idaMdl = fit(idaMdl,X,Y); % Record drift status and classification error statusname(j) = string(idaMdl.DriftStatus); ce{j,:} = idaMdl.Metrics{"ClassificationError",:}; if idaMdl.DriftDetected dstatus(j) = 2; driftTimes(end+1) = j; elseif idaMdl.WarningDetected dstatus(j) = 1; else dstatus(j) = 0; end end
累積とウィンドウごとの分類誤差をプロットします。ウォームアップ期間と学習期間、およびドリフトが発生した時点をマークします。
h = plot(ce.Variables); xlim([0 numIterations]) ylim([0 0.08]) ylabel("Classification Error") xlabel("Iteration") xline((idaMdl.BaseLearner.EstimationPeriod+idaMdl.MetricsWarmupPeriod)/numObsPerChunk,"g-.","Estimation + Warmup Period",LineWidth=1.5) xline((idaMdl.MetricsWarmupPeriod+idaMdl.BaseLearner.EstimationPeriod)/numObsPerChunk+driftTimes,"g-.","Estimation Period + Warmup Period",LineWidth=1.5) xline(driftTimes,"m--","Drift",LabelVerticalAlignment="middle",LineWidth=1.5) legend(h,ce.Properties.VariableNames) legend(h,Location="best")
プロットは次のことを示しています。
updateMetrics
は、パフォーマンス メトリクスを推定とメトリクスのウォームアップ期間の後にのみ計算。updateMetrics
は、累積メトリクスを各反復中に計算。updateMetrics
は、ウィンドウ メトリクスを既定のメトリクス ウィンドウ サイズ (200) の観測値を処理した後に計算。ドリフト検出後、関数
updateMetrics
は、idaMdl.BaseLearner.EstimationPeriod+idaMdl.MetricsWarmupPeriod
の観測値を待ってからモデルのパフォーマンス メトリクスの更新を再開。
ドリフト ステータスと反復回数の関係をプロットします。
gscatter(1:numIterations,dstatus,statusname,'gmr','o',4,'on',"Iteration","Drift Status","Filled")
入力引数
Mdl
— インクリメンタル ドリフト認識学習モデル
incrementalDriftAwareLearner
モデル オブジェクト
ストリーミング データに当てはめるインクリメンタル ドリフト認識学習モデル。incrementalDriftAwareLearner
モデル オブジェクトとして指定します。Mdl
は関数 incrementalDriftAwareLearner
を使用して作成できます。詳細については、オブジェクトのリファレンス ページを参照してください。
X
— 予測子データのチャンク
浮動小数点行列
モデルが当てはめられる予測子データ チャンク。n 個の観測値と Mdl.BaseLearner.NumPredictors
個の予測子変数で構成される浮動小数点行列として指定します。
Mdl.BaseLearner
が名前と値の引数 ObservationsIn
を受け入れる場合、ObservationsIn
の値で変数と観測値の方向が決まります。ObservationsIn
の既定値は "rows"
であり、予測子データの観測値が X
の行に沿うことを示しています。
観測値の応答 (またはラベル) Y
の長さと X
の観測値の数は同じでなければなりません。Y(
は j
)X
内の観測値 j (行または列) の応答 (またはラベル) です。
メモ
Mdl.BaseLearner.NumPredictors
= 0 の場合、updateMetrics
はX
から予測子の数を推測し、出力モデルの対応するプロパティを設定します。それ以外の場合、ストリーミング データ内の予測子変数の数がMdl.BaseLearner.NumPredictors
から変化すると、updateMetrics
がエラーを生成します。updateMetrics
は、浮動小数点の入力予測子データのみをサポートしています。入力データに categorical データが含まれている場合は、エンコード バージョンの categorical データを準備する必要があります。dummyvar
を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。
データ型: single
| double
Y
— 観測された応答 (またはラベル) のチャンク
浮動小数点ベクトル | categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 文字ベクトルの cell 配列
モデルを当てはめる応答 (またはラベル) のチャンク。次のいずれかとして指定します。
回帰モデルの場合、n 要素の浮動小数点ベクトル。ここで、n は
X
の行数です。分類モデルの場合、categorical 配列、文字配列、string 配列、logical ベクトル、または文字ベクトルの cell 配列。
Y
が文字配列の場合、各行に 1 つのクラス ラベルを含めなければなりません。それ以外の場合、Y
は n 要素のベクトルでなければなりません。
Y
の長さと X
の観測値の数は同じでなければなりません。Y(
は j
)X
内の観測値 j (行または列) の応答 (またはラベル) です。
分類問題では次のようになります。
Mdl.BaseLearner.ClassNames
が空以外の場合は、次の条件が適用されます。Y
がMdl.BaseLearner.ClassNames
のメンバーではないラベルを含む場合、updateMetrics
はエラーを生成します。Y
とMdl.BaseLearner.ClassNames
のデータ型は同じでなければなりません。
Mdl.BaseLearner.ClassNames
が空の場合は、updateMetrics
がデータからMdl.BaseLearner.ClassNames
を推定します。
データ型: single
| double
| categorical
| char
| string
| logical
| cell
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: ObservationsIn="columns",Weights=W
は、予測子行列の列が観測値に対応すること、およびインクリメンタル学習中に適用する観測値の重みがベクトル W
に格納されていることを指定します。
ObservationsIn
— 予測子データにおける観測値の次元
'rows'
(既定値) | 'columns'
予測子データにおける観測値の次元。'ObservationsIn'
と 'columns'
または 'rows'
から構成されるコンマ区切りのペアとして指定します。
updateMetrics
は、Mdl.BaseLearner
が名前と値の引数 ObservationsIn
をサポートする場合にのみ ObservationsIn
をサポートします。
データ型: char
| string
Weights
— 観測値の重みのチャンク
正の値の浮動小数点ベクトル
観測値の重みのチャンク。正の値の浮動小数点ベクトルとして指定します。updateMetrics
は、Weights
内の対応する値を使用して X
内の観測値に重みを付けます。Weights
のサイズは X
内の観測値の数 n と同じでなければなりません。
既定では Weights
は ones(
です。n
,1)
例: Weights=w
データ型: double
| single
出力引数
Mdl
— 更新されたインクリメンタル ドリフト認識学習モデル
incrementalDriftAwareLearner
モデル オブジェクト
更新されたインクリメンタル ドリフト認識学習モデル。入力モデル Mdl
と同じデータ型のインクリメンタル学習モデル オブジェクト incrementalDriftAwareLearner
として返されます。
モデルがウォームでない場合、updateMetrics
はパフォーマンス メトリクスを計算しません。その結果、Mdl
の Metrics
プロパティは、NaN
値で構成された状態を完全に維持します。モデルがウォームの場合、updateMetrics
は、新しいデータ X
と Y
における累積およびウィンドウのパフォーマンス メトリクスを計算し、Mdl.Metrics
の対応する要素を上書きします。入力モデル Mdl
の他のプロパティは、すべて出力モデル Mdl
に引き継がれます。詳細については、パフォーマンス メトリクスを参照してください。
アルゴリズム
パフォーマンス メトリクス
関数
updateMetrics
およびupdateMetricsAndFit
は、インクリメンタル モデルが "ウォーム" (Mdl.BaseLearner.IsWarm
プロパティ) のときに、新しいデータからモデルのパフォーマンス メトリクス (Metrics
) を追跡します。インクリメンタル モデルは、fit
またはupdateMetricsAndFit
がインクリメンタル モデルをMetricsWarmupPeriod
個の観測値 ("メトリクスのウォームアップ期間") に当てはめた後、ウォームになります。Mdl.BaseLearner.EstimationPeriod
> 0 の場合、関数はモデルをデータに当てはめる前にハイパーパラメーターを推定します。そのため、関数は、モデルがメトリクスのウォームアップ期間を開始する前にEstimationPeriod
個の観測値を追加で処理しなければなりません。インクリメンタル モデルの
Metrics
プロパティは、各パフォーマンス メトリクスの 2 つの形式を table の変数 (列)Cumulative
およびWindow
とし、個々のメトリクスを行に格納します。インクリメンタル モデルがウォームになると、updateMetrics
およびupdateMetricsAndFit
は次の頻度でメトリクスを更新します。Cumulative
— 関数は、モデルの性能追跡の開始以降の累積メトリクスを計算します。関数は、モデルがリセットされるまで、関数が呼び出されるたびにメトリクスを更新し、提供されたデータ セット全体に基づいて計算を行います。Window
— 関数は、名前と値の引数MetricsWindowSize
によって決定されたウィンドウ内のすべての観測値に基づいてメトリクスを計算します。MetricsWindowSize
によってソフトウェアがWindow
メトリクスを更新する頻度も決まります。たとえば、MetricsWindowSize
が 20 の場合、関数は提供されたデータの最後の 20 個の観測値に基づいてメトリクスを計算します (X((end – 20 + 1):end,:)
およびY((end – 20 + 1):end)
)。ウィンドウ内のパフォーマンス メトリクスを追跡するインクリメンタル関数は、次のプロセスを使用します。
指定された各メトリクスについて
MetricsWindowSize
の量の値を格納し、同じ量の観測値の重みを格納します。入力観測値のバッチに基づくモデル性能をメトリクス値の要素に入力し、対応する観測値の重みを格納します。
観測値のウィンドウがいっぱいになると、
Mdl.Metrics.Window
をメトリクス ウィンドウの性能の加重平均で上書きします。関数が観測値のバッチを処理するときにウィンドウがあふれる場合、最新の入力観測値MetricsWindowSize
が格納され、最も古い観測値がウィンドウから削除されます。たとえば、MetricsWindowSize
が 20 で、前に処理されたバッチからの 10 個の値が格納されていて、15 個の値が入力されるとします。長さ 20 のウィンドウを構成するため、関数は 15 個の入力観測値からの測定値と前のバッチからの最新の 5 個の測定値を使用します。
Cumulative
とWindow
のパフォーマンス メトリクスの値を計算する際、予測 (分類の場合はスコア、回帰の場合は応答) がNaN
の観測値は省略されます。
観測値の重み
分類問題では、クラスの事前確率分布が既知の場合 (つまり、事前分布が経験的分布でない場合)、updateMetrics
は、観測値の重みを正規化して、それぞれのクラスの事前クラス確率の合計になるようにします。このアクションは、観測値の重みが既定でそれぞれのクラスの事前確率であることを前提としています。
回帰問題の場合、またはクラスの事前確率分布が経験的分布の場合、ソフトウェアは、updateMetrics
が呼び出されるたびに、指定された観測値の重みを正規化して、合計が 1 になるようにします。
バージョン履歴
R2022b で導入
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)