incrementalLearner
説明
は、従来式の学習済み単純ベイズ分類モデル IncrementalMdl
= incrementalLearner(Mdl
)Mdl
のハイパーパラメーターを使用して、インクリメンタル学習用の単純ベイズ分類モデル IncrementalMdl
を返します。プロパティ値は Mdl
から得られた知識を反映しているため、IncrementalMdl
は新しい観測値に対してラベルの予測を行うことができます。また "ウォーム" となるため、予測性能が追跡されます。
は、1 つ以上の名前と値の引数によって指定された追加オプションを使用します。一部のオプションでは、予測性能の追跡を行う前に IncrementalMdl
= incrementalLearner(Mdl
,Name,Value
)IncrementalMdl
に学習させる必要があります。たとえば、'MetricsWarmupPeriod',50,'MetricsWindowSize',100
は、50 個の観測値から成る、パフォーマンス メトリクスの追跡前のインクリメンタル学習の予備期間を指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。
例
従来式の学習済みモデルのインクリメンタル学習器への変換
fitcnb
を使用して単純ベイズ モデルに学習させ、それをインクリメンタル学習器に変換します。
データの読み込みと前処理
人の行動のデータ セットを読み込みます。
load humanactivity
データ セットの詳細については、コマンド ラインで Description
を入力してください。
単純ベイズ モデルの学習
単純ベイズ分類モデルをデータ セット全体に当てはめます。
TTMdl = fitcnb(feat,actid);
TTMdl
は従来式の学習済み単純ベイズ分類モデルを表す ClassificationNaiveBayes
モデル オブジェクトです。
学習済みモデルの変換
従来式の学習済み単純ベイズ分類モデルをインクリメンタル学習に適したモデルに変換します。
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationNaiveBayes IsWarm: 1 Metrics: [1x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: {1x60 cell} DistributionParameters: {5x60 cell}
IncrementalMdl
は、単純ベイズ分類を使用するインクリメンタル学習用に準備された incrementalClassificationNaiveBayes
モデル オブジェクトです。
関数
incrementalLearner
は、学習した条件付き予測子分布パラメーターを、TTMdl
が学習データから抽出する他の情報と共に渡して、インクリメンタル学習器を初期化します。IncrementalMdl
はウォーム (IsWarm
が1
) です。これは、インクリメンタル学習関数がパフォーマンス メトリクスの追跡と予測を実行できることを意味します。
応答予測
従来式の学習済みモデルから変換して作成したインクリメンタル学習器は、追加の処理なしで予測を生成できます。
両方のモデルを使用して、すべての観測値の分類スコア (クラス事後確率) を予測します。
[~,ttscores] = predict(TTMdl,feat); [~,ilcores] = predict(IncrementalMdl,feat); compareScores = norm(ttscores - ilcores)
compareScores = 0
モデルによって生成されたスコアの差は 0 です。
パフォーマンス メトリクス オプションの構成
学習済みの単純ベイズ モデルを使用して、インクリメンタル学習器を初期化します。メトリクスのウォームアップ期間を指定して、インクリメンタル学習器を準備します。その間、関数updateMetricsAndFit
はモデルの当てはめのみを行います。メトリクス ウィンドウ サイズを観測値 500 個に指定します。
人の行動のデータ セットを読み込みます。
load humanactivity
データ セットの詳細については、コマンド ラインで Description
を入力してください。
データをランダムに 2 分割します。最初の半分は従来式のモデルの学習用、残りの半分はインクリメンタル学習用です。
n = numel(actid); rng(1) % For reproducibility cvp = cvpartition(n,'Holdout',0.5); idxtt = training(cvp); idxil = test(cvp); % First half of data Xtt = feat(idxtt,:); Ytt = actid(idxtt); % Second half of data Xil = feat(idxil,:); Yil = actid(idxil);
データの最初の半分に単純ベイズ モデルを当てはめます。クラス 2 を誤分類した場合に分類器に 2 倍のペナルティを与えるものとします。
C = ones(5) - eye(5);
C(2,[1 3 4 5]) = 2;
TTMdl = fitcnb(Xtt,Ytt,'Cost',C);
従来式の学習済み単純ベイズ モデルをインクリメンタル学習用の単純ベイズ分類モデルに変換します。次を指定します。
メトリクスのウォームアップ期間は観測値 2000 個。
メトリクス ウィンドウ サイズは観測値 500 個。
分類誤差および最小コストを使用してモデルの性能を測定。
incrementalClassificationNaiveBayes
はこのメトリクスを常に追跡するため、Metrics
に"mincost"
を指定する必要はありません。
IncrementalMdl = incrementalLearner(TTMdl,'MetricsWarmupPeriod',2000,'MetricsWindowSize',500,... 'Metrics','classiferror');
関数 updateMetricsAndFit
を使用して、インクリメンタル モデルをデータの残りの半分に当てはめます。各反復で次を行います。
20 個の観測値を一度に処理して、データ ストリームをシミュレート。
前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書き。
1 番目のクラス内の 2 番目の予測子の平均 、累積メトリクス、およびウィンドウ メトリクスを保存し、インクリメンタル学習中にそれらがどのように進化するかを確認。
% Preallocation nil = numel(Yil); numObsPerChunk = 20; nchunk = ceil(nil/numObsPerChunk); ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); mc = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); mu12 = [IncrementalMdl.DistributionParameters{1,2}(1); zeros(nchunk,1)]; % Incremental fitting for j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1); iend = min(nil,numObsPerChunk*j); idx = ibegin:iend; IncrementalMdl = updateMetricsAndFit(IncrementalMdl,Xil(idx,:),Yil(idx)); ce{j,:} = IncrementalMdl.Metrics{"ClassificationError",:}; mc{j,:} = IncrementalMdl.Metrics{"MinimalCost",:}; mu12(j + 1) = IncrementalMdl.DistributionParameters{1,2}(1); end
IncrementalMdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationNaiveBayes
モデル オブジェクトです。インクリメンタル学習中およびモデルがウォームアップされた後、updateMetricsAndFit
は入力観測値でモデルの性能をチェックし、モデルをその観測値に当てはめます。
パフォーマンス メトリクスと が学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。
t = tiledlayout(3,1); nexttile plot(mu12) ylabel('\mu_{12}') xlim([0 nchunk]); xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); nexttile h = plot(ce.Variables); xlim([0 nchunk]); ylabel('Classification Error') xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); legend(h,ce.Properties.VariableNames,'Location','northwest') nexttile h = plot(mc.Variables); xlim([0 nchunk]); ylabel('Minimal Cost') xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); legend(h,mc.Properties.VariableNames,'Location','northwest') xlabel(t,'Iteration')
このプロットは、updateMetricsAndFit
が次のアクションを実行することを示しています。
をインクリメンタル学習のすべての反復で当てはめる。
パフォーマンス メトリクスをメトリクスのウォームアップ期間 (赤色の垂直な線) 後にのみ計算。
累積メトリクスを各反復中に計算。
ウィンドウ メトリクスを 500 個の観測値 (25 回の反復) の処理後に計算。
データは行動で順序付けされるため、平均とパフォーマンス メトリクスは定期的に急激に変動します。
入力引数
Mdl
— マルチクラス分類用の従来式の学習済み単純ベイズ モデル
ClassificationNaiveBayes
モデル オブジェクト
マルチクラス分類用の従来式の学習済み単純ベイズ モデル。fitcnb
によって返される ClassificationNaiveBayes
モデル オブジェクトとして指定します。Mdl.DistributionNames
に格納される各予測子変数の条件付き分布はカーネル分布にはできません。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'Metrics',["classiferror" "mincost"],'MetricsWindowSize',100
は、誤分類率と最小コストを追跡することを指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。
Metrics
— インクリメンタル学習中に追跡するモデルのパフォーマンス メトリクス
"mincost"
(既定値) | "classiferror"
| "hinge"
| "logit"
| string ベクトル | 関数ハンドル | 構造体配列 | ...
関数 updateMetrics
または updateMetricsAndFit
を使ってインクリメンタル学習中に追跡するモデルのパフォーマンス メトリクス。組み込みの損失関数の名前、名前の string ベクトル、関数ハンドル (@metricName
など)、関数ハンドルの構造体配列、または名前、関数ハンドル、構造体配列の cell ベクトルとして指定します。
次の表は、組み込みの損失関数名の一覧です。string ベクトルを使用して、複数指定できます。
名前 | 説明 |
---|---|
"binodeviance" | 二項分布からの逸脱度 |
"classiferror" | 分類誤差 |
"exponential" | 指数 |
"hinge" | ヒンジ |
"logit" | ロジスティック |
"mincost" | 最小予測誤分類コスト (事後確率である分類スコアの場合) |
"quadratic" | 2 次 |
組み込み損失関数の詳細については、loss
を参照してください。
例: 'Metrics',["classiferror" "mincost"]
パフォーマンス メトリクスを返すカスタム関数を指定するには、関数ハンドル表記を使用します。関数は次の形式でなければなりません。
metric = customMetric(C,S,Cost)
出力引数
metric
は n 行 1 列の数値ベクトルです。ここで、各要素は、学習サイクル中にインクリメンタル学習関数によって処理されたデータの対応する観測値の損失です。関数名 (ここでは
customMetric
) を選択します。C
は n 行 K 列の logical 行列であり、対応する観測値が属するクラスを各行が示します。K はクラスの数です。列の順序はClassNames
プロパティのクラスの順序に対応します。C
を作成するには、指定されたデータの各観測値について観測値
がクラスp
に属する場合にq
C(
=p
,q
)1
を設定します。行
の他の要素をp
0
に設定します。S
は、予測分類スコアの n 行 K 列の数値行列です。S
はpredict
の出力Score
に似ています。ここで、行はデータの観測値に対応し、列の順序はClassNames
プロパティのクラスの順序に対応しています。S(
は、クラスp
,q
)
に分類されている観測値q
の分類スコアです。p
Cost
は、誤分類コストの、K 行 K 列の数値行列です。名前と値の引数'Cost'
を参照してください。
複数のカスタム メトリクスを指定し、それぞれにカスタム名を割り当てるには、構造体配列を使用します。組み込みメトリクスとカスタム メトリクスの組み合わせを指定するには、cell ベクトルを使用します。
例: 'Metrics',struct('Metric1',@customMetric1,'Metric2',@customMetric2)
例: 'Metrics',{@customMetric1 @customMetric2 'logit' struct('Metric3',@customMetric3)}
updateMetrics
および updateMetricsAndFit
は、table で指定したメトリクスをプロパティ IncrementalMdl.Metrics
に保存します。Metrics
のデータ型によって、table の行名が決まります。
'Metrics' 値のデータ型 | Metrics プロパティの行名の説明 | 例 |
---|---|---|
string または文字ベクトル | 対応する組み込みメトリクスの名前 | "classiferror" の行名は "ClassificationError" |
構造体配列 | フィールド名 | struct('Metric1',@customMetric1) の行名は "Metric1" |
プログラム ファイルに格納されている関数への関数ハンドル | 関数名 | @customMetric の行名は "customMetric" |
無名関数 | CustomMetric_ 。ここで、 は Metrics のメトリクス
| @(C,S,Cost)customMetric(C,S,Cost)... の行名は CustomMetric_1 |
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
データ型: char
| string
| struct
| cell
| function_handle
MetricsWarmupPeriod
— パフォーマンス メトリクスを追跡する前に当てはめる観測値の数
0
(既定値) | 非負の整数
インクリメンタル モデルが Metrics
プロパティのパフォーマンス メトリクスを追跡する前に当てはめなければならない観測値の数。非負の整数として指定します。インクリメンタル モデルは、インクリメンタル近似関数が MetricsWarmupPeriod
個の観測値をインクリメンタル モデルに当てはめた後、ウォームになります。
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
例: 'MetricsWarmupPeriod',50
データ型: single
| double
MetricsWindowSize
— ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数
200
(既定値) | 正の整数
ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数。正の整数として指定します。
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
例: 'MetricsWindowSize',100
データ型: single
| double
出力引数
IncrementalMdl
— インクリメンタル学習用の単純ベイズ分類
incrementalClassificationNaiveBayes
モデル オブジェクト
インクリメンタル学習用の単純ベイズ分類モデル。incrementalClassificationNaiveBayes
モデル オブジェクトとして返されます。IncrementalMdl
は新しいデータに基づいて予測を生成するようにも構成されます (predict
を参照)。
incrementalLearner
は、Mdl
のモデル情報を使用して IncrementalMdl
をインクリメンタル学習用に初期化します。次の表は、incrementalLearner
が IncrementalMdl
の対応するプロパティに渡す Mdl
のプロパティを示したものです。関数では、これらのほかに、Y
(クラス ラベル) や W
(観測値の重み) など、IncrementalMdl
を初期化するために必要なモデル プロパティも使用します。
プロパティ | 説明 |
---|---|
CategoricalLevels | 多変量多項予測子のレベル。 |
CategoricalPredictors | カテゴリカル予測子のインデックス。正の整数のベクトル |
ClassNames | バイナリ分類のクラス ラベル。名前のリスト |
Cost | 誤分類コスト。数値行列 |
DistributionNames | 予測子変数の条件付き分布の名前。各セルに 'normal' または 'mvmn' を含む cell 配列か、もしくは値 'mn' |
DistributionParameters | 予測子変数の条件付き分布のパラメーター値。長さ 2 の数値ベクトルの cell 配列 (詳細については DistributionParameters を参照) |
NumPredictors | 予測子の数。正の整数 |
Prior | 前のクラス ラベルの分布。数値ベクトル |
ScoreTransform | スコア変換関数。関数名または関数ハンドル |
詳細
インクリメンタル学習
"インクリメンタル学習" ("オンライン学習") は、予測子変数の分布、予測関数や目的関数の素性 (調整パラメーターの値を含む)、観測値にラベル付けがされているか等についてほぼ知識が無い時に、データ ストリームから入ってくるデータを処理することに関係している機械学習の一分野です。従来の機械学習は、モデルへの当てはめに十分にラベル付けされたデータを使用でき、交差検証を実施してハイパーパラメーターを調整し、予測子の分布を推論するもので、インクリメンタル学習と異なります。
入力観測値に対し、インクリメンタル学習モデルは、次のいずれかの方法 (通常はこの順序) でデータを処理します。
ラベルの予測。
予測性能の測定。
モデルの構造的な破綻やドリフトについてのチェック。
入力観測値へのモデルの当てはめ。
詳細については、インクリメンタル学習の概要を参照してください。
アルゴリズム
パフォーマンス メトリクス
関数
updateMetrics
およびupdateMetricsAndFit
は、インクリメンタル モデルが "ウォーム" (IsWarm
プロパティがtrue
) のときにのみ、新しいデータからモデルのパフォーマンス メトリクス (Metrics
) を追跡します。incrementalLearner
を使用してインクリメンタル モデルを作成するときに、MetricsWarmupPeriod
が 0 (incrementalLearner
の既定値) である場合、モデルは作成時にウォームになります。それ以外の場合、インクリメンタル モデルは、
fit
またはupdateMetricsAndFit
で次の両方のアクションを実行するとウォームになります。インクリメンタル モデルを
MetricsWarmupPeriod
の観測値 ("メトリクスのウォームアップ期間") に当てはめる。インクリメンタル モデルを予測されるすべてのクラスに当てはめる (
incrementalClassificationNaiveBayes
の引数MaxNumClasses
とClassNames
を参照)。
インクリメンタル モデルの
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
の観測値は省略されます。
バージョン履歴
R2021a で導入
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)