Main Content

incrementalRegressionLinear

インクリメンタル学習用の線形回帰モデル

R2020b 以降

説明

incrementalRegressionLinearincrementalRegressionLinear モデル オブジェクトを作成します。これは、回帰問題用のインクリメンタル線形モデルを表します。サポートされる学習器には、サポート ベクター マシン (SVM) と最小二乗が含まれます。

他の Statistics and Machine Learning Toolbox™ モデル オブジェクトとは異なり、incrementalRegressionLinear は直接呼び出すことができます。また、モデルをデータに当てはめる前に、パフォーマンス メトリクス構成、パラメーター値、および目的ソルバーなどの学習オプションを指定できます。incrementalRegressionLinear オブジェクトを作成すると、インクリメンタル学習用に準備されます。

incrementalRegressionLinear は、インクリメンタル学習に最適です。SVM または線形回帰モデルに学習させるための従来のアプローチ (データへの当てはめによるモデルの作成、交差検証の実行、ハイパーパラメーターの調整など) については、fitrsvm または fitrlinear を参照してください。

作成

incrementalRegressionLinear モデル オブジェクトは、次のいくつかの方法で作成できます。

  • 関数の直接呼び出し — インクリメンタル学習オプションを構成するか、incrementalRegressionLinear を直接呼び出して、線形モデル パラメーターとハイパーパラメーターの初期値を指定します。このアプローチは、データがまだない場合やインクリメンタル学習をすぐに開始したい場合に最適です。

  • 従来式の学習済みモデルの変換 — 学習済みモデル オブジェクトのモデル係数およびハイパーパラメーターを使用して、インクリメンタル学習用の線形回帰モデルを初期化するには、従来式の学習済みモデルを関数 incrementalLearner に渡して incrementalRegressionLinear モデル オブジェクトに変換できます。この表には、適切なリファレンス ページへのリンクが含まれています。

    変換可能なモデル オブジェクト変換関数
    RegressionSVM または CompactRegressionSVMincrementalLearner
    RegressionLinearincrementalLearner

  • インクリメンタル学習関数の呼び出しfitupdateMetrics、および updateMetricsAndFit は、構成済みの incrementalRegressionLinear モデル オブジェクトおよびデータを入力として受け入れ、入力モデルとデータから学習した情報で更新された incrementalRegressionLinear モデル オブジェクトを返します。

説明

Mdl = incrementalRegressionLinear() は線形回帰用の既定のインクリメンタル モデル オブジェクト Mdl を返します。既定のモデルのプロパティには、未知のモデル パラメーター用のプレースホルダーが含まれています。既定のモデルは、パフォーマンスを追跡したり、予測を生成したりする前に学習させなければなりません。

Mdl = incrementalRegressionLinear(Name,Value) は、名前と値の引数を使用して、プロパティと追加のオプションを設定します。それぞれの名前は引用符で囲みます。たとえば、incrementalRegressionLinear('Beta',[0.1 0.3],'Bias',1,'MetricsWarmupPeriod',100) は、線形モデル係数 β のベクトルを [0.1 0.3] に、バイアス β01 に、およびメトリクスのウォームアップ期間を 100 に設定します。

入力引数

すべて展開する

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'Standardize',true は、推定期間中に推定された予測子の平均と標準偏差を使用して、予測子データを標準化します。

インクリメンタル学習中に追跡するモデルのパフォーマンス メトリクス。組み込みの損失関数の名前、名前の string ベクトル、関数ハンドル (@metricName)、関数ハンドルの構造体配列、または名前、関数ハンドル、構造体配列の cell ベクトルとして指定します。

Mdl"ウォーム" のとき (IsWarm を参照)、updateMetrics および updateMetricsAndFitMdlMetrics プロパティのパフォーマンス メトリクスを追跡します。

次の表は、組み込みの損失関数名と、それらをサポートする学習器 (Learner で指定) の一覧です。string ベクトルを使用して、複数の損失関数を指定できます。

名前説明メトリクスをサポートする学習器
"epsiloninsensitive"イプシロン不感応損失'svm'
"mse"重み付けされた平均二乗誤差'svm' および 'leastsquares'

組み込み損失関数の詳細については、loss を参照してください。

例: 'Metrics',["epsiloninsensitive" "mse"]

パフォーマンス メトリクスを返すカスタム関数を指定するには、関数ハンドル表記を使用します。関数は次の形式でなければなりません。

metric = customMetric(Y,YFit)

  • 出力引数 metric は n 行 1 列の数値ベクトルです。ここで、各要素は、学習サイクル中にインクリメンタル学習関数によって処理されたデータの対応する観測値の損失です。

  • 関数名 (customMetric) を指定します。

  • Y は、観測応答の長さ n の数値ベクトルです。ここで、n は標本サイズです。

  • YFit は、対応する予測応答の長さ n の数値ベクトルです。

複数のカスタム メトリクスを指定し、それぞれにカスタム名を割り当てるには、構造体配列を使用します。組み込みメトリクスとカスタム メトリクスの組み合わせを指定するには、cell ベクトルを使用します。

例: 'Metrics',struct('Metric1',@customMetric1,'Metric2',@customMetric2)

例: 'Metrics',{@customMetric1 @customMetric2 'mse' struct('Metric3',@customMetric3)}

updateMetrics および updateMetricsAndFit は、table で指定したメトリクスをプロパティ Metrics に保存します。Metrics のデータ型によって、table の行名が決まります。

'Metrics' 値のデータ型Metrics プロパティの行名の説明
string または文字ベクトル対応する組み込みメトリクスの名前"epsiloninsensitive" の行名は "EpsilonInsensitiveLoss"
構造体配列フィールド名struct('Metric1',@customMetric1) の行名は "Metric1"
プログラム ファイルに格納されている関数への関数ハンドル関数名@customMetric の行名は "customMetric"
無名関数CustomMetric_j。ここで、jMetrics のメトリクス j@(Y,YFit)customMetric(Y,YFit)... の行名は CustomMetric_1

既定の設定では、次のようになります。

  • Learner'svm' の場合、Metrics"epsiloninsensitive" です。

  • Learner'leastsquares' の場合、Metrics"mse" です。

パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。

データ型: char | string | struct | cell | function_handle

予測子データを標準化するためのフラグ。次の表の値として指定します。

説明
'auto'incrementalRegressionLinear が予測子変数を標準化する必要があるかどうかを決定します。データの標準化を参照してください。
trueソフトウェアが予測子データを標準化します。詳細は、データの標準化を参照してください。
falseソフトウェアが予測子データを標準化しません。

例: 'Standardize',true

データ型: logical | char | string

各反復での観測値のシャッフル フラグ。次の表の値として指定します。

説明
trueソフトウェアが、関数 fit でモデルを当てはめる前に、データの入力チャンク内の観測値をシャッフルします。このアクションにより、抽出スキームによって誘発されるバイアスが低減されます。
falseソフトウェアが、受信した順序でデータを処理します。

このオプションは、Solver'scale-invariant' である場合のみ有効です。Solver'sgd' または 'asgd' である場合は、データを処理する前に、データの入力チャンク内の観測値が常にシャッフルされます。

例: 'Shuffle',false

データ型: logical

プロパティ

すべて展開する

incrementalRegressionLinear を呼び出すときに名前と値の引数の構文のみを使用して、ほとんどのプロパティを設定できます。incrementalLearner を呼び出して従来式の学習済みモデルを変換するときに、いくつかのプロパティを設定できます。プロパティ FittedLossNumTrainingObservationsMuSigmaSolverOptions、および IsWarm は設定できません。

回帰モデルのパラメーター

この プロパティ は読み取り専用です。

線形モデル係数 β。NumPredictors 行 1 列の数値ベクトルとして指定します。

インクリメンタル近似関数は学習中に Beta を推定します。Beta の既定の初期値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済みモデルを変換して Mdl を作成する場合、初期値は従来式の学習済みモデルの対応するプロパティによって指定されます。

  • それ以外の場合、初期値は zeros(NumPredictors,1) です。

データ型: single | double

この プロパティ は読み取り専用です。

モデル切片 β0 またはバイアス項。数値スカラーとして指定します。

インクリメンタル近似関数は学習中に Bias を推定します。Bias の既定の初期値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済みモデルを変換して Mdl を作成する場合、初期値は従来式の学習済みモデルの対応するプロパティによって指定されます。

  • それ以外の場合、初期値は 0 です。

データ型: single | double

この プロパティ は読み取り専用です。

イプシロン不感応区間の幅の半分。'auto' または非負のスカラーとして指定します。incrementalRegressionLinearEpsilon 値を数値スカラーとして格納します。

incrementalRegressionLinear を呼び出すときに 'auto' を指定した場合、インクリメンタル近似関数は次の手順を使用して、EstimationPeriod で指定される推定期間中に Epsilon を推定します。

  • iqr(Y) ≠ 0 の場合、Epsiloniqr(Y)/13.49 です。ここで、Y は推定期間の応答データです。

  • iqr(Y) = 0 であるか Mdl をデータに当てはめる前の場合、Epsilon0.1 です。

Epsilon の既定値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済み SVM 回帰モデルを変換する場合 (Learner'svm')、Epsilon は従来式の学習済みモデルの対応するプロパティによって指定されます。

  • それ以外の場合、既定値は 'auto' です。

Learner'leastsquares' の場合、Epsilon を設定することはできず、その値は NaN になります。

データ型: single | double

この プロパティ は読み取り専用です。

線形モデルの当てはめに使用する損失関数。'epsiloninsensitive' または 'mse' を指定します。

アルゴリズム損失関数Learner の値
'epsiloninsensitive'サポート ベクター マシン回帰イプシロン不感応: [y,f(x)]=max[0,|yf(x)|ε]'svm'
'mse'通常の最小二乗による線形回帰平均二乗誤差 (MSE): [y,f(x)]=12[yf(x)]2'leastsquares'

この プロパティ は読み取り専用です。

線形回帰モデルのタイプ。'svm' または 'leastsquares' を指定します。incrementalRegressionLinearLearner 値を文字ベクトルとして格納します。

次の表では f(x)=xβ+b. です。

  • β は Beta です。

  • x は p 個の予測子変数による観測値です。

  • β0Bias です。

アルゴリズム損失関数FittedLoss の値
'svm'サポート ベクター マシン回帰イプシロン不感応: [y,f(x)]=max[0,|yf(x)|ε]'epsiloninsensitive'
'leastsquares'通常の最小二乗による線形回帰平均二乗誤差 (MSE): [y,f(x)]=12[yf(x)]2'mse'

Learner の既定値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済みモデルを変換して Mdl を作成する場合、次のようになります。

    • 従来式の学習済みモデルが RegressionSVM または CompactRegressionSVM の場合、Learner'svm' です。

    • 従来式の学習済みモデルが RegressionLinear の場合、Learner は従来式の学習済みモデルの対応するプロパティによって指定されます。

  • それ以外の場合、既定値は 'svm' です。

データ型: char | string

この プロパティ は読み取り専用です。

予測子変数の数。非負の数値スカラーとして指定します。

NumPredictors の既定値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済みモデルを変換して Mdl を作成する場合、NumPredictors は従来式の学習済みモデルの対応するプロパティによって指定されます。

  • incrementalRegressionLinear を直接呼び出して Mdl を作成する場合、NumPredictors は名前と値の引数の構文を使用して指定できます。値を指定しない場合、既定値は 0 で、インクリメンタル近似関数は学習中に予測子データから NumPredictors を推測します。

データ型: double

この プロパティ は読み取り専用です。

インクリメンタル モデル Mdl に当てはめる観測値の数。非負の数値スカラーとして指定します。NumTrainingObservations は、Mdl および学習データを fit または updateMetricsAndFit に渡すときに増加します。

メモ

従来式の学習済みモデルを変換して Mdl を作成する場合、incrementalRegressionLinear は、従来式の学習済みモデルに当てはめる観測値の数を NumTrainingObservations に追加しません。

データ型: double

この プロパティ は読み取り専用です。

応答変換関数。'none' または関数ハンドルとして指定します。incrementalRegressionLinearResponseTransform 値を文字ベクトルまたは関数ハンドルとして格納します。

ResponseTransform は、インクリメンタル学習関数が生の応答値を変換する方法を記述します。

MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。たとえば、'ResponseTransform',@function では、function が n 行 1 列のベクトル (元の応答) を受け入れ、同じ長さのベクトル (変換された応答) を返します。

ResponseTransform の既定値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済みモデルを変換して Mdl を作成する場合、ResponseTransform は従来式の学習済みモデルの対応するプロパティによって指定されます。

  • それ以外の場合、既定値は "none" です。

データ型: char | string | function_handle

学習パラメーター

この プロパティ は読み取り専用です。

ハイパーパラメーターの推定のために、パフォーマンス メトリクスの学習または追跡の前にインクリメンタル モデルが処理する観測値の数。非負の整数として指定します。

メモ

  • Mdl をインクリメンタル学習用に準備する場合 (学習に必要なすべてのハイパーパラメーターを指定する必要があります)、incrementalRegressionLinearEstimationPeriod0 に強制します。

  • Mdl をインクリメンタル学習用に準備しない場合、incrementalRegressionLinearEstimationPeriod1000 に設定します。

詳細は、推定期間を参照してください。

データ型: single | double

この プロパティ は読み取り専用です。

線形モデルの切片使用フラグ。true または false として指定します。

説明
trueincrementalRegressionLinear は、バイアス項 β0 を、インクリメンタル近似関数がデータに当てはめる線形モデルに含めます。
falseincrementalRegressionLinear は β0 = 0 に設定します。

Bias ≠ 0 の場合、FitBiastrue でなければなりません。つまり、incrementalRegressionLinear は β0 の等式制約をサポートしません。

FitBias の既定値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済み線形回帰モデル (RegressionLinear) を変換して Mdl を作成する場合、FitBias は従来式の学習済みモデルの ModelParameters プロパティの FitBias 値によって指定されます。

  • それ以外の場合、既定値は true です。

データ型: logical

この プロパティ は読み取り専用です。

予測子の平均。数値ベクトルを指定します。

Mu が空の配列 [] で、'Standardize',true が指定されている場合、インクリメンタル近似関数は、MuEstimationPeriod で指定された推定期間中に推定された予測子変数の平均に設定します。

Mu を直接指定することはできません。

データ型: single | double

この プロパティ は読み取り専用です。

予測子の標準偏差。数値ベクトルを指定します。

Sigma が空の配列 [] で、'Standardize',true が指定されている場合、インクリメンタル近似関数は、SigmaEstimationPeriod で指定された推定期間中に推定された予測子変数の標準偏差に設定します。

Sigma を直接指定することはできません。

データ型: single | double

この プロパティ は読み取り専用です。

目的関数の最小化手法。'scale-invariant''sgd' または 'asgd' を指定します。incrementalRegressionLinearSolver 値を文字ベクトルとして格納します。

説明メモ:
'scale-invariant'

インクリメンタル学習用の適応型スケール不変ソルバー[1]

  • このアルゴリズムはパラメーターを持たず、予測子のスケールの違いに適応できます。SGD または ASGD を使用する前に、このアルゴリズムを試してください。

  • 関数 fit でモデルを当てはめる前にデータの入力チャンクをシャッフルするには、Shuffletrue に設定します。

'sgd'確率的勾配降下法 (SGD) [3][2]

  • SGD で効果的に学習させるには、データを標準化し、SGD および ASGD ソルバーのパラメーターにリストされているオプションを使用してハイパーパラメーターの適切な値を指定します。

  • 関数 fit でモデルを当てはめる前にデータの入力チャンクが常にシャッフルされます。

'asgd'平均化確率的勾配降下法 (ASGD) [4]

  • ASGD で効果的に学習させるには、データを標準化し、SGD および ASGD ソルバーのパラメーターにリストされているオプションを使用してハイパーパラメーターの適切な値を指定します。

  • 関数 fit でモデルを当てはめる前にデータの入力チャンクが常にシャッフルされます。

Solver の既定値は、モデルの作成方法に応じて異なります。

  • incrementalRegressionLinear を直接呼び出して Mdl を作成する場合、既定値は 'scale-invariant' です。

  • 従来式の学習済み線形回帰モデル (RegressionLinear) を変換して Mdl を作成するときに、従来式の学習済みモデルの Regularization プロパティが 'ridge (L2)'ModelParameters.Solver'sgd' または 'asgd' の場合、Solver は従来式の学習済みモデルの ModelParameters プロパティの Solver 値によって指定されます。

  • それ以外の場合、このプロパティの設定は関数 incrementalLearner の名前と値の引数 Solver で行います。この引数の既定値は 'scale-invariant' です。

データ型: char | string

この プロパティ は読み取り専用です。

目的ソルバーの構成。構造体配列として指定します。SolverOptions のフィールドは、指定したソルバー Solver 固有のプロパティです。

データ型: struct

SGD および ASGD ソルバーのパラメーター

この プロパティ は読み取り専用です。

ミニバッチのサイズ。正の整数として指定します。学習中の各学習サイクルで、incrementalRegressionLinearBatchSize 個の観測値を使用して劣勾配を計算します。

最後のミニバッチ (fit または updateMetricsAndFit の各関数呼び出しにおける最後の学習サイクル) に使用する観測値の数は、BatchSize より小さくてもかまいません。たとえば、fit または updateMetricsAndFit に 25 個の観測値を指定した場合、関数は最初の 2 つの学習サイクルに 10 個の観測値を使用し、最後の学習サイクルに 5 の観測値を使用します。

BatchSize の既定値は、モデルの作成方法に応じて異なります。

  • incrementalRegressionLinear を直接呼び出して Mdl を作成する場合、既定値は 10 です。

  • 従来式の学習済み線形回帰モデル (RegressionLinear) を変換して Mdl を作成するときに、従来式の学習済みモデルの Regularization プロパティが 'ridge (L2)'ModelParameters.Solver'sgd' または 'asgd' の場合、BatchSize は従来式の学習済みモデルの ModelParameters プロパティの BatchSize 値によって指定されます。

  • それ以外の場合、このプロパティの設定は関数 incrementalLearner の名前と値の引数 BatchSize で行います。この引数の既定値は 10 です。

データ型: single | double

この プロパティ は読み取り専用です。

リッジ (L2) 正則化項の強度。非負のスカラーとして指定します。

Lambda の既定値は、モデルの作成方法に応じて異なります。

  • incrementalRegressionLinear を直接呼び出して Mdl を作成する場合、既定値は 1e-5 です。

  • 従来式の学習済み線形回帰モデル (RegressionLinear) を変換して Mdl を作成するときに、従来式の学習済みモデルの Regularization プロパティが 'ridge (L2)'ModelParameters.Solver'sgd' または 'asgd' の場合、Lambda は従来式の学習済みモデルの対応するプロパティによって指定されます。

  • それ以外の場合、このプロパティの設定は関数 incrementalLearner の名前と値の引数 Lambda で行います。この引数の既定値は 1e-5 です。

データ型: double | single

この プロパティ は読み取り専用です。

初期学習率。'auto' または正のスカラーとして指定します。incrementalRegressionLinearLearnRate 値を正のスカラーとして格納します。

学習率は、目的の劣勾配をスケールすることによって最適化のステップ サイズを制御します。LearnRate は学習率の初期値を指定し、LearnRateSchedule によって後続の学習サイクルの学習率が決まります。

'auto' を指定した場合、次のようになります。

  • 初期学習率は 0.7 となります。

  • EstimationPeriod > 0 の場合、fit および updateMetricsAndFit は、EstimationPeriod の最後にこの比率を 1/sqrt(1+max(sum(X.^2,obsDim))) に変更します。obsDim の値は、観測値が推定期間に収集された予測子データ X の列である場合は 1、それ以外の場合は 2 です。

LearnRate の既定値は、モデルの作成方法に応じて異なります。

  • incrementalRegressionLinear を直接呼び出して Mdl を作成する場合、既定値は 'auto' です。

  • 従来式の学習済み線形回帰モデル (RegressionLinear) を変換して Mdl を作成するときに、従来式の学習済みモデルの Regularization プロパティが 'ridge (L2)'ModelParameters.Solver'sgd' または 'asgd' の場合、LearnRate は従来式の学習済みモデルの ModelParameters プロパティの LearnRate 値によって指定されます。

  • それ以外の場合、このプロパティの設定は関数 incrementalLearner の名前と値の引数 LearnRate で行います。この引数の既定値は 'auto' です。

例: 'LearnRate',0.001

データ型: single | double | char | string

この プロパティ は読み取り専用です。

学習率スケジュール。次の表の値として指定します。ここで、LearnRate は初期学習率 ɣ0 を指定します。incrementalRegressionLinearLearnRateSchedule 値を文字ベクトルとして格納します。

説明
'constant'すべての学習サイクルの学習率を ɣ0 とする。
'decaying'

学習サイクル t での学習率を次とする。

γt=γ0(1+λγ0t)c.

  • λ は Lambda の値です。

  • Solver'sgd' の場合、c = 1 です。

  • Solver'asgd' の場合、次のようになります。

    • Learner'leastsquares' の場合は c = 2/3

    • Learner'svm' の場合は c = 3/4 [4]

LearnRateSchedule の既定値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済みモデルを変換して Mdl を作成する場合、このプロパティの設定は関数 incrementalLearner の名前と値の引数 LearnRateSchedule で行います。この引数の既定値は 'decaying' です。

  • それ以外の場合、既定値は 'decaying' です。

データ型: char | string

パフォーマンス メトリクス パラメーター

この プロパティ は読み取り専用です。

インクリメンタル モデルがパフォーマンス メトリクスを追跡するかどうかを示すフラグ。logical 0 (false) または 1 (true) として指定します。

インクリメンタル モデル Mdl は、インクリメンタル近似関数が (EstimationPeriod + MetricsWarmupPeriod) 個の観測値をインクリメンタル モデルに当てはめた後、"ウォーム" (IsWarmtrue となる) になります。

説明
true または 1インクリメンタル モデル Mdl がウォームです。この結果、updateMetrics および updateMetricsAndFitMdlMetrics プロパティのパフォーマンス メトリクスを追跡します。
false または 0updateMetrics および updateMetricsAndFit はパフォーマンス メトリクスを追跡しません。

データ型: logical

この プロパティ は読み取り専用です。

updateMetrics および updateMetricsAndFit によってインクリメンタル学習中に更新されたモデルのパフォーマンス メトリクス。m 行 2 列の table として指定します。ここで、m は、名前と値の引数 Metrics によって指定されたメトリクスの数です。

Metrics の列には Cumulative および Window のラベルが付けられます。

  • Cumulative:要素 j は、メトリクス j で測定される、モデルがウォーム (IsWarm1) になった時点からの、モデルの性能です。

  • Window:要素 j は、メトリクス j で測定され、MetricsWindowSize プロパティで指定されたウィンドウ内のすべての観測値に対して評価される、モデルの性能です。ソフトウェアは MetricsWindowSize 個の観測値を処理した後、Window を更新します。

行には、指定したメトリクスのラベルが付けられます。詳細については、incrementalLearner または incrementalRegressionLinear の名前と値の引数 Metrics を参照してください。

データ型: table

この プロパティ は読み取り専用です。

インクリメンタル モデルが Metrics プロパティのパフォーマンス メトリクスを追跡する前に当てはめなければならない観測値の数。非負の整数として指定します。

MetricsWarmupPeriod の既定値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済みモデルを変換して Mdl を作成する場合、このプロパティの設定は関数 incrementalLearner の名前と値の引数 MetricsWarmupPeriod で行います。この引数の既定値は 0 です。

  • それ以外の場合、既定値は 1000 です。

詳細については、パフォーマンス メトリクスを参照してください。

データ型: single | double

この プロパティ は読み取り専用です。

ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数。正の整数として指定します。

MetricsWindowSize の既定値は、モデルの作成方法に応じて異なります。

  • 従来式の学習済みモデルを変換して Mdl を作成する場合、このプロパティの設定は関数 incrementalLearner の名前と値の引数 MetricsWindowSize で行います。この引数の既定値は 200 です。

  • それ以外の場合、既定値は 200 です。

パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。

データ型: single | double

オブジェクト関数

fitインクリメンタル学習用の線形モデルの学習
updateMetricsAndFit線形インクリメンタル学習モデルの新しいデータに基づくパフォーマンス メトリクスの更新とモデルの学習
updateMetrics線形インクリメンタル学習モデルの新しいデータに基づくパフォーマンス メトリクスの更新
lossデータのバッチでの線形インクリメンタル学習モデルの損失
predict線形インクリメンタル学習モデルからの新しい観測の応答予測
perObservationLossインクリメンタル学習用モデルの観測値ごとの回帰誤差
resetインクリメンタル回帰モデルのリセット

すべて折りたたむ

回帰用の既定のインクリメンタル線形モデルを作成します。

Mdl = incrementalRegressionLinear()
Mdl = 
  incrementalRegressionLinear

               IsWarm: 0
              Metrics: [1x2 table]
    ResponseTransform: 'none'
                 Beta: [0x1 double]
                 Bias: 0
              Learner: 'svm'


Mdl.EstimationPeriod
ans = 1000

MdlincrementalRegressionLinear モデル オブジェクトです。そのプロパティはすべて読み取り専用です。

Mdl は、他の演算の実行に使用する前に、データに当てはめなければなりません。推定期間は、イプシロン不感応区間 Epsilon の幅の半分が不明であるため 1000 に設定されます。名前と値の引数 Epsilon を使用して Epsilon を正の浮動小数点スカラーに設定できます。このアクションにより、推定期間が既定の 0 になります。

ロボット アームのデータ セットを読み込みます。

load robotarm

データ セットの詳細については、コマンド ラインで Description を入力してください。

関数 updateMetricsAndFit を使用して、インクリメンタル モデルを学習データに当てはめます。一度に 50 個の観測値のチャンクにモデルを当てはめて、データ ストリームをシミュレートします。各反復で次を行います。

  • 50 個の観測値を処理。

  • 前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書き。

  • β1、累積メトリクス、およびウィンドウ メトリクスを保存し、インクリメンタル学習中にそれらがどのように進化するかを確認。

% Preallocation
n = numel(ytrain);
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta1 = zeros(nchunk,1);    

% Incremental fitting
rng("default"); % For reproducibility
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;    
    Mdl = updateMetricsAndFit(Mdl,Xtrain(idx,:),ytrain(idx));
    ei{j,:} = Mdl.Metrics{"EpsilonInsensitiveLoss",:};
    beta1(j + 1) = Mdl.Beta(1);
end

Mdl は、ストリーム内のすべてのデータで学習させた incrementalRegressionLinear モデル オブジェクトです。updateMetricsAndFit は、最初の 1000 個の観測値の処理で Epsilon を推定するための応答値を格納します。この推定期間が経過するまでは係数は当てはめられません。インクリメンタル学習中およびモデルがウォームアップされた後、updateMetricsAndFit は入力観測値でモデルの性能をチェックし、モデルをその観測値に当てはめます。

パフォーマンス メトリクスと β1 が学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。

t = tiledlayout(2,1);
nexttile
plot(beta1)
ylabel('\beta_1')
xlim([0 nchunk])
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.')
nexttile
h = plot(ei.Variables);
xlim([0 nchunk])
ylabel('Epsilon Insensitive Loss')
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.')
xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.')
legend(h,ei.Properties.VariableNames)
xlabel(t,'Iteration')

Figure contains 2 axes objects. Axes object 1 with ylabel \beta_1 contains 2 objects of type line, constantline. Axes object 2 with ylabel Epsilon Insensitive Loss contains 4 objects of type line, constantline. These objects represent Cumulative, Window.

プロットは、updateMetricsAndFit が次を行うことを示しています。

  • 推定期間 (最初の 20 回の反復) の後、β1 をインクリメンタル学習のすべての反復で当てはめる。

  • パフォーマンス メトリクスをメトリクスのウォームアップ期間後にのみ計算。

  • 累積メトリクスを各反復中に計算。

  • ウィンドウ メトリクスを 500 個の観測値 (4 回の反復) の処理後に計算。

メトリクスのウォームアップ期間を指定して、インクリメンタル回帰学習器を準備します。その間、関数 updateMetricsAndFit はモデルの当てはめのみを行います。メトリクス ウィンドウ サイズを観測値 500 個に指定します。SGD を使用してモデルに学習させ、SGD バッチ サイズ、学習率、および正則化パラメーターを調整します。

ロボット アームのデータ セットを読み込みます。

load robotarm
n = numel(ytrain);

データ セットの詳細については、コマンド ラインで Description を入力してください。

回帰用のインクリメンタル線形モデルを作成します。次のようにモデルを構成します。

  • SGD ソルバーを指定。

  • リッジ正則化パラメーター値 0.001、SGD バッチ サイズ 20、学習率 0.002、および SVM のイプシロン不感応区間の幅の半分 0.05 という設定で、問題に対して十分に機能すると仮定。

  • インクリメンタル近似関数で生の (標準化されていない) 予測子データを処理するように指定。

  • メトリクスのウォームアップ期間を観測値 1000 個に指定。

  • メトリクス ウィンドウ サイズを観測値 500 個に指定。

  • イプシロン不感応損失、MSE、および平均絶対誤差 (MAE) を追跡してモデルの性能を測定。ソフトウェアは、イプシロン不感応損失および MSE をサポートしています。新しい各観測値の絶対誤差を測定する無名関数を作成します。名前 MeanAbsoluteError とそれに対応する関数を含む構造体配列を作成します。

maefcn = @(z,zfit)abs(z - zfit);
maemetric = struct("MeanAbsoluteError",maefcn);

Mdl = incrementalRegressionLinear('Epsilon',0.05, ...
    'Solver','sgd','Lambda',0.001,'BatchSize',20,'LearnRate',0.002, ...
    'Standardize',false, ...
    'MetricsWarmupPeriod',1000,'MetricsWindowSize',500, ...
    'Metrics',{'epsiloninsensitive' 'mse' maemetric})
Mdl = 
  incrementalRegressionLinear

               IsWarm: 0
              Metrics: [3x2 table]
    ResponseTransform: 'none'
                 Beta: [0x1 double]
                 Bias: 0
              Learner: 'svm'


Mdl はインクリメンタル学習用に推定期間なしで構成された incrementalRegressionLinear モデル オブジェクトです。

関数 updateMetricsAndFit を使用して、インクリメンタル モデルをデータに当てはめます。各反復で次を行います。

  • 50 個の観測値のチャンクを処理して、データ ストリームをシミュレート。チャンクのサイズと SGD バッチ サイズは異なることに注意してください。

  • 前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書き。

  • 推定係数 β10、累積メトリクス、およびウィンドウ メトリクスを保存し、インクリメンタル学習中にそれらがどのように進化するかを確認。

% Preallocation
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mse = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mae = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta10 = zeros(nchunk,1);    

% Incremental fitting
rng("default"); % For reproducibility
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;    
    Mdl = updateMetricsAndFit(Mdl,Xtrain(idx,:),ytrain(idx));
    ei{j,:} = Mdl.Metrics{"EpsilonInsensitiveLoss",:};
    mse{j,:} = Mdl.Metrics{"MeanSquaredError",:};
    mae{j,:} = Mdl.Metrics{"MeanAbsoluteError",:};
    beta10(j + 1) = Mdl.Beta(10);
end

Mdl は、ストリーム内のすべてのデータで学習させた incrementalRegressionLinear モデル オブジェクトです。インクリメンタル学習中およびモデルがウォームアップされた後、updateMetricsAndFit は入力観測値でモデルの性能をチェックし、モデルをその観測値に当てはめます。

パフォーマンス メトリクスと β10 が学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。

tiledlayout(2,2)
nexttile
plot(beta10)
ylabel('\beta_{10}')
xlim([0 nchunk])
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'g-.')
xlabel('Iteration')
nexttile
h = plot(ei.Variables);
xlim([0 nchunk])
ylabel('Epsilon Insensitive Loss')
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'g-.')
legend(h,ei.Properties.VariableNames)
xlabel('Iteration')
nexttile
h = plot(mse.Variables);
xlim([0 nchunk])
ylabel('MSE')
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'g-.')
legend(h,mse.Properties.VariableNames)
xlabel('Iteration')
nexttile
h = plot(mae.Variables);
xlim([0 nchunk])
ylabel('MAE')
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'g-.')
legend(h,mae.Properties.VariableNames)
xlabel('Iteration')

Figure contains 4 axes objects. Axes object 1 with xlabel Iteration, ylabel \beta_{10} contains 2 objects of type line, constantline. Axes object 2 with xlabel Iteration, ylabel Epsilon Insensitive Loss contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes object 3 with xlabel Iteration, ylabel MSE contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes object 4 with xlabel Iteration, ylabel MAE contains 3 objects of type line, constantline. These objects represent Cumulative, Window.

プロットは、updateMetricsAndFit が次を行うことを示しています。

  • β10 をインクリメンタル学習のすべての反復で当てはめる。

  • パフォーマンス メトリクスをメトリクスのウォームアップ期間後にのみ計算。

  • 累積メトリクスを各反復中に計算。

  • ウィンドウ メトリクスを 500 個の観測値 (10 回の反復) の処理後に計算。

fitrlinear を使用して線形回帰モデルに学習させ、それをインクリメンタル学習器に変換し、その性能を追跡し、ストリーミング データに当てはめます。学習オプションを従来式からインクリメンタル学習に引き継ぎます。

データの読み込みと前処理

2015 年のニューヨーク市住宅データ セットを読み込み、データをシャッフルします。このデータの詳細については、NYC Open Data を参照してください。

load NYCHousing2015
rng(1); % For reproducibility
n = size(NYCHousing2015,1);
idxshuff = randsample(n,n);
NYCHousing2015 = NYCHousing2015(idxshuff,:);

マンハッタンから収集されたデータ (BOROUGH = 1) が、品質を 2 倍にする新しい方法を使用して収集されたとします。マンハッタンから収集した観測値に 2 を割り当て、その他すべての観測値に 1 を割り当てる重み変数を作成します。

NYCHousing2015.W = ones(n,1) + (NYCHousing2015.BOROUGH == 1);

テーブルから応答変数 SALEPRICE を抽出します。数値安定性を得るために、SALEPRICE1e6 の尺度でスケールします。

Y = NYCHousing2015.SALEPRICE/1e6;
NYCHousing2015.SALEPRICE = [];

カテゴリカル予測子からダミー変数メトリクスを作成します。

catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"];
dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015, ...
    'InputVariables',catvars);
dumvarmat = table2array(dumvarstbl);
NYCHousing2015(:,catvars) = [];

テーブル内の他のすべての数値変数を売価の線形予測子として扱います。ダミー変数の行列を予測子データの残りに連結します。結果の予測子行列を転置します。

idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform');
X = [dumvarmat NYCHousing2015{:,idxnum}]';

線形回帰モデルの学習

線形回帰モデルを、データの半分から取った無作為標本に当てはめます。

idxtt = randsample([true false],n,true);
TTMdl = fitrlinear(X(:,idxtt),Y(idxtt),'ObservationsIn','columns', ...
    'Weights',NYCHousing2015.W(idxtt))
TTMdl = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [313x1 double]
                 Bias: 0.1116
               Lambda: 2.1977e-05
              Learner: 'svm'


TTMdl は従来式の学習済み線形回帰モデルを表す RegressionLinear モデル オブジェクトです。

学習済みモデルの変換

従来式の学習済み線形回帰モデルを、インクリメンタル学習用の線形回帰モデルに変換します。

IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = 
  incrementalRegressionLinear

               IsWarm: 1
              Metrics: [1x2 table]
    ResponseTransform: 'none'
                 Beta: [313x1 double]
                 Bias: 0.1116
              Learner: 'svm'


パフォーマンス メトリクスの追跡とモデルの当てはめの個別の実行

関数 updateMetrics および fit を使用して、残りのデータに対してインクリメンタル学習を実行します。500 個の観測値を一度に処理して、データ ストリームをシミュレートします。各反復で次を行います。

  1. updateMetrics を呼び出し、観測値の入力チャンクを所与として、モデルのイプシロン不感応損失の累積とウィンドウを更新します。前のインクリメンタル モデルを上書きして、Metrics プロパティ内の損失を更新します。関数がモデルをデータ チャンクに当てはめないことに注意してください。チャンクはモデルに対して "新しい" データです。観測値の向きを列方向に指定し、観測値の重みを指定します。

  2. fit を呼び出して、観測値の入力チャンクにモデルを当てはめます。前のインクリメンタル モデルを上書きして、モデル パラメーターを更新します。観測値の向きを列方向に指定し、観測値の重みを指定します。

  3. 損失および最後に推定された係数 β313 を保存します。

% Preallocation
idxil = ~idxtt;
nil = sum(idxil);
numObsPerChunk = 500;
nchunk = floor(nil/numObsPerChunk);
ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta313 = [IncrementalMdl.Beta(end); zeros(nchunk,1)];
Xil = X(:,idxil);
Yil = Y(idxil);
Wil = NYCHousing2015.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), ...
        'ObservationsIn','columns','Weights',Wil(idx));
    ei{j,:} = IncrementalMdl.Metrics{"EpsilonInsensitiveLoss",:};
    IncrementalMdl = fit(IncrementalMdl,Xil(:,idx),Yil(idx),'ObservationsIn','columns', ...
        'Weights',Wil(idx));
    beta313(j + 1) = IncrementalMdl.Beta(end);
end

IncrementalMdl は、ストリーム内のすべてのデータで学習させた incrementalRegressionLinear モデル オブジェクトです。

あるいは、updateMetricsAndFit を使用して、新しいデータ チャンクに対するモデルのパフォーマンス メトリクスを更新し、モデルをデータに当てはめることもできます。

パフォーマンス メトリクスと推定された係数 β313 のトレース プロットをプロットします。

t = tiledlayout(2,1);
nexttile
h = plot(ei.Variables);
xlim([0 nchunk])
ylabel('Epsilon Insensitive Loss')
legend(h,ei.Properties.VariableNames)
nexttile
plot(beta313)
ylabel('\beta_{313}')
xlim([0 nchunk])
xlabel(t,'Iteration')

Figure contains 2 axes objects. Axes object 1 with ylabel Epsilon Insensitive Loss contains 2 objects of type line. These objects represent Cumulative, Window. Axes object 2 with ylabel \beta_{313} contains an object of type line.

累積の損失は各反復 (500 個の観測値のチャンク) ごとに徐々に変化しますが、ウィンドウの損失には急な変動があります。メトリクス ウィンドウの既定値は 200 なので、updateMetrics は 500 個の観測値のチャンクごとに最新の 200 個の観測値に基づいて性能を測定します。

β313 は急激に変動した後、fit が観測値のチャンクを処理するたびに平坦になります。

詳細

すべて展開する

ヒント

  • モデルを作成した後で、データ ストリームについてインクリメンタル学習を実行する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。

アルゴリズム

すべて展開する

参照

[1] Kempka, Michał, Wojciech Kotłowski, and Manfred K. Warmuth. "Adaptive Scale-Invariant Online Algorithms for Learning Linear Models." Preprint, submitted February 10, 2019. https://arxiv.org/abs/1902.07528.

[2] Langford, J., L. Li, and T. Zhang. “Sparse Online Learning Via Truncated Gradient.” J. Mach. Learn. Res., Vol. 10, 2009, pp. 777–801.

[3] Shalev-Shwartz, S., Y. Singer, and N. Srebro. “Pegasos: Primal Estimated Sub-Gradient Solver for SVM.” Proceedings of the 24th International Conference on Machine Learning, ICML ’07, 2007, pp. 807–814.

[4] Xu, Wei. “Towards Optimal One Pass Large Scale Learning with Averaged Stochastic Gradient Descent.” CoRR, abs/1107.2490, 2011.

拡張機能

バージョン履歴

R2020b で導入