インクリメンタル学習モデルの構成
インクリメンタル学習モデルのオブジェクトでは、関数がインクリメンタル近似およびモデルの性能評価を実装する方法を完全に指定します。インクリメンタル学習モデルの構成 (または準備) を行うには、オブジェクトを直接呼び出すか、従来式の学習済みモデルをいずれかのオブジェクトに変換することによってモデルを作成します。次の表は、使用可能なモデル タイプ、インクリメンタル学習用のモデル オブジェクト、および変換関数の一覧です。
目的 | モデル タイプ | インクリメンタル学習用のモデル オブジェクト | 変換関数 |
---|---|---|---|
バイナリ分類 | ガウス カーネルによる線形サポート ベクター マシン (SVM) 回帰およびロジスティック回帰 | incrementalClassificationKernel |
|
線形 SVM 回帰およびロジスティック回帰 | incrementalClassificationLinear |
| |
マルチクラス分類 | バイナリ学習器を含む誤り訂正出力符号 (ECOC) モデル | incrementalClassificationECOC |
|
正規、多項、または多変量多項予測子条件付き分布による単純ベイズ | incrementalClassificationNaiveBayes |
| |
回帰 | ガウス カーネルによる最小二乗回帰および線形 SVM 回帰 | incrementalRegressionKernel |
|
最小二乗回帰および線形 SVM 回帰 | incrementalRegressionLinear |
|
インクリメンタル モデルを作成するためにどの方法を選択するかは、所有している情報や求めるものによって異なります。
オブジェクト呼び出し: オブジェクトを直接呼び出して、指定に合わせてインクリメンタル モデルを作成します。この方法には柔軟性があります。目的に合わせてほとんどのオプションを指定でき、結果のモデルは適切な既定値を提供します。詳細については、オブジェクトの直接呼び出しを参照してください。
モデル変換: 関数
incrementalLearner
を使用して、従来式の学習済みモデルをインクリメンタル学習器に変換し、インクリメンタル学習用にモデルを初期化します。この関数は、データから学習させた従来式の学習済みモデルの情報を渡します。従来式の学習済みモデルを変換するには、モデルを当てはめることができるラベル付きデータのセットがなければなりません。incrementalLearner
を使用するときに指定できるのは、すべての性能評価オプションと、変換時には未知である、それらの学習、モデル、およびデータのオプションのみです。詳細は、従来式の学習済みモデルの変換を参照してください。
次の構成については、使用する方法に関わりなく検討してください。
モデルの性能評価設定 (測定するパフォーマンス メトリクスなど)。詳細については、モデル オプションおよびデータ プロパティを参照してください。
ECOC モデルの場合:
バイナリ学習器
バイナリ学習器の符号化設計行列。
カーネル モデルの場合:
モデル タイプ (SVM など)
目的関数ソルバー。標準確率的勾配降下 (SGD) など
ランダムな特徴量拡張のハイパーパラメーター (カーネル スケール パラメーターや拡張空間の次元数など)
線形モデルの場合:
モデル タイプ (SVM など)
係数の初期値
目的関数ソルバー。標準確率的勾配降下 (SGD) など
ソルバーのハイパーパラメーター値 (SGD ソルバーの学習率など)
単純ベイズモデルの場合、予測子変数の条件付き分布。データ セットには、実数予測子を正規分布とすること、およびカテゴリカル予測子 (ここでレベルは数値スカラー) を多変量多項とすることの指定が可能です。各予測子がカウントである bag-of-tokens モデルの場合、すべての予測子が結合されて多項となることの指定が可能です。
オブジェクトの直接呼び出し
他の機械学習モデル オブジェクトを操作する場合とは異なり、インクリメンタル学習モデルは、データについての知識がほとんどなくても、対応するオブジェクトを直接呼び出すことで作成できます。たとえば、次のコードは線形回帰用の既定のインクリメンタル モデルと、5 個のクラスを含むデータ ストリームの単純ベイズ分類モデルを作成します。
MdlLR = incrementalRegressionLinear(); MdlNB = incrementalClassificationNaiveBayes(MaxNumClasses=5)
線形モデルとカーネル モデルの場合、モデルを直接作成するために必要な唯一の情報は、機械学習の問題が分類または回帰のどちらであるかということです。仕様によっては評価期間も必要になることがあります。
単純ベイズ分類モデルと ECOC 分類モデルの場合は、インクリメンタル学習中にデータで予測される最大クラス数またはすべてのクラス名を指定しなければなりません。
指定するデータについての情報がある場合、またはモデル オプションか性能評価の設定を構成する場合は、オブジェクトを呼び出すときに名前と値の引数を使用します (すべてのモデル プロパティは読み取り専用です。ドット表記を使用して調整することはできません)。たとえば、次の疑似コードは、バイナリ分類用のインクリメンタル ロジスティック回帰モデルを作成し、線形モデル係数 Beta
およびバイアス Bias
(問題の事前知識から取得) を初期化し、パフォーマンス メトリクスのウォームアップ期間を 500
個の観測値に設定します。
Mdl = incrementalClassificationLinear(Learner="logistic", ... Beta=beta,Bias=bias,MetricsWarmupPeriod=500);
以下の表では、インクリメンタル学習の重要な要素に関するオプションの主なものを簡単に説明しています。すべてのオプションの詳細については、各インクリメンタル モデル オブジェクトのページのプロパティの節を参照してください。
モデル オプションおよびデータ プロパティ
次の表は、主なモデル オプションとデータ特性です。
モデル タイプ | モデル オプションおよびデータ プロパティ | 説明 |
---|---|---|
分類 | ClassNames | 分類用。観測ラベルの予想クラス名 |
ECOC 分類 | BinaryLearners * | バイナリ学習器 |
CodingMatrix * | クラス割り当て符号 | |
CodingName * | 符号化設計名 | |
カーネル分類またはカーネル回帰 | KernelScale | ランダムな特徴量拡張にソフトウェアが使用するカーネル スケール パラメーター |
Learner | 線形 SVM、ロジスティック回帰、最小二乗回帰などのモデル タイプ | |
NumExpansionDimensions | 拡張空間の次元数 | |
線形分類または線形回帰 | Beta | インクリメンタル近似の初期値としても機能する線形係数 |
Bias | インクリメンタル近似の初期値としても機能するモデル切片 | |
Learner | 線形 SVM、ロジスティック回帰、最小二乗回帰などのモデル タイプ | |
単純ベイズ分類 | Cost | 誤分類コスト行列 |
*BinaryLearners
プロパティは、名前と値の引数 Learners
を使用して指定できます。CodingMatrix
プロパティと CodingName
プロパティは、名前と値の引数 Coding
を使用して指定できます。その他のプロパティは、オブジェクトを呼び出すときに名前と値の引数の構文で同じ名前の引数を使用して設定します。たとえば、incrementalClassificationKernel(Learner="logistic")
は Learner
プロパティを "logistic"
に設定します。
学習およびソルバーのオプションとプロパティ
次の表は、学習およびソルバーの主なオプションとプロパティです。
モデル タイプ | 学習およびソルバーのオプションとプロパティ | 説明 |
---|---|---|
カーネル分類またはカーネル回帰 | EstimationPeriod | 事前学習の推定期間 |
Solver | 目的関数の最適化アルゴリズム | |
Standardize | 予測子データを標準化するためのフラグ | |
Mu ** | 予測子変数の平均 | |
Sigma ** | 予測子変数の標準偏差 | |
線形分類または線形回帰 | EstimationPeriod | 事前学習の推定期間 |
Solver | 目的関数の最適化アルゴリズム | |
Standardize | 予測子データを標準化するためのフラグ | |
Lambda | リッジ ペナルティ。SGD 最適化のために調整が必要なモデルのハイパーパラメーター | |
BatchSize | ミニバッチ サイズ。SGD ハイパーパラメーター | |
LearnRate | 学習率。SGD ハイパーパラメーター | |
Mu ** | 予測子変数の平均 | |
Sigma ** | 予測子変数の標準偏差 | |
単純ベイズ分類 | DistributionParameters ** | 学習済み分布パラメーター。
|
**Mu
、Sigma
、および DistributionParameters
の各プロパティは指定できません。その他のプロパティは、オブジェクトを呼び出すときに名前と値の引数の構文を使用して設定できます。
Mu
およびSigma
(線形モデルとカーネル モデル) —Standardize=true
と正の推定期間が設定されていて、プロパティが空の場合、インクリメンタル近似関数は、推定期間の観測値を使用して平均と標準偏差を推定します。詳細については、データの標準化を参照してください。DistributionParameters
(単純ベイズ分類モデル) — このプロパティはfit
またはupdateMetricsAndFit
でデータに当てはめなければなりません。
線形分類モデルと線形回帰モデルの場合:
EstimationPeriod
で観測値の数で指定される推定期間は、学習が始まる前に置かれます (インクリメンタル学習の期間を参照)。推定期間中、インクリメンタル近似関数fit
またはupdateMetricsAndFit
は、未知の場合に必要な学習量を計算します。たとえば、Standardize=true
を設定した場合、インクリメンタル学習関数は、予測子データを標準化するために予測子の平均および標準偏差を必要とします。その結果、インクリメンタル モデルには推定期間が必要になります (既定値は1000
)。既定のソルバーは、適応型スケール不変ソルバー
"scale-invariant"
[2]です。これにはハイパーパラメーターがなく、予測子変数のスケールの影響を受けないため、予測子データの標準化は必要ありません。代わりに、標準 SGD ("sgd"
) または平均化 SGD ("asgd"
) を指定できます。ただし、SGD は予測子変数のスケールの影響を受けやすく、ハイパーパラメーター調整が必要なため、インクリメンタル学習中は実行が困難または不可能です。SGD ソルバーを使用する場合は以下の手順を実行します。ラベル付きデータを取得します。
fitclinear
またはfitrlinear
をそれぞれ呼び出して、従来式で線形分類モデルまたは回帰モデルに学習させます。インクリメンタル学習に使用する SGD ソルバーを指定し、交差検証を行って適切なハイパーパラメーターのセットを決定し、予測子データを標準化します。指定したハイパーパラメーターのセットを使用して、標本全体でモデルに学習させます。
incrementalLearner
を使用して、結果のモデルをインクリメンタル学習器に変換します。
性能評価のオプションとプロパティ
性能評価のプロパティとオプションを使用して、モデルの性能をインクリメンタル学習関数 updateMetrics
または updateMetricsAndFit
で測定する方法とタイミングを構成できます。どのオプションを選択するとしても、インクリメンタル学習の期間についてまず理解するようにしてください。
次の表は、性能評価のすべてのオプションとプロパティを示しています。
性能評価のオプションとプロパティ | 説明 |
---|---|
Metrics | 名前と値の引数 Metrics を使用して、インクリメンタルに測定するパフォーマンス メトリクスまたは損失関数のリストを指定します。追跡された累積メトリクスとウィンドウ メトリクスの table が Metrics プロパティに格納されます。 |
MetricsWarmupPeiod | インクリメンタル モデルがパフォーマンス メトリクスを追跡する前に当てはめなければならない観測値の数 |
MetricsWindowSize | ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数 |
IsWarm *** | モデルがウォームである (パフォーマンス メトリクスを測定している) かどうかを示すフラグ |
***IsWarm
プロパティは指定できません。その他のプロパティは、オブジェクトを呼び出すときに名前と値の引数の構文を使用して設定できます。
名前と値の引数 Metrics
で指定されたメトリクスで、モデルの Metrics
プロパティに格納される table が形成されます。たとえば、インクリメンタル モデル Mdl
を作成するときに Metrics=["Metric1","Metric2"]
を指定した場合、Metrics
プロパティは次のようになります。
>> Mdl.Metrics ans = 2×2 table Cumulative Window __________ ______ Metric1 NaN NaN Metric2 NaN NaN
モデルの品質が低下し、モデルを学習させてから関数 updateMetrics
または updateMetricsAndFit
が Metrics
プロパティのパフォーマンス メトリクスを追跡する必要がある場合は、メトリクスのウォームアップ期間を指定します。この場合、IsWarm
プロパティは false
となり、インクリメンタル近似関数 fit
または updateMetricsAndFit
に入力データとモデルを渡さなければなりません。
インクリメンタル近似関数が十分なデータを処理して、推定期間 (線形モデルとカーネル モデルの場合) およびメトリクスのウォームアップ期間が完了すると、IsWarm
プロパティが true
になり、入力データでモデルの性能を測定したり、オプションでモデルに学習させたりできるようになります。単純ベイズ分類モデルと ECOC 分類モデルの場合、インクリメンタル近似関数ではさらに、モデルを予測されるすべてのクラスに当てはめてウォームにしなければなりません。
モデルがウォームである場合、updateMetrics
または updateMetricsAndFit
は、指定されたすべてのメトリクスを、(評価の開始時から) 累積的に、MetricsWindowSize
プロパティで指定された観測値のウィンドウで追跡します。累積メトリクスには、インクリメンタル学習の履歴全体にわたるモデルの性能が反映されます。性能評価期間 1 の開始後、累積メトリクスは評価期間に依存しません。ウィンドウ メトリクスには、指定したウィンドウ サイズにおける、各性能評価期間のモデルの性能が反映されます。
従来式の学習済みモデルの変換
incrementalLearner
では、従来式の学習済みモデルから学習した情報を使用して、インクリメンタル モデルを初期化できます。変換モデルは予測を生成でき、ウォームです。これは、インクリメンタル学習関数がデータ ストリームの最初からモデルのパフォーマンス メトリクスを測定できることを意味します。つまり、インクリメンタル学習のために、推定期間およびパフォーマンス メトリクスのウォームアップ期間は必要ありません。
従来式の学習済みモデルをインクリメンタル学習器に変換するには、incrementalLearner
に、モデル、および名前と値の引数で指定したオプションを渡します。たとえば、次の疑似コードは、バイナリ分類用の線形 SVM モデルがデータのバッチから学習したすべての情報を使用してインクリメンタル分類モデルを初期化します。
Mdl = fitcsvm(X,Y); IncrementalMdl = incrementalLearner(Mdl,Name=Value);
IncrementalMdl
は、異常検出用のインクリメンタル 1 クラス SVM モデル オブジェクトです。
インクリメンタル モデルの作成と初期化の容易さは、柔軟性とトレードオフの関係にあります。ソフトウェアは、従来の学習で学習された近似パラメーター、ハイパーパラメーター値、およびデータ特性がインクリメンタル学習にも適切であることを前提としています。そのため、incrementalLearner
を呼び出すときに、対応する学習済みのオプションまたは調整済みのオプションを設定することはできません。
次の表は、関数 incrementalLearner
が Mdl
から転送するか他の値から推論する IncrementalMdl
の主な読み取り専用プロパティを示しています。詳細については、各関数 incrementalLearner
のページの出力引数に関する説明を参照してください。
モデル タイプ | プロパティ | 説明 |
---|---|---|
すべて | NumPredictors | 予測子変数の数。カテゴリカル予測子変数をダミー コード化するモデルの場合、NumPredictors は numel(Mdl.ExpandedPredictorNames) であり、インクリメンタル学習中に予期される予測子変数は名前に対応します。詳細は、ダミー変数を参照してください。 |
分類 | ClassNames | インクリメンタル学習中に予測されるすべてのクラス ラベル |
Prior | 前のクラス分布 | |
ScoreTransform | 分類スコアに適用する関数。たとえば、事後クラス確率を計算するように SVM モデルを構成する場合、 | |
回帰 | Epsilon | SVM 学習器用。イプシロン不感応区間の幅の半分 |
ResponseTransform | 予測された応答に適用する関数 | |
ECOC 分類 | BinaryLearners | 学習済みバイナリ学習器。モデル オブジェクトの cell 配列 |
CodingMatrix | バイナリ学習器のクラス割り当て符号 | |
CodingName | 符号化設計名 | |
カーネル分類またはカーネル回帰 | KernelScale | カーネル スケール パラメーター |
Learner | 線形モデルのタイプ | |
Mu | 予測子変数の平均 | |
NumExpansionDimensions | 拡張空間の次元数。正の整数 | |
Sigma | 予測子変数の標準偏差 | |
線形分類または線形回帰 | Beta | 線形モデル係数 |
Bias | モデルの切片 | |
Learner | 線形モデルのタイプ | |
Mu | SVM モデル オブジェクト用。予測子変数の平均 | |
Sigma | SVM モデル オブジェクト用。予測子変数の標準偏差 | |
単純ベイズ分類 | DistributionNames | 以下の値のいずれかをもつ、クラスが与えられた予測子変数の条件付き分布:
カーネル分布をもつ予測子が 1 つ以上含まれている単純ベイズ分類モデルを変換すると、 |
DistributionParameters | 各クラスが与えられた各条件付き予測子分布の当てはめられた分布パラメーター。 | |
CategoricalPredictors | カテゴリカル予測子のインデックスの数値ベクトル | |
CategoricalLevels | 多変量多項予測子のレベル。長さ NumPredictors の cell ベクトル |
メモ
IncrementalMdl
のNumTrainingObservations
プロパティには、Mdl
の学習に使用した観測値は含まれません。fit
またはupdateMetricsAndFit
を呼び出すときにインクリメンタル学習に使用される観測値だけが含まれます。Mdl
に学習させるときにStandardize=true
を指定した場合、IncrementalMdl
は既定で、インクリメンタル学習中に予測子を標準化するように構成されます。
線形分類モデルまたは線形回帰モデル (それぞれ ClassificationLinear
または RegressionLinear
) の変換時には、次の条件が適用されます。
インクリメンタル近似関数はリッジ (L2) 正則化のみをサポートします。
インクリメンタル近似関数では、正則化値を 1 つのみ指定できます。そのため、
fitclinear
またはfitrlinear
を呼び出すときに正則化パス (正則化値のベクトル) を指定する場合、それをselectModels
に渡して、1 つのペナルティに関連付けられているモデルを選択するようにします。標準 SGD または平均化 SGD (名前と値の引数
Solver
で"sgd"
または"asgd"
) を使用して目的関数を解決する場合、incrementalLearner
を呼び出すときに次の条件が適用されます。incrementalLearner
は、Mdl
の最適化に使用されるソルバーをIncrementalMdl
に転送します。適応型スケール不変ソルバー
"scale-invariant"
を代わりに指定できますが、別の SGD ソルバーを指定することはできません。適応型スケール不変ソルバーを指定しない場合、
incrementalLearner
は、学習率LearnRate
、ミニバッチ サイズBatchSize
、およびリッジ ペナルティLambda
などのモデルとソルバーのハイパーパラメーター値をインクリメンタル モデル オブジェクトに転送します。転送されたプロパティは変更できません。
モデルに学習させた後のオブジェクトの呼び出し
インクリメンタル モデルを作成するにあたってさらに柔軟性が必要な場合は、オブジェクトを直接呼び出し、名前と値の引数を使用して学習済みの情報を個別に設定してモデルを初期化します。以下の疑似コードは次の 2 つの例を示しています。
バイナリ分類の線形 SVM モデルをデータのバッチ
Xc
およびYc
に当てはめて学習させた係数とクラス名から、インクリメンタル分類モデルを初期化します。Mdl = fitcsvm(Xc,Yc); IncrementalMdl = incrementalClassificationLinear( ... Beta=Mdl.Beta,Bias=Mdl.Bias,ClassNames=Mdl.ClassNames);
線形モデルをデータのバッチ
Xr
およびYr
に当てはめて学習させた係数から、インクリメンタル回帰モデルを初期化します。Mdl = fitlm(Xr,Yr); bias = Mdl.Coefficients.Estimate(1); beta = Mdl.Coefficients.Estimate(2:end); IncrementalMdl = incrementalRegressionLinear( ... Learner="leastsquares",Bias=bias,Beta=beta);