fit
説明
関数 fit は、構成されたインクリメンタル学習用の誤り訂正出力符号 (ECOC) 分類モデル (incrementalClassificationECOC オブジェクト) をストリーミング データに当てはめます。到達したデータを使用して追加的にパフォーマンス メトリクスを追跡するには、代わりに updateMetricsAndFit を使用します。
ECOC 分類モデルを一度にデータのバッチ全体に当てはめるか交差検証するには、fitcecoc を参照してください。
例
データに含まれるクラスの想定される最大数のみがわかっている場合にインクリメンタル ECOC 学習器を当てはめます。
インクリメンタル ECOC モデルを作成します。予測される最大クラス数を 5 と指定します。
Mdl = incrementalClassificationECOC(MaxNumClasses=5)
Mdl =
incrementalClassificationECOC
IsWarm: 0
Metrics: [1×2 table]
ClassNames: [1×0 double]
ScoreTransform: 'none'
BinaryLearners: {10×1 cell}
CodingName: 'onevsone'
Decoding: 'lossweighted'
Properties, Methods
Mdl は incrementalClassificationECOC モデルです。そのプロパティはすべて読み取り専用です。Mdl が処理できる一意のクラスは最大 5 つです。既定では、事前クラス分布 Mdl.Prior は経験的であり、ラベルが見つかると事前分布が更新されます。
Mdl は、他の演算の実行に使用する前に、データに当てはめなければなりません。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description を入力してください。
関数 fit を使用してインクリメンタル モデルを学習データに当てはめます。50 個の観測値で構成されるチャンクを一度に当てはめます。各反復で次を行います。
50 個の観測値を処理して、データ ストリームをシミュレート。
前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。
1 番目のバイナリ学習器 の 1 番目のモデル係数と被験者が移動しているかどうか (
Y> 2) の事前確率を保存し、インクリメンタル学習中にそれらのパラメーターがどのように進化するかを確認。
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); beta11 = zeros(nchunk,1); priormoved = zeros(nchunk,1); % Incremental fitting for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = fit(Mdl,X(idx,:),Y(idx)); beta11(j) = Mdl.BinaryLearners{1}.Beta(1); priormoved(j) = sum(Mdl.Prior(Mdl.ClassNames > 2)); end
Mdl は、ストリーム内のすべてのデータで学習させた incrementalClassificationECOC モデル オブジェクトです。
パラメーターがインクリメンタル学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。
t = tiledlayout(2,1); nexttile plot(beta11) xlim([0 nchunk]) ylabel("\beta_{11}") nexttile plot(priormoved) xlim([0 nchunk]) ylabel("\pi(Subject Is Moving)") xlabel(t,"Iteration")

係数は fit で各チャンクが処理されると更新されます。事前クラス分布は経験的であるため、 (被験者が移動) は fit で各チャンクが処理されると変化します。
データに含まれるすべてのクラス名がわかっている場合にインクリメンタル ECOC 学習器を当てはめます。
デバイスに学習させ、被験者で測定された生体データに基づいて、被験者が座る、立つ、歩く、走る、踊るのいずれの状態であるかを予測するとします。各行動にはクラス名 1 ~ 5 をマッピングします。また、この調査では、クラスごとのデバイスの分布は一様になるものとします。
マルチクラス学習用のインクリメンタル ECOC モデルを作成します。クラス名および一様な事前クラス分布を指定します。
classnames = 1:5;
Mdl = incrementalClassificationECOC(ClassNames=classnames,Prior="uniform")Mdl =
incrementalClassificationECOC
IsWarm: 0
Metrics: [1×2 table]
ClassNames: [1 2 3 4 5]
ScoreTransform: 'none'
BinaryLearners: {10×1 cell}
CodingName: 'onevsone'
Decoding: 'lossweighted'
Properties, Methods
Mdl は incrementalClassificationECOC モデル オブジェクトです。そのプロパティはすべて読み取り専用です。学習中に観測されるラベルは Mdl.ClassNames のいずれかでなければなりません。
Mdl は、他の演算の実行に使用する前に、データに当てはめなければなりません。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description を入力してください。
関数 fit を使用して、インクリメンタル モデルを学習データに当てはめます。50 個の観測値のチャンクを一度に処理して、データ ストリームをシミュレートします。各反復で次を行います。
50 個の観測値を処理します。
前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。
1 番目のバイナリ学習器 の 1 番目のモデル係数と被験者が移動しているかどうか (
Y> 2) の事前確率を保存し、インクリメンタル学習中にそれらのパラメーターがどのように進化するかを確認。
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); beta11 = zeros(nchunk,1); priormoved = zeros(nchunk,1); % Incremental fitting for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = fit(Mdl,X(idx,:),Y(idx)); beta11(j) = Mdl.BinaryLearners{1}.Beta(1); priormoved(j) = sum(Mdl.Prior(Mdl.ClassNames > 2)); end
Mdl は、ストリーム内のすべてのデータで学習させた incrementalClassificationECOC モデル オブジェクトです。
パラメーターがインクリメンタル学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。
t = tiledlayout(2,1); nexttile plot(beta11) xlim([0 nchunk]) ylabel("\beta_{11}") nexttile plot(priormoved) xlim([0 nchunk]) ylabel("\pi(Subject Is Moving)") xlabel(t,"Iteration")

予測子分布の事後平均は fit で各チャンクが処理されると更新されます。事前クラス分布は一様として指定されているため、 (被験者が移動) は 0.6 のまま fit で各チャンクが処理されても変化しません。
fitcecoc を使用して ECOC 分類モデルに学習させ、それをインクリメンタル学習器に変換し、その性能をストリーミング データで追跡してからモデルをデータに当てはめます。インクリメンタル学習関数用に、観測値を列に配置し、観測値の重みを指定します。
データの読み込みと前処理
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity rng(1); % For reproducibility n = numel(actid); idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description を入力してください。
静止している被験者 (Y <= 2) のデータが、移動している被験者のデータの倍の品質であると仮定します。静止している被験者の観測値に重み 2 を割り当て、移動している被験者の観測値に重み 1 を割り当てる重み変数を作成します。
W = ones(n,1) + (Y <=2);
ECOC 分類モデルの学習
ECOC 分類モデルをデータの半分の無作為標本に当てはめます。観測値の重みを指定します。
idxtt = randsample([true false],n,true); TTMdl = fitcecoc(X(idxtt,:),Y(idxtt),Weights=W(idxtt))
TTMdl =
ClassificationECOC
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: [1 2 3 4 5]
ScoreTransform: 'none'
BinaryLearners: {10×1 cell}
CodingName: 'onevsone'
Properties, Methods
TTMdl は従来式の学習済み ECOC 分類モデルを表す ClassificationECOC モデル オブジェクトです。
学習済みモデルの変換
従来式の学習済みモデルをインクリメンタル学習用のモデルに変換します。
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl =
incrementalClassificationECOC
IsWarm: 1
Metrics: [1×2 table]
ClassNames: [1 2 3 4 5]
ScoreTransform: 'none'
BinaryLearners: {10×1 cell}
CodingName: 'onevsone'
Decoding: 'lossweighted'
Properties, Methods
IncrementalMdl は incrementalClassificationECOC モデルです。クラス名が IncrementalMdl.ClassNames で指定されているため、インクリメンタル学習で見つかるラベルは IncrementalMdl.ClassNames のいずれかでなければなりません。
パフォーマンス メトリクスの追跡とモデルの当てはめの個別の実行
関数 updateMetrics および fit を使用して、残りのデータに対してインクリメンタル学習を実行します。インクリメンタル学習用に、予測子データの観測値を列に配置します。各反復で次を行います。
50 個の観測値を一度に処理して、データ ストリームをシミュレートします。
updateMetricsを呼び出し、観測値の入力チャンクを所与として、モデルの分類誤差の累積とウィンドウを更新します。前のインクリメンタル モデルを上書きして、Metricsプロパティ内の損失を更新します。関数がモデルをデータ チャンクに当てはめないことに注意してください。チャンクはモデルに対して "新しい" データです。観測値の向きを列方向に指定し、観測値の重みを指定します。分類誤差を保存します。
fitを呼び出して、観測値の入力チャンクにモデルを当てはめます。前のインクリメンタル モデルを上書きして、モデル パラメーターを更新します。観測値の向きを列方向に指定し、観測値の重みを指定します。
% Preallocation idxil = ~idxtt; nil = sum(idxil); numObsPerChunk = 50; nchunk = floor(nil/numObsPerChunk); mc = array2table(zeros(nchunk,2),VariableNames=["Cumulative","Window"]); Xil = X(idxil,:)'; Yil = Y(idxil); Wil = W(idxil); % Incremental fitting for j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1); iend = min(nil,numObsPerChunk*j); idx = ibegin:iend; IncrementalMdl = updateMetrics(IncrementalMdl,Xil(:,idx),Yil(idx), ... Weights=Wil(idx),ObservationsIn="columns"); mc{j,:} = IncrementalMdl.Metrics{"ClassificationError",:}; IncrementalMdl = fit(IncrementalMdl,Xil(:,idx),Yil(idx), ... Weights=Wil(idx),ObservationsIn="columns"); end
IncrementalMdl は、ストリーム内のすべてのデータで学習させた incrementalClassificationECOC モデル オブジェクトです。
あるいは、updateMetricsAndFit を使用して、新しいデータ チャンクに対するモデルのパフォーマンス メトリクスを更新し、モデルをデータに当てはめることもできます。
パフォーマンス メトリクスのトレース プロットをプロットします。
plot(mc.Variables) xlim([0 nchunk]) legend(mc.Properties.VariableNames) ylabel("Classification Error") xlabel("Iteration")

累積の損失は徐々に安定しますが、ウィンドウの損失には学習全体を通じて急な変動があります。
ECOC 分類モデルのパフォーマンスが低下した場合にのみ、そのモデルに対してインクリメンタル学習を行います。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description を入力してください。
予測される最大クラス数が 5 で、メトリクス ウィンドウ サイズが 1000 となるように、インクリメンタル学習用の ECOC 分類モデルを構成します。モデルを最初の 1000 個の観測値に当てはめて updateMetrics 用にモデルを準備します。
Mdl = incrementalClassificationECOC(MaxNumClasses=5,MetricsWindowSize=1000); initobs = 1000; Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
Mdl は incrementalClassificationECOC モデル オブジェクトです。
モデルのプロパティを照会して、モデルがウォームであるかどうかを調べます。
isWarm = Mdl.IsWarm
isWarm = logical
1
Mdl.IsWarm が 1 であるため、Mdl はウォームです。
条件付きの当てはめを行い、インクリメンタル学習を実行します。各反復でこの手順に従います。
100 個の観測値のチャンクを一度に処理することで、データ ストリームをシミュレートします。
入力データ チャンクでモデルのパフォーマンスを更新します。
誤分類誤差率が 0.05 を超える場合にのみ、モデルをデータ チャンクに当てはめます。
パフォーマンスと当てはめを追跡するときは、前のインクリメンタル モデルを上書きします。
誤分類誤差率と 1 番目のバイナリ学習器 の 1 番目のモデル係数を保存し、学習中にそれらがどのように進化するかを確認します。
fitがモデルに学習させるタイミングを追跡します。
% Preallocation numObsPerChunk = 100; nchunk = floor((n - initobs)/numObsPerChunk); beta11 = zeros(nchunk,1); ce = array2table(nan(nchunk,2),VariableNames=["Cumulative","Window"]); trained = false(nchunk,1); % Incremental fitting for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; Mdl = updateMetrics(Mdl,X(idx,:),Y(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; if ce{j,2} > 0.05 Mdl = fit(Mdl,X(idx,:),Y(idx)); trained(j) = true; end beta11(j) = Mdl.BinaryLearners{1}.Beta(1); end
Mdl は、ストリーム内のすべてのデータで学習させた incrementalClassificationECOC モデル オブジェクトです。
モデルのパフォーマンスと が学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。
t = tiledlayout(2,1); nexttile plot(beta11) hold on plot(find(trained),beta11(trained),"r.") xlim([0 nchunk]) ylabel("\beta_{11}") legend("\beta_{11}","Training occurs",Location="best") hold off nexttile plot(ce.Variables) yline(0.05,"--") xlim([0 nchunk]) ylabel("Misclassification Error Rate") legend(ce.Properties.VariableNames,Location="best") xlabel(t,"Iteration")

のトレース プロットは、前の観測ウィンドウ内における損失が最大で 0.05 である定数値の期間を示します。
入力引数
ストリーミング データに当てはめるインクリメンタル学習モデル。incrementalClassificationECOC モデル オブジェクトとして指定します。Mdl は、incrementalClassificationECOC を直接呼び出して作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner で変換して作成することもできます。
予測子データのチャンク。n 個の観測値と Mdl.NumPredictors 個の予測子変数で構成される浮動小数点行列として指定します。名前と値の引数 ObservationsIn の値は、変数と観測値の方向を決定します。ObservationsIn の既定値は "rows" であり、予測子データの観測値が X の行に沿うことを示しています。
観測値のラベル Y の長さと X の観測値の数は同じでなければなりません。Y( は j)X 内の観測値 j (行または列) のラベルです。
メモ
Mdl.NumPredictors= 0 の場合、fitはXから予測子の数を推測し、出力モデルの対応するプロパティを設定します。それ以外の場合、ストリーミング データ内の予測子変数の数がMdl.NumPredictorsから変化すると、fitがエラーを生成します。fitは、浮動小数点の入力予測子データのみをサポートしています。入力データに categorical データが含まれている場合は、エンコード バージョンの categorical データを準備する必要があります。dummyvarを使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。
データ型: single | double
ラベルのチャンク。categorical 配列、文字配列、string 配列、logical ベクトル、浮動小数点ベクトル、または文字ベクトルの cell 配列として指定します。
観測値のラベル Y の長さと X の観測値の数は同じでなければなりません。Y( は j)X 内の観測値 j (行または列) のラベルです。
次の状況のいずれかまたは両方に該当する場合、fit からエラーが発行されます。
Yに新しいラベルが格納された時点で既にクラスの最大数に達していた (incrementalClassificationECOCの引数MaxNumClassesおよびClassNamesを参照)。入力モデル
MdlのClassNamesプロパティが空以外で、YとMdl.ClassNamesのデータ型が異なる。
データ型: char | string | cell | categorical | logical | single | double
メモ
観測値 (予測子またはラベル) または重みが少なくとも 1 つの欠損 (NaN) 値を含む場合、fit はその観測値を無視します。したがって、fit は n 個よりも少ない観測値を使用して更新したモデルを作成します。ここで n は X 内の観測値数です。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: ObservationsIn="columns",Weights=W は、予測子行列の列が観測値に対応すること、およびインクリメンタル学習中に適用する観測値の重みがベクトル W に格納されていることを指定します。
予測子データにおける観測値の次元。"rows" または "columns" として指定します。
例: ObservationsIn="columns"
データ型: char | string
出力引数
更新されたインクリメンタル学習用の ECOC 分類モデル。入力モデル Mdl と同じデータ型のインクリメンタル学習モデル オブジェクト incrementalClassificationECOC として返されます。
incrementalClassificationECOC を使用して入力モデル Mdl を作成する際、想定されるすべてのクラスが名前と値の引数 ClassNames を使用して指定されていない場合、想定されるクラスで未処理のクラスが Y に含まれていると、fit は次のアクションを実行します。
Y内の新しいラベルをMdl.ClassNamesの末尾に追加します。Mdl.Priorを更新された経験的クラス分布の長さ c のベクトルに拡張します。ここで、c はMdl.ClassNames内のクラスの数です。
ヒント
従来式の学習とは異なり、インクリメンタル学習には個別のテスト (ホールドアウト) セットが存在しない場合もあります。そのため、データの各入力チャンクをテスト セットとして扱うには、インクリメンタル モデルと各入力チャンクを、同じデータでモデルに学習させる前に
updateMetricsに渡します。
アルゴリズム
事前クラス確率分布が既知の場合 (つまり、事前分布が経験分布でない場合)、fit は、観測値の重みを正規化して、それぞれのクラスの事前クラス確率の合計になるようにします。このアクションは、既定の観測値の重みがそれぞれの事前クラス確率であることを前提としています。
クラスの事前確率分布が経験分布の場合、ソフトウェアは、fit が呼び出されるたびに、指定された観測値の重みを正規化して、合計が 1 になるようにします。
拡張機能
使用上の注意および制限:
saveLearnerForCoder、loadLearnerForCoderおよびcodegen(MATLAB Coder) を使用して、関数fitのコードを生成します。saveLearnerForCoderを使用して、学習済みモデルを保存します。loadLearnerForCoderを使用して保存済みモデルを読み込んで関数fitを呼び出す、エントリポイント関数を定義します。次に、codegenを使用して、エントリポイント関数のコードを生成します。fitの単精度の C/C++ コードを生成するには、loadLearnerForCoder関数を呼び出すときにDataType="single"を指定します。浮動小数点の入力引数およびオブジェクト プロパティには、すべて同質なデータ型を使用します。具体的には、
singleまたはdoubleのいずれかです。次の表は、
fitの引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。引数 注意と制限 Mdlモデル オブジェクトの使用上の注意および制限については、
incrementalClassificationECOCを参照してください。Xバッチ間の観測値の数は可変サイズにすることができますが、対応する
Yの観測値の数と等しくなければなりません。予測子変数の数は
Mdl.NumPredictorsと等しくなければなりません。Xはsingleまたはdoubleでなければなりません。
Yバッチ間の観測値の数は可変サイズにすることができますが、対応する
Xの観測値の数と等しくなければなりません。分類問題では、
YのすべてのラベルがMdl.ClassNamesに含まれていなければなりません。YとMdl.ClassNamesは同じデータ型でなければなりません。
詳細は、コード生成の紹介を参照してください。
バージョン履歴
R2022a で導入
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)