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")

入力引数
ストリーミング データに当てはめるインクリメンタル ドリフト認識学習モデル。incrementalDriftAwareLearner モデル オブジェクトとして指定します。Mdl は関数 incrementalDriftAwareLearner を使用して作成できます。詳細については、オブジェクトのリファレンス ページを参照してください。
モデルが当てはめられる予測子データ チャンク。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
モデルを当てはめる応答 (またはラベル) のチャンク。次のいずれかとして指定します。
回帰モデルの場合、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' と 'columns' または 'rows' から構成されるコンマ区切りのペアとして指定します。
updateMetrics は、Mdl.BaseLearner が名前と値の引数 ObservationsIn をサポートする場合にのみ ObservationsIn をサポートします。
データ型: char | string
観測値の重みのチャンク。正の値の浮動小数点ベクトルとして指定します。updateMetrics は、Weights 内の対応する値を使用して X 内の観測値に重みを付けます。Weights のサイズは X 内の観測値の数 n と同じでなければなりません。
既定では Weights は ones( です。n,1)
例: Weights=w
データ型: double | single
出力引数
更新されたインクリメンタル ドリフト認識学習モデル。入力モデル 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 Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)