このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
incrementalClassificationLinear
インクリメンタル学習用のバイナリ分類線形モデル
説明
incrementalClassificationLinear
は incrementalClassificationLinear
モデル オブジェクトを作成します。これは、インクリメンタル学習用のバイナリ分類線形モデルを表します。サポートされる学習器には、サポート ベクター マシン (SVM) とロジスティック回帰が含まれます。
他の Statistics and Machine Learning Toolbox™ モデル オブジェクトとは異なり、incrementalClassificationLinear
は直接呼び出すことができます。また、モデルをデータにあてはめる前に、パフォーマンス メトリクス構成、パラメーター値、および目的ソルバーなどの学習オプションを指定できます。incrementalClassificationLinear
オブジェクトを作成すると、インクリメンタル学習用に準備されます。
incrementalClassificationLinear
は、インクリメンタル学習に最適です。バイナリ分類用の SVM または線形モデルに学習させるための従来のアプローチ (データへのあてはめによるモデルの作成、交差検証の実行、ハイパーパラメーターの調整など) については、fitcsvm
または fitclinear
を参照してください。単純ベイズ アルゴリズムを使用したマルチクラスのインクリメンタル学習については、incrementalClassificationNaiveBayes
を参照してください。
作成
incrementalClassificationLinear
モデル オブジェクトは、次のいくつかの方法で作成できます。
関数の直接呼び出し — インクリメンタル学習オプションを構成するか、
incrementalClassificationLinear
を直接呼び出して、線形モデル パラメーターとハイパーパラメーターの初期値を指定します。このアプローチは、データがまだない場合やインクリメンタル学習をすぐに開始したい場合に最適です。従来式の学習済みモデルの変換 — 学習済みの SVM またはバイナリ分類線形モデル オブジェクトのモデル係数およびハイパーパラメーターを使用して、インクリメンタル学習用のバイナリ分類線形モデルを初期化するには、従来式の学習済みモデルを関数
incrementalLearner
に渡してincrementalClassificationLinear
モデル オブジェクトに変換できます。この表には、適切なリファレンス ページへのリンクが含まれています。変換可能なモデル オブジェクト 変換関数 ClassificationSVM
またはCompactClassificationSVM
incrementalLearner
ClassificationLinear
incrementalLearner
インクリメンタル学習関数の呼び出し —
fit
、updateMetrics
、およびupdateMetricsAndFit
は、構成済みのincrementalClassificationLinear
モデル オブジェクトおよびデータを入力として受け入れ、入力モデルとデータから学習した情報で更新されたincrementalClassificationLinear
モデル オブジェクトを返します。
説明
は、インクリメンタル学習用の既定のバイナリ分類線形モデル オブジェクト Mdl
= incrementalClassificationLinear()Mdl
を返します。既定のモデルのプロパティには、未知のモデル パラメーター用のプレースホルダーが含まれています。既定のモデルは、パフォーマンスを追跡したり、予測を生成したりする前に学習させなければなりません。
入力引数
オプションの Name,Value
引数のコンマ区切りペアを指定します。Name
は引数名で、Value
は対応する値です。Name
は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN
のように、複数の名前と値のペアの引数を、任意の順番で指定できます。
例: 'Standardize',true
は、推定期間中に推定された予測子の平均と標準偏差を使用して、予測子データを標準化します。
Metrics
— インクリメンタル学習中に追跡するモデルのパフォーマンス メトリクス
"classiferror"
(既定値) | string ベクトル | 関数ハンドル | cell ベクトル | 構造体配列 | "binodeviance"
| "exponential"
| "hinge"
| "logit"
| "quadratic"
| ...
インクリメンタル学習中に追跡するモデルのパフォーマンス メトリクス。組み込みの損失関数の名前、名前の string ベクトル、関数ハンドル (@metricName
)、関数ハンドルの構造体配列、または名前、関数ハンドル、構造体配列の cell ベクトルとして指定します。
Mdl
が "ウォーム" のとき (IsWarm を参照)、updateMetrics
および updateMetricsAndFit
は Mdl
の Metrics プロパティのパフォーマンス メトリクスを追跡します。
次の表は、組み込みの損失関数名の一覧です。string ベクトルを使用して、複数指定できます。
名前 | 説明 |
---|---|
"binodeviance" | 二項分布からの逸脱度 |
"classiferror" | 分類誤差 |
"exponential" | 指数 |
"hinge" | ヒンジ |
"logit" | ロジスティック |
"quadratic" | 2 次 |
組み込み損失関数の詳細については、loss
を参照してください。
例: 'Metrics',["classiferror" "hinge"]
パフォーマンス メトリクスを返すカスタム関数を指定するには、関数ハンドル表記を使用します。関数は次の形式でなければなりません。
metric = customMetric(C,S)
出力引数
metric
は n 行 1 列の数値ベクトルです。ここで、各要素は、学習サイクル中にインクリメンタル学習関数によって処理されたデータの対応する観測値の損失です。関数名 (
customMetric
) を選択します。C
は n 行 2 列の logical 行列であり、対応する観測値が属するクラスを各行が示します。列の順序はClassNames
プロパティのクラスの順序に対応します。C
を作成するには、指定されたデータの各観測値について観測値
がクラスp
に属する場合にq
C(
=p
,q
)1
を設定します。行
の他の要素をp
0
に設定します。S
は、予測分類スコアの n 行 2 列の数値行列です。S
はpredict
の出力Score
に似ています。ここで、行はデータの観測値に対応し、列の順序はClassNames
プロパティのクラスの順序に対応しています。S(
は、クラスp
,q
)
に分類されている観測値q
の分類スコアです。p
複数のカスタム メトリクスを指定し、それぞれにカスタム名を割り当てるには、構造体配列を使用します。組み込みメトリクスとカスタム メトリクスの組み合わせを指定するには、cell ベクトルを使用します。
例: 'Metrics',struct('Metric1',@customMetric1,'Metric2',@customMetric2)
例: 'Metrics',{@customMetric1 @customeMetric2 'logit' struct('Metric3',@customMetric3)}
updateMetrics
および updateMetricsAndFit
は、table で指定したメトリクスを Metrics
プロパティに保存します。Metrics
のデータ型によって、table の行名が決まります。
'Metrics' 値のデータ型 | Metrics プロパティの行名の説明 | 例 |
---|---|---|
string または文字ベクトル | 対応する組み込みメトリクスの名前 | "classiferror" の行名は "ClassificationError" |
構造体配列 | フィールド名 | struct('Metric1',@customMetric1) の行名は "Metric1" |
プログラム ファイルに格納されている関数への関数ハンドル | 関数名 | @customMetric の行名は "customMetric" |
無名関数 | CustomMetric_ 。ここで、 は Metrics のメトリクス
| @(C,S)customMetric(C,S)... の行名は CustomMetric_1 |
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
データ型: char
| string
| struct
| cell
| function_handle
Standardize
— 予測子データを標準化するためのフラグ
'auto'
(既定値) | false
| true
プロパティ
ほとんどのプロパティは、incrementalClassificationLinear
を直接呼び出すときに名前と値のペアの引数の構文のみを使用して設定できます。incrementalLearner
を呼び出して従来式の学習済みモデルを変換するときに、いくつかのプロパティを設定できます。プロパティ FittedLoss
、NumTrainingObservations
、Mu
、Sigma
、SolverOptions
、および IsWarm
は設定できません。
分類モデルのパラメーター
Beta
— 線形モデル係数 β
数値ベクトル
このプロパティは読み取り専用です。
線形モデル係数 β。NumPredictors
行 1 列の数値ベクトルとして指定します。
従来式の学習済みモデルを変換して Mdl
を作成する場合、Beta
は従来式の学習済みモデルの Beta
プロパティの値によって指定されます。それ以外の場合、既定で Beta
は zeros(NumPredictors,1)
です。
データ型: single
| double
Bias
— モデル切片 β0
数値スカラー
このプロパティは読み取り専用です。
モデル切片 β0 またはバイアス項。数値スカラーとして指定します。
従来式の学習済みモデルを変換して Mdl
を作成する場合、Bias
は従来式の学習済みモデルの Bias
プロパティの値によって指定されます。それ以外の場合、既定で Bias
は 0
です。
データ型: single
| double
ClassNames
— 一意のクラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
このプロパティは読み取り専用です。
モデルの学習に使用した一意のクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。incrementalClassificationLinear
は指定された string ベクトルを文字ベクトルの cell 配列として保存します。ClassNames
と応答データは同じデータ型でなければなりません。
従来式の学習済みモデルを変換して
Mdl
を作成する場合、ClassNames
は従来式の学習済みモデルのClassNames
プロパティです。それ以外の場合、インクリメンタル近似関数は学習中に
ClassNames
を推測します。
データ型: single
| double
| logical
| char
| cell
| categorical
FittedLoss
— 線形モデルのあてはめに使用する損失関数
'hinge'
| 'logit'
このプロパティは読み取り専用です。
線形モデルのあてはめに使用する損失関数。'hinge'
または 'logit'
を指定します。
値 | アルゴリズム | 損失関数 | Learner の値 |
---|---|---|---|
'hinge' | サポート ベクター マシン | ヒンジ: | 'svm' |
'logit' | ロジスティック回帰 | 逸脱度 (ロジスティック): | 'logistic' |
Learner
— 線形分類モデルのタイプ
'logistic'
| 'svm'
このプロパティは読み取り専用です。
線形分類モデルのタイプ。'logistic'
または 'svm'
を指定します。
次の表では です。
β は p 個の係数のベクトルです。
x は p 個の予測子変数による観測値です。
b はスカラー バイアスです。
値 | アルゴリズム | 損失関数 | FittedLoss の値 |
---|---|---|---|
'logistic' | ロジスティック回帰 | 逸脱度 (ロジスティック): | 'logit' |
'svm' | サポート ベクター マシン | ヒンジ: | 'hinge' |
従来式の学習済みモデルを変換して Mdl
を作成する場合、Learner
は従来式の学習済みモデルの学習器です。
従来式の学習済みモデルが
ClassificationSVM
またはCompactClassificationSVM
の場合、Learner
は'svm'
です。従来式の学習済みモデルが
ClassificationLinear
の場合、Learner
は従来式の学習済みモデルのLearner
プロパティの値です。
NumPredictors
— 予測子変数の数
0
(既定値) | 非負の数値スカラー
このプロパティは読み取り専用です。
予測子変数の数。非負の数値スカラーとして指定します。
従来式の学習済みモデルを変換して Mdl
を作成する場合、NumPredictors
は従来式の学習済みモデルの対応するプロパティによって指定されます。それ以外の場合、インクリメンタル近似関数は学習中に予測子データから NumPredictors
を推測します。
データ型: double
NumTrainingObservations
— インクリメンタル モデルにあてはめる観測値の数
0
(既定値) | 非負の数値スカラー
このプロパティは読み取り専用です。
インクリメンタル モデル Mdl
にあてはめる観測値の数。非負の数値スカラーとして指定します。NumTrainingObservations
は、Mdl
および学習データを fit
または updateMetricsAndFit
に渡すときに増加します。
メモ
従来式の学習済みモデルを変換して Mdl
を作成する場合、incrementalClassificationLinear
は、従来式の学習済みモデルにあてはめる観測値の数を NumTrainingObservations
に追加しません。
データ型: double
Prior
— 前のクラスの確率
数値ベクトル | 'empirical'
| 'uniform'
このプロパティは読み取り専用です。
前のクラスの確率。次の表の値として指定します。名前と値のペアの引数の構文を使用してこのプロパティを設定できますが、incrementalClassificationLinear
は常に数値ベクトルを格納します。
値 | 説明 |
---|---|
'empirical' | インクリメンタル学習関数が、インクリメンタル学習中 (推定期間 EstimationPeriod の後) に応答データで観測されたクラスの相対頻度から前のクラスの確率を推定します。 |
'uniform' | 各クラスの事前確率を 1/K とします。ここで、K はクラスの数です。 |
数値ベクトル | 正規化されたカスタム事前確率。Prior の要素の順序は ClassNames プロパティの要素に対応します。 |
従来式の学習済みモデルを変換して
Mdl
を作成する場合、incrementalClassificationLinear
は従来式の学習済みモデルのPrior
プロパティを使用します。それ以外の場合は、
Prior
は'empirical'
です。
データ型: single
| double
ScoreTransform
— スコア変換関数
文字ベクトル | string スカラー | 関数ハンドル
このプロパティは読み取り専用です。
インクリメンタル変換関数が生の応答値を変換する方法を記述するスコア変換関数。文字ベクトル、string スカラー、または関数ハンドルとして指定します。incrementalClassificationLinear
は、指定された値を文字ベクトルまたは関数ハンドルとして格納します。
次の表は、スコア変換で使用可能な組み込み関数の一覧です。
値 | 説明 |
---|---|
"doublelogit" | 1/(1 + e–2x) |
"invlogit" | log(x / (1 – x)) |
"ismax" | 最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する |
"logit" | 1/(1 + e–x) |
"none" または "identity" | x (変換なし) |
"sign" | x < 0 のとき –1 x = 0 のとき 0 x > 0 のとき 1 |
"symmetric" | 2x – 1 |
"symmetricismax" | 最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する |
"symmetriclogit" | 2/(1 + e–x) – 1 |
MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。たとえば、'ScoreTransform',@function
では次のようになります。
function
は n 行 K 列の行列 (元のスコア) を受け入れ、同じサイズの行列 (変換されたスコア) を返します。n は観測値の数であり、行列の行 j には、観測値 j のクラス スコアが格納されます。
K クラスの数
numel(ClassNames)
で、列 k はクラスClassNames(
です。k
)
既定の設定では、次のようになります。
従来式の学習済みモデルを変換して
Mdl
を作成する場合、ScoreTransform
は従来式の学習済みモデルの対応するプロパティによって指定されます。たとえば、従来式の学習済みモデルのScoreTransform
プロパティがスコアから事後確率への変換関数である場合、fitPosterior
またはfitSVMPosterior
によって計算されるものとして、Mdl.ScoreTransform
は無名関数を含みます。Learner
が'svm'
のとき、ScoreTransform
は'none'
です。Learner
が'logistic'
のとき、ScoreTransform
は'logit'
です。
データ型: char
| function_handle
学習パラメーター
EstimationPeriod
— ハイパーパラメーターの推定のために処理する観測値の数
非負の整数
このプロパティは読み取り専用です。
ハイパーパラメーターの推定のために、パフォーマンス メトリクスの学習または追跡の前にインクリメンタル モデルが処理する観測値の数。非負の整数として指定します。
メモ
Mdl
をインクリメンタル学習用に準備する場合 (学習に必要なすべてのハイパーパラメーターを指定する必要があります)、incrementalClassificationLinear
は'EstimationPeriod'
を0
に強制します。Mdl
をインクリメンタル学習用に準備しない場合、incrementalClassificationLinear
は'EstimationPeriod'
を1000
に設定します。
詳細は、推定期間を参照してください。
データ型: single
| double
FitBias
— 線形モデルの切片使用フラグ
true
| false
このプロパティは読み取り専用です。
線形モデルの切片使用フラグ。true
または false
として指定します。
値 | 説明 |
---|---|
true | incrementalClassificationLinear は、バイアス項 β0 を、インクリメンタル近似関数がデータにあてはめる線形モデルに含めます。 |
false | incrementalClassificationLinear は β0 = 0 に設定します。 |
Bias
≠ 0 の場合、FitBias
は true
でなければなりません。つまり、incrementalClassificationLinear
は β0 の等式制約をサポートしません。
従来式の学習済み線形分類モデル (ClassificationLinear
) を変換して Mdl
を作成する場合、FitBias
は従来式の学習済みモデルの ModelParameters.FitBias
プロパティの値によって指定されます。
データ型: logical
Mu
— 予測子の平均
数値ベクトル | []
このプロパティは読み取り専用です。
予測子の平均。数値ベクトルを指定します。
Mu
が空の配列 []
で、'Standardize',true
が指定されている場合、インクリメンタル近似関数は、Mu
を EstimationPeriod
で指定された推定期間中に推定された予測子変数の平均に設定します。
Mu
を直接指定することはできません。
データ型: single
| double
Sigma
— 予測子の標準偏差
数値ベクトル | []
このプロパティは読み取り専用です。
予測子の標準偏差。数値ベクトルを指定します。
Sigma
が空の配列 []
で、'Standardize',true
が指定されている場合、インクリメンタル近似関数は、Sigma
を EstimationPeriod
で指定された推定期間中に推定された予測子変数の標準偏差に設定します。
Sigma
を直接指定することはできません。
データ型: single
| double
Solver
— 目的関数の最小化手法
'scale-invariant'
(既定値) | 'sgd'
| 'asgd'
このプロパティは読み取り専用です。
目的関数の最小化手法。次の表の値として指定します。
値 | 説明 | メモ: |
---|---|---|
'scale-invariant' |
| |
'sgd' | 確率的勾配降下法 (SGD) [3][2] |
|
'asgd' | 平均化確率的勾配降下法 (ASGD) [4] |
|
バイナリ分類用の従来式の学習済み線形分類モデル (ClassificationLinear
) を変換して Mdl
を作成する場合、その ModelParameters.Solver
プロパティは 'sgd'
または 'asgd'
であり、Solver
は従来式の学習済みモデルの ModelParameters.Solver
プロパティによって指定されます。
データ型: char
| string
SolverOptions
— 目的ソルバーの構成
構造体配列
このプロパティは読み取り専用です。
目的ソルバーの構成。構造体配列として指定します。SolverOptions
のフィールドは、指定したソルバー Solver
固有のプロパティです。
データ型: struct
SGD および ASGD ソルバーのパラメーター
BatchSize
— ミニバッチのサイズ
正の整数
このプロパティは読み取り専用です。
ミニバッチのサイズ。正の整数として指定します。学習中の各反復で、incrementalClassificationLinear
は min(BatchSize,numObs)
個の観測値を使用して劣勾配を計算します。ここで、numObs
は、fit
または updateMetricsAndFit
に渡される学習データ内の観測値の数です。
バイナリ分類用の従来式の学習済み線形分類モデル (ClassificationLinear
) を変換して Mdl
を作成する場合、その ModelParameters.Solver
プロパティは 'sgd'
または 'asgd'
であり、BatchSize
は従来式の学習済みモデルの ModelParameters.BatchSize
プロパティによって指定されます。それ以外の場合は、既定値は 10
です。
データ型: single
| double
Lambda
— リッジ (L2) 正則化項の強度
非負のスカラー
このプロパティは読み取り専用です。
リッジ (L2) 正則化項の強度。非負のスカラーとして指定します。
リッジ ペナルティがあるバイナリ分類用の従来式の学習済み線形分類モデル (プロパティ Regularization
が 'ridge (L2)'
と等しい ClassificationLinear
オブジェクト) を変換して Mdl
を作成する場合、Lambda
は従来式の学習済みモデルの Lambda
プロパティの値によって指定されます。それ以外の場合は、既定値は 1e-5
です。
データ型: double
| single
LearnRate
— 学習率
'auto'
| 正のスカラー
このプロパティは読み取り専用です。
学習率。'auto'
または正のスカラーとして指定します。LearnRate
は、目的の劣勾配をスケールすることによって最適化のステップ サイズを制御します。
'auto'
を指定した場合、次のようになります。
EstimationPeriod
が0
の場合、初期学習率は0.7
となります。EstimationPeriod
>0
の場合、初期学習率は1/sqrt(1+max(sum(X.^2,obsDim)))
となります。ここで、obsDim
は、観測値が予測子データの列を構成する場合に1
、それ以外の場合に2
となります。fit
およびupdateMetricsAndFit
がモデルおよび学習データを一方に渡すときに値が設定されます。
バイナリ分類用の従来式の学習済み線形分類モデル (ClassificationLinear
) を変換して Mdl
を作成する場合、その ModelParameters.Solver
プロパティは 'sgd'
または 'asgd'
であり、LearnRate
は従来式の学習済みモデルの ModelParameters.LearnRate
プロパティによって指定されます。
LearnRateSchedule
プロパティによって、後続の学習サイクルの学習率が決まります。
データ型: single
| double
| char
| string
LearnRateSchedule
— 学習率スケジュール
'decaying'
(既定値) | 'constant'
このプロパティは読み取り専用です。
学習率スケジュール。次の表の値として指定します。ここで、LearnRate
は初期学習率 ɣ0 を指定します。
値 | 説明 |
---|---|
'constant' | すべての学習サイクルの学習率を ɣ0 とする。 |
'decaying' | 学習サイクル t での学習率を次とする。
|
バイナリ分類用の従来式の学習済み線形分類モデル (ClassificationLinear
) を変換して Mdl
を作成する場合、その ModelParameters.Solver
プロパティは 'sgd'
または 'asgd'
であり、LearnRate
は 'decaying'
となります。
データ型: char
| string
適応型スケール不変ソルバーのオプション
Shuffle
— バッチ内観測値のシャッフル フラグ
true
(既定値) | false
このプロパティは読み取り専用です。
各学習サイクルでのバッチ内観測値のシャッフル フラグ。次の表の値として指定します。
値 | 説明 |
---|---|
true | ソフトウェアが、セットを処理する前に、データの各入力バッチ内の観測値をシャッフルします。このアクションにより、抽出スキームによって誘発されるバイアスが低減されます。 |
false | ソフトウェアが、受信した順序でデータを処理します。 |
データ型: logical
パフォーマンス メトリクス パラメーター
IsWarm
— モデルがパフォーマンス メトリクスを追跡するかどうかを示すフラグ
false
| true
このプロパティは読み取り専用です。
インクリメンタル モデルがパフォーマンス メトリクスを追跡するかどうかを示すフラグ。false
または true
として指定します。インクリメンタル モデル Mdl
は、インクリメンタル近似関数が MetricsWarmupPeriod
個の観測値 (つまり、EstimationPeriod
+ MetricsWarmupPeriod
個の観測値) をインクリメンタル モデルにあてはめた後、"ウォーム" (IsWarm
が true
となる) になります。
値 | 説明 |
---|---|
true | インクリメンタル モデル Mdl がウォームです。この結果、updateMetrics および updateMetricsAndFit が Mdl の Metrics プロパティのパフォーマンス メトリクスを追跡します。 |
false | updateMetrics および updateMetricsAndFit はパフォーマンス メトリクスを追跡しません。 |
データ型: logical
Metrics
— モデルのパフォーマンス メトリクス
テーブル
このプロパティは読み取り専用です。
updateMetrics
および updateMetricsAndFit
によってインクリメンタル学習中に更新されたモデルのパフォーマンス メトリクス。m 行 2 列の table として指定します。ここで、m は、名前と値のペアの引数 'Metrics'
によって指定されたメトリクスの数です。
Metrics
の列には Cumulative
および Window
のラベルが付けられます。
Cumulative
:要素j
は、メトリクスj
で測定される、モデルがウォーム (IsWarm が1
) になった時点からの、モデルの性能です。Window
:要素j
は、メトリクスj
で測定され、MetricsWindowSize
プロパティで指定されたウィンドウ内のすべての観測値に対して評価される、モデルの性能です。ソフトウェアはMetricsWindowSize
個の観測値を処理した後、Window
を更新します。
行には、指定したメトリクスのラベルが付けられます。詳細については、'Metrics'
を参照してください。
データ型: table
MetricsWarmupPeriod
— パフォーマンス メトリクスを追跡する前にあてはめる観測値の数
1000
(既定値) | 非負の整数
このプロパティは読み取り専用です。
インクリメンタル モデルが Metrics
プロパティのパフォーマンス メトリクスを追跡する前にあてはめなければならない観測値の数。非負の整数として指定します。
詳細については、パフォーマンス メトリクスを参照してください。
データ型: single
| double
MetricsWindowSize
— ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数
200
(既定値) | 正の整数
このプロパティは読み取り専用です。
ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数。正の整数として指定します。
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
データ型: single
| double
オブジェクト関数
fit | インクリメンタル学習用の線形モデルの学習 |
updateMetricsAndFit | インクリメンタル学習用の線形モデルの新しいデータに基づくパフォーマンス メトリクスの更新とモデルの学習 |
updateMetrics | インクリメンタル学習用の線形モデルの新しいデータに基づくパフォーマンス メトリクスの更新 |
loss | データのバッチでのインクリメンタル学習用線形モデルの損失 |
predict | インクリメンタル学習用の線形モデルからの新しい観測の応答予測 |
例
事前情報なしでのインクリメンタル学習器の作成
バイナリ分類用の既定のインクリメンタル線形 SVM モデルを作成します。
Mdl = incrementalClassificationLinear()
Mdl = incrementalClassificationLinear IsWarm: 0 Metrics: [1x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' Beta: [0x1 double] Bias: 0 Learner: 'svm' Properties, Methods
Mdl
は incrementalClassificationLinear
モデル オブジェクトです。そのプロパティはすべて読み取り専用です。
Mdl
は、他の演算の実行に使用する前に、データにあてはめなければなりません。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(1); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
応答は、次の 5 つのクラスのいずれかになります。座る、立つ、歩く、走る、または踊る。被験者が移動しているかどうか (actid
> 2) を基準に、応答を二分します。
Y = Y > 2;
関数 updateMetricsAndfit
を使用して、インクリメンタル モデルを学習データにあてはめます。50 個の観測値のチャンクを一度に処理して、データ ストリームをシミュレートします。各反復で次を行います。
50 個の観測値を処理。
前のインクリメンタル モデルを、入力観測値にあてはめた新しいモデルで上書き。
、累積メトリクス、およびウィンドウ メトリクスを保存し、インクリメンタル学習中にそれらがどのように進化するかを確認。
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); beta1 = zeros(nchunk,1); % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = updateMetricsAndFit(Mdl,X(idx,:),Y(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; beta1(j + 1) = Mdl.Beta(1); end
IncrementalMdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationLinear
モデル オブジェクトです。インクリメンタル学習中およびモデルがウォームアップされた後、updateMetricsAndFit
は入力観測値でのモデルの性能をチェックし、モデルをその観測値にあてはめます。
パフォーマンス メトリクスと が学習中にどのように進化したかを確認するには、それらを別々のサブプロットにプロットします。
figure; subplot(2,1,1) plot(beta1) ylabel('\beta_1') xlim([0 nchunk]); xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); subplot(2,1,2) h = plot(ce.Variables); xlim([0 nchunk]); ylabel('Classification Error') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.'); legend(h,ce.Properties.VariableNames) xlabel('Iteration')
プロットは、updateMetricsAndFit
が次を行うことを示しています。
をインクリメンタル学習のすべての反復であてはめる。
パフォーマンス メトリクスをメトリクスのウォームアップ期間後にのみ計算。
累積メトリクスを各反復中に計算。
ウィンドウ メトリクスを 500 個の観測値の処理後に計算。
インクリメンタル学習オプションの構成
メトリクスのウォームアップ期間を指定して、インクリメンタル バイナリ SVM 学習器を準備します。その間、関数 updateMetricsAndFit
はモデルのあてはめのみを行います。メトリクス ウィンドウ サイズを観測値 500 個に指定します。SGD を使用してモデルに学習させ、SGD バッチ サイズ、学習率、および正則化パラメーターを調整します。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity
n = numel(actid);
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
応答は、次の 5 つのクラスのいずれかになります。座る、立つ、歩く、走る、または踊る。被験者が移動しているかどうか (actid
> 2) を基準に、応答を二分します。
Y = Y > 2;
バイナリ分類用のインクリメンタル線形モデルを作成します。次のようにモデルを構成します。
インクリメンタル近似関数で生の (標準化されていない) 予測子データを処理するように指定。
SGD ソルバーを指定。
リッジ正則化パラメーター値 0.001、SGD バッチ サイズ 20、および学習率 0.002 で、問題に対して十分に機能すると仮定。
メトリクスのウォームアップ期間を観測値 5000 個に指定。
メトリクス ウィンドウ サイズを観測値 500 個に指定。
分類およびヒンジ エラー メトリクスを追跡して、モデルの性能を測定。
Mdl = incrementalClassificationLinear('Standardize',false,... 'Solver','sgd','Lambda',0.001,'BatchSize',20,'LearnRate',0.002,... 'MetricsWarmupPeriod',5000,'MetricsWindowSize',500,... 'Metrics',{'classiferror' 'hinge'})
Mdl = incrementalClassificationLinear IsWarm: 0 Metrics: [2x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' Beta: [0x1 double] Bias: 0 Learner: 'svm' Properties, Methods
Mdl
はインクリメンタル学習用に構成された incrementalClassificationLinear
モデル オブジェクトです。
関数 updateMetricsAndfit
を使用して、インクリメンタル モデルを残りのデータにあてはめます。各反復で次を行います。
50 個の観測値のチャンクを処理して、データ ストリームをシミュレート。チャンクのサイズと SGD バッチ サイズは異なることに注意してください。
前のインクリメンタル モデルを、入力観測値にあてはめた新しいモデルで上書き。
推定係数 、累積メトリクス、およびウィンドウ メトリクスを保存し、インクリメンタル学習中にそれらがどのように進化するかを確認。
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); hinge = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); beta10 = 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 = updateMetricsAndFit(Mdl,X(idx,:),Y(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; hinge{j,:} = Mdl.Metrics{"HingeLoss",:}; beta10(j + 1) = Mdl.Beta(10); end
IncrementalMdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationLinear
モデル オブジェクトです。インクリメンタル学習中およびモデルがウォームアップされた後、updateMetricsAndFit
は入力観測値でのモデルの性能をチェックし、モデルをその観測値にあてはめます。
パフォーマンス メトリクスと が学習中にどのように進化したかを確認するには、それらを別々のサブプロットにプロットします。
figure; subplot(2,2,1) plot(beta10) ylabel('\beta_{10}') xlim([0 nchunk]); xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); xlabel('Iteration') subplot(2,2,2) h = plot(ce.Variables); xlim([0 nchunk]); ylabel('Classification Error') xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); legend(h,ce.Properties.VariableNames) xlabel('Iteration') subplot(2,2,3) h = plot(hinge.Variables); xlim([0 nchunk]); ylabel('Hinge Loss') xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); legend(h,hinge.Properties.VariableNames) xlabel('Iteration')
プロットは、updateMetricsAndFit
が次を行うことを示しています。
をインクリメンタル学習のすべての反復であてはめる。
パフォーマンス メトリクスをメトリクスのウォームアップ期間後にのみ計算。
累積メトリクスを各反復中に計算。
ウィンドウ メトリクスを 500 個の観測値 (10 回の反復) の処理後に計算。
従来式の学習済みモデルのインクリメンタル学習器への変換
fitclinear
を使用してバイナリ分類用の線形モデルに学習させ、それをインクリメンタル学習器に変換し、その性能を追跡し、ストリーミング データにあてはめます。学習オプションを従来式からインクリメンタル学習に引き継ぎます。
データの読み込みと前処理
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。予測子データの観測値を列に配置します。
load humanactivity rng(1); % For reproducibility n = numel(actid); idx = randsample(n,n); X = feat(idx,:)'; Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
応答は、次の 5 つのクラスのいずれかになります。座る、立つ、歩く、走る、または踊る。被験者が移動しているかどうか (actid
> 2) を基準に、応答を二分します。
Y = Y > 2;
被験者がアイドル (Y
= false
) だったときの収集データが、被験者が移動していたときのデータの倍の品質であると仮定します。アイドルの被験者から収集した観測値に 2 を割り当て、移動している被験者から収集した観測値に 1 を割り当てる重み変数を作成します。
W = ones(n,1) + ~Y;
バイナリ分類用の線形モデルの学習
バイナリ分類用の線形モデルを、データの半分から取った無作為標本にあてはめます。
idxtt = randsample([true false],n,true); TTMdl = fitclinear(X(:,idxtt),Y(idxtt),'ObservationsIn','columns',... 'Weights',W(idxtt))
TTMdl = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'none' Beta: [60x1 double] Bias: -0.1107 Lambda: 8.2967e-05 Learner: 'svm' Properties, Methods
TTMdl
は、バイナリ分類用の従来式の学習済み線形モデルを表す ClassificationLinear
モデル オブジェクトです。
学習済みモデルの変換
従来式の学習済み分類モデルを、インクリメンタル学習用のバイナリ分類線形モデルに変換します。
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationLinear IsWarm: 1 Metrics: [1x2 table] ClassNames: [0 1] ScoreTransform: 'none' Beta: [60x1 double] Bias: -0.1107 Learner: 'svm' Properties, Methods
パフォーマンス メトリクスの追跡とモデルのあてはめの個別の実行
関数 updateMetrics
および fit
を使用して、残りのデータに対してインクリメンタル学習を実行します。50 個の観測値を一度に処理して、データ ストリームをシミュレートします。各反復で次を行います。
updateMetrics
を呼び出し、観測値の入力チャンクを所与として、モデルの分類誤差の累積とウィンドウを更新します。前のインクリメンタル モデルを上書きして、Metrics
プロパティ内の損失を更新します。関数がモデルをデータ チャンクにあてはめないことに注意してください。チャンクはモデルに対して "新しい" データです。観測値の向きを列方向に指定し、観測値の重みを指定します。fit
を呼び出して、観測値の入力チャンクにモデルをあてはめます。前のインクリメンタル モデルを上書きして、モデル パラメーターを更新します。観測値の向きを列方向に指定し、観測値の重みを指定します。分類誤差と推定された最初の係数 を保存します。
% Preallocation idxil = ~idxtt; nil = sum(idxil); numObsPerChunk = 50; nchunk = floor(nil/numObsPerChunk); ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); beta1 = [IncrementalMdl.Beta(1); zeros(nchunk,1)]; 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),... 'ObservationsIn','columns','Weights',Wil(idx)); ce{j,:} = IncrementalMdl.Metrics{"ClassificationError",:}; IncrementalMdl = fit(IncrementalMdl,Xil(:,idx),Yil(idx),'ObservationsIn','columns',... 'Weights',Wil(idx)); beta1(j + 1) = IncrementalMdl.Beta(end); end
IncrementalMdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationLinear
モデル オブジェクトです。
あるいは、updateMetricsAndFit
を使用して、新しいデータ チャンクに対するモデルのパフォーマンス メトリクスを更新し、モデルをデータにあてはめることもできます。
パフォーマンス メトリクスと推定された係数 のトレース プロットをプロットします。
figure; subplot(2,1,1) h = plot(ce.Variables); xlim([0 nchunk]); ylabel('Classification Error') legend(h,ce.Properties.VariableNames) subplot(2,1,2) plot(beta1) ylabel('\beta_1') xlim([0 nchunk]); xlabel('Iteration')
累積の損失は安定しており徐々に減少しますが、ウィンドウの損失には急な変動があります。
はまず急激に変動した後、fit
がより多くのチャンクを処理するにつれて徐々に平坦になります。
詳細
インクリメンタル学習
"インクリメンタル学習" ("オンライン学習") は、予測子変数の分布、予測関数や目的関数の要素 (調整パラメーターの値を含む)、観測値のラベル付けなどがほとんど未知、またはまったく未知の可能性のある、データ ストリームからの入力データの処理に着目した、機械学習の一分野です。インクリメンタル学習が従来の機械学習と異なっているのは、モデルへのあてはめ、ハイパーパラメーター調整のための交差検証の実行、および予測子の分布の推測を行うために、十分にラベル付けされたデータを使用できるということです。
入力観測値に対し、インクリメンタル学習モデルは、次のいずれかの方法 (通常はこの順序) でデータを処理します。
ラベルの予測。
予測性能の測定。
モデルの構造的な破綻やドリフトについてのチェック。
入力観測値へのモデルのあてはめ。
インクリメンタル学習用の適応型スケール不変ソルバー
"インクリメンタル学習用の適応型スケール不変ソルバー" ([1]で紹介) は、線形予測モデルに学習させるための勾配降下法ベースの目的ソルバーです。ソルバーはハイパーパラメーターを持たず、予測子変数のスケールの違いの影響を受けず、予測子変数の分布の事前知識が不要です。これらの特徴は、インクリメンタル学習に適しています。
標準 SGD および ASGD ソルバーは、予測子変数間のスケールの違いの影響を受けやすいため、モデルの性能低下につながることがあります。SGD および ASGD を使用して精度を向上させるには、予測子データを標準化し、正則化を調整できます。さらに、学習率パラメーターの調整が必要になることがあります。従来の機械学習では、交差検証と予測子を標準化してハイパーパラメーター調整を行うのに十分なデータが利用できます。しかし、インクリメンタル学習の場合、十分なデータが利用できず (たとえば、観測値が一度に 1 つしか利用できない場合があります)、予測子の分布が未知である場合があります。このような特徴があるため、インクリメンタル学習中のパラメーター調整と予測子の標準化は困難または不可能です。
分類用のインクリメンタル近似関数 fit
および updateMetricsAndFit
は、アルゴリズムのより積極的な ScInOL2 バージョンを使用します。
ヒント
モデルを作成した後で、データ ストリームについてインクリメンタル学習を実行する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。
アルゴリズム
推定期間
推定期間中、インクリメンタル近似関数 fit
および updateMetricsAndFit
は、最初の EstimationPeriod
個の入力観測値を使用して、インクリメンタル学習に必要なハイパーパラメーターを推定 (調整) します。次の表は、ハイパーパラメーターとそれらが推定または調整される条件について説明します。推定は EstimationPeriod
が正の場合にのみ発生します。
ハイパーパラメーター | モデル プロパティ | 使用 | ハイパーパラメーターの推定 |
---|---|---|---|
予測子の平均および標準偏差 |
| 標準化された予測子データ | 次のいずれの条件にもあてはまる場合
|
学習率 | LearnRate | ソルバーのステップ サイズの調整 | 次のいずれの条件にもあてはまる場合
|
関数は、最後の推定期間の観測値のみをインクリメンタル モデルにあてはめ、モデルの性能の追跡にはそのいかなる観測値も使用しません。推定期間の満了時に、関数はハイパーパラメーターを格納するプロパティを更新します。
データの標準化
予測子変数を標準化するようにインクリメンタル学習関数が構成されている場合、インクリメンタル学習モデル Mdl
の Mu
および Sigma
プロパティに保存されている平均と標準偏差を使用して標準化が行われます。
'Standardize',true
と正の推定期間 (EstimationPeriod を参照) が設定されていて、Mdl.Mu
とMdl.Sigma
が空の場合、インクリメンタル近似関数は、推定期間の観測値を使用して平均と標準偏差を推定します。'Standardize','auto'
を設定すると (既定の設定)、次の条件が適用されます。従来式の学習済みバイナリ線形 SVM モデル (
ClassificationSVM
またはCompactClassificationSVM
) を変換してincrementalClassificationLinear
を作成する場合、従来式の学習済みモデルのMu
およびSigma
プロパティは空の配列[]
となり、インクリメンタル学習関数は予測子変数を標準化しません。従来式の学習済みモデルのMu
およびSigma
プロパティが空でない場合、インクリメンタル学習関数は、指定された平均と標準偏差を使用して予測子変数を標準化します。インクリメンタル近似関数は、推定期間の長さにかかわらず、新しい平均と標準偏差を推定しません。線形分類モデル (
ClassificationLinear
) を変換してincrementalClassificationLinear
を作成する場合、インクリメンタル学習関数は、推定期間の長さにかかわらず、データを標準化しません。従来式の学習済みモデルを変換するのでない場合、インクリメンタル学習関数は、SGD ソルバー (
Solver
を参照) と正の推定期間 (EstimationPeriod を参照) が指定されている場合にのみ予測子データを標準化します。
インクリメンタル近似関数が予測子の平均と標準偏差を推定するとき、関数は推定期間の観測値を使用して加重平均と加重標準偏差を計算します。具体的には、関数は予測子 j (xj) の標準化のために次を使用します。
xj は予測子 j、xjk は推定期間内の予測子 j の観測値 k です。
pk はクラス k の事前確率です (インクリメンタル モデルの
Prior
プロパティ)。wj は観測値の重み j です。
パフォーマンス メトリクス
関数
updateMetrics
およびupdateMetricsAndFit
は、インクリメンタル モデルが "ウォーム" (IsWarm プロパティ) のときに、新しいデータからモデルのパフォーマンス メトリクス ('Metrics'
) を追跡します。インクリメンタル モデルは、fit
またはupdateMetricsAndFit
がインクリメンタル モデルを MetricsWarmupPeriod 個の観測値 ("メトリクスのウォームアップ期間") にあてはめた後、ウォームになります。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 個の測定値を使用します。
参照
[1] Kempka, Michał, Wojciech Kotłowski, and Manfred K. Warmuth. "Adaptive Scale-Invariant Online Algorithms for Learning Linear Models." CoRR (February 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.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
incrementalClassificationLinear
モデル オブジェクトのすべてのオブジェクト関数でコード生成がサポートされます。データをシャッフルするように
Mdl
を構成した場合 (Solver および Shuffle を参照)、関数fit
は、モデルをバッチにあてはめる前に観測値の各入力バッチを無作為にシャッフルします。シャッフルされた観測値の順序は、MATLAB で生成される順序と一致しないことがあります。incrementalClassificationLinear
モデル オブジェクトを読み込むか作成するコードを生成する場合、次の制限が適用されます。事後確率をスコアとして返すように構成された変換済み SVM モデルを
Mdl
で表現することはできません。予測されるすべてのクラス名を
ClassNames
プロパティに含めなければなりません。予測子変数の数を
NumPredictors
プロパティに反映しなければなりません。
詳細は、コード生成の紹介を参照してください。
バージョン履歴
参考
関数
オブジェクト
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)