ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

templateLinear

線形分類学習器テンプレート

templateLinear は、マルチクラス問題の高次元データに線形分類モデルをあてはめるために適したテンプレートを作成します。

このテンプレートでは、バイナリ学習器モデル、正則化のタイプおよび強度、ソルバーなどを指定します。テンプレートの作成後、テンプレートとデータを fitcecoc に渡して、モデルに学習をさせます。

構文

t = templateLinear()
t = templateLinear(Name,Value)

説明

t = templateLinear() は、線形分類学習器テンプレートを返します。

既定のテンプレートを指定する場合、学習中のすべての入力引数には既定値が使用されます。

t = templateLinear(Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用してテンプレートを返します。たとえば、ロジスティック回帰の実装、正則化のタイプまたは強度、目的関数の最小化に使用するソルバーを指定できます。

t をコマンド ウィンドウに表示した場合、名前と値のペアの引数を使用して指定したオプションを除くすべてのオプションが空 ([]) として表示されます。学習中、空のオプションに既定値が使用されます。

すべて折りたたむ

複数のバイナリ線形分類モデルから構成されている ECOC モデルに学習をさせます。

NLP のデータセットを読み込みます。

load nlpdata

X は予測子データのスパース行列、Y はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。

既定の線形分類モデル テンプレートを作成します。

t = templateLinear();

既定値を調整する方法については、templateLinear のページの名前と値のペアの引数を参照してください。

複数のバイナリ線形分類モデルから構成されている ECOC モデルに学習をさせます。これらの分類モデルは、ドキュメンテーション Web ページにおける単語の度数分布から製品を特定できます。学習時間を短縮するため、予測子データを転置し、観測値が列に対応することを指定します。

X = X';
rng(1); % For reproducibility 
Mdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')
Mdl = 
  classreg.learning.classif.CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: [1x13 categorical]
    ScoreTransform: 'none'
    BinaryLearners: {78x1 cell}
      CodingMatrix: [13x78 double]


  Properties, Methods

または、'Learners','Linear' を使用して、既定の線形分類モデルから構成されている ECOC モデルに学習をさせることができます。

メモリを節約するため、fitcecoc は線形分類学習器から構成されている学習済みの ECOC モデルを CompactClassificationECOC モデル オブジェクトで返します。

入力引数

すべて折りたたむ

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で閉じなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: 'Learner','logistic','Regularization','lasso','CrossVal','on' は、LASSO ペナルティがあるロジスティック回帰と 10 分割の交差検証を実装するように指定します。

線形分類のオプション

すべて折りたたむ

正則化項の強度。'Lambda''auto'、非負のスカラーまたは非負値のベクトルから構成されるコンマ区切りのペアとして指定します。

  • 'auto' の場合、Lambda = 1/n です。

    • 交差検証の名前と値のペアの引数 (CrossVal など) を指定した場合、n は分割内観測値の数です。

    • それ以外の場合、n は学習標本のサイズです。

  • 非負値のベクトルの場合、Lambda の異なる値それぞれについて目的関数の最適化が逐次的に昇順で実行されます。

    • Solver'sgd' または 'asgd'Regularization'lasso' の場合、前回の係数の推定値が次回の最適化反復のウォーム スタートとして使用されることはありません。それ以外の場合、ウォーム スタートが使用されます。

    • Regularization'lasso' の場合、Lambda の以後の値を使用して最適化を行うときに、係数の推定値 0 は値が保持されます。

    すべての最適化の反復について係数の推定値を返します。

例: 'Lambda',10.^(-(10:-2:2))

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

線形分類モデルのタイプ。'Learner''svm' または 'logistic' から構成されるコンマ区切りのペアとして指定します。

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

  • β は p 個の係数のベクトルです。

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

  • b はスカラー バイアスです。

アルゴリズム応答の範囲損失関数
'svm'サポート ベクター マシンy ∊ {–1,1}。陽性クラスの場合は 1、それ以外の場合は –1ヒンジ: [y,f(x)]=max[0,1yf(x)]
'logistic'ロジスティック回帰'svm' と同じ逸脱度 (ロジスティック): [y,f(x)]=log{1+exp[yf(x)]}

例: 'Learner','logistic'

複雑度ペナルティのタイプ。'Regularization''lasso' または 'ridge' から構成されるコンマ区切りのペアとして指定します。

最小化のための目的関数は、平均損失関数 (Learner を参照) と次の表の正則化項を加算することにより作成されます。

説明
'lasso'LASSO (L1) ペナルティ: λj=1p|βj|
'ridge'リッジ (L2) ペナルティ: λ2j=1pβj2

正則化項の強度 (式の λ) を指定するには、Lambda を使用します。

バイアス項 (β0) は正則化ペナルティから除外されます。

Solver'sparsa' の場合、Regularization の既定値は 'lasso' になります。それ以外の場合は、既定値は 'ridge' です。

ヒント

  • 予測子変数を選択する場合は、'lasso' を指定します。

  • 最適化の精度を向上させるには、'ridge' を指定します。

例: 'Regularization','lasso'

目的関数の最小化手法。'Solver' と次の表の値をもつ文字ベクトル、string スカラー、string 配列、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。

説明制限
'sgd'確率的勾配降下法 (SGD) [5][3] 
'asgd'平均化確率的勾配降下法 (ASGD) [8] 
'dual'SVM 用の双対 SGD [2][7]Regularization'ridge'Learner'svm' でなければなりません。
'bfgs'Broyden-Fletcher-Goldfarb-Shanno 準ニュートン アルゴリズム (BFGS) [4]X の次元数が非常に多い場合は非効率的です。
'lbfgs'記憶制限 BFGS (LBFGS) [4]Regularization'ridge' でなければなりません。
'sparsa'可分近似によるスパース再構成 (SpaRSA) [6]Regularization'lasso' でなければなりません。

指定する項目によって、内容は次のように変わります。

  • 予測子データセットに 100 個以下の予測子変数が格納されている場合にリッジ ペナルティ (Regularization を参照) を指定すると、既定のソルバーは 'bfgs' になります。

  • 予測子データセットに 100 個より多い予測子変数が格納されている場合に SVM モデル (Learner を参照) とリッジ ペナルティを指定すると、既定のソルバーは 'dual' になります。

  • 予測子データセットに 100 個以下の予測子変数が格納されている場合に LASSO ペナルティを指定すると、既定のソルバーは 'sparsa' になります。

それ以外の場合、既定のソルバーは 'sgd' になります。

選択するソルバーの詳細は、ヒントを参照してください。

例: 'Solver',{'sgd','lbfgs'}

線形係数の初期推定値 (β)、'Beta' と p 次元の数値ベクトルまたは p 行 L 列の数値行列から構成されるコンマ区切りのペアとして指定します。p は X の予測子変数の数、L は正則化強度値の数です (詳細については、Lambda を参照)。

  • p 次元ベクトルを指定した場合、次のプロセスを使用して目的関数が L 回最適化されます。

    1. 初期値として Beta、正則化強度として Lambda の最小値を使用して最適化を行う。

    2. 前回の最適化で生成された推定値をウォーム スタートとして使用し、Lambda 内の次に小さい値を正則化強度として使用して、再度最適化を行う。

    3. Lambda の値をすべて使用するまでステップ 2 を繰り返す。

  • p 行 L 列の行列を指定した場合、目的関数が L 回最適化されます。反復 j では、初期値として Beta(:,j) が使用され、Lambda を昇順で並べ替えた後で正則化強度として Lambda(j) が使用されます。

'Solver','dual' を設定した場合、Beta は無視されます。

データ型: single | double

切片の初期推定値 (b)。'Bias' と数値スカラーまたは L 次元の数値ベクトルから構成されるコンマ区切りのペアとして指定します。L は正則化強度値の数です (詳細については、Lambda を参照)。

  • スカラーを指定した場合、次のプロセスを使用して目的関数が L 回最適化されます。

    1. 初期値として Bias、正則化強度として Lambda の最小値を使用して最適化を行う。

    2. 生成された推定値を次回の最適化の反復でウォーム スタートとして使用し、Lambda 内の次に小さい値を正則化強度として使用する。

    3. Lambda の値をすべて使用するまでステップ 2 を繰り返す。

  • L 次元ベクトルを指定した場合、目的関数が L 回最適化されます。反復 j では、初期値として Bias(j) が使用され、Lambda を昇順で並べ替えた後で正則化強度として Lambda(j) が使用されます。

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

    • Learner'logistic' の場合、gjY(j) が陽性クラスであれば 1、そうでなければ -1 になります。Bias は、学習の場合は g の、交差検証の場合は分割内観測値の加重平均になります。

    • Learner'svm' の場合、Bias は 0 になります。

データ型: single | double

線形モデルの切片使用フラグ。'FitBias'true または false から構成されるコンマ区切りのペアとして指定します。

説明
true線形モデルにバイアス項 b が追加され、推定されます。
false推定時に b = 0 に設定されます。

例: 'FitBias',false

データ型: logical

最適化後に線形モデルの切片をあてはめるフラグ。'PostFitBias'true または false から構成されるコンマ区切りのペアとして指定します。

説明
false最適化時にバイアス項 b と係数 β が推定されます。
true

b を推定するため、以下が行われます。

  1. モデルを使用して β と b を推定する

  2. 分類スコアを推定する

  3. 最大精度が得られる分類スコアのしきい値を設定して b を再度あてはめる

true を指定する場合、FitBias は true でなければなりません。

例: 'PostFitBias',true

データ型: logical

詳細レベル。'Verbose'0 または 1 のいずれかから構成されるコンマ区切りのペアとして指定します。Verbose は、コマンド ラインにおける診断情報の表示を制御します。

説明
0templateLinear は診断情報を表示しません。
1templateLinear は、目的関数の値、勾配の大きさ、および他の診断情報を定期的に表示します。

例: 'Verbose',1

データ型: single | double

SGD および ASGD ソルバーのオプション

すべて折りたたむ

ミニバッチのサイズ。'BatchSize' と正の整数から構成されるコンマ区切りのペアとして指定します。各反復では、学習データの観測値を BatchSize 個使用して勾配が推定されます。

  • 予測子データが数値行列の場合、既定値は 10 です。

  • 予測子データがスパース行列の場合、既定値は max([10,ceil(sqrt(ff))]) です。ここで、ff = numel(X)/nnz(X) (X"スパース性係数") です。

例: 'BatchSize',100

データ型: single | double

学習率。'LearnRate' と正のスカラーから構成されるコンマ区切りのペアとして指定します。LearnRate では、各反復で実行するステップの回数を指定します。各反復では、各ステップの方向と大きさが勾配により指定されます。

  • Regularization'ridge' の場合、LearnRate は初期学習率 γ0 を指定します。反復 t の学習率 γt は、次の式を使用して決定されます。

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

    • λ は Lambda の値です。

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

    • Solver'asgd' の場合、c は 0.75 です [7]

  • Regularization'lasso' の場合、すべての反復について LearnRate は一定になります。

既定の設定では、LearnRate1/sqrt(1+max((sum(X.^2,obsDim)))) です。obsDim は、観測値が予測子データ X の列から構成されている場合は 1、それ以外の場合は 2 です。

例: 'LearnRate',0.01

データ型: single | double

発散 (最小値の限度を超える状態) が検出された場合に学習率を減少させるフラグ。'OptimizeLearnRate'true または false から構成されるコンマ区切りのペアとして指定します。

OptimizeLearnRate'true' の場合、次のようになります。

  1. 数回の最適化反復について、LearnRate を学習率として使用して最適化が開始される。

  2. 目的関数の値が増加した場合、現在の学習率の半分の値を使用して再開される。

  3. 目的関数が減少するまで、ステップ 2 が繰り返される。

例: 'OptimizeLearnRate',true

データ型: logical

LASSO 切り捨て実行間のミニバッチの回数。'TruncationPeriod' と正の整数から構成されるコンマ区切りのペアとして指定します。

切り捨て実行の後で、ソフトしきい値が線形係数に適用されます。つまり、k = TruncationPeriod 回のミニバッチが処理された後で、次を使用して係数推定 j が切り捨てられます。

β^j={β^jutifβ^j>ut,0if|β^j|ut,β^j+utifβ^j<ut.

  • SGD の場合、β^j はミニバッチを次を満たす k の回数処理した後の係数 j の推定値です。ut=kγtλ.γt は反復 t における学習率です。λ は Lambda の値です。

  • ASGD の場合、β^j はミニバッチを次を満たす k の回数処理した後の係数 j の平均推定値です。ut=kλ.

Regularization'ridge' の場合、TruncationPeriod は無視されます。

例: 'TruncationPeriod',100

データ型: single | double

SGD と ASGD の収束制御

すべて折りたたむ

バッチを処理する最大回数。'BatchLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。BatchLimit 回のバッチが処理されると、最適化が終了します。

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

    • データを通す回数は PassLimit 回です。

    • 複数のソルバーを指定し、SGD または ASGD を使用して次のソルバーの初期近似値を取得する場合、既定値は ceil(1e6/BatchSize) です。BatchSize は名前と値のペアの引数 'BatchSize' の値です。

  • 'BatchLimit''PassLimit' を指定した場合、処理する観測値の数が最も少なくなる引数が選択されます。

  • 'BatchLimit' を指定し、'PassLimit' は指定しなかった場合、データ全体を完全に 1 回通すのに十分な回数のバッチが処理されます。

例: 'BatchLimit',100

データ型: single | double

線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

Bt=[βtbt] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。BtBt1Bt2<BetaTolerance になると最適化が終了します。

Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

例: 'BetaTolerance',1e-6

データ型: single | double

次回の収束チェックの前にバッチを処理する回数。'NumCheckConvergence' と正の整数から構成されるコンマ区切りのペアとして指定します。

バッチのサイズの指定について、BatchSize を参照してください。

既定の設定では、データセット全体が通されるたびに約 10 回収束がチェックされます。

例: 'NumCheckConvergence',100

データ型: single | double

データを通す最大回数。'PassLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。

データが完全に 1 回通されると、すべての観測値が処理されます。

データが通される回数が PassLimit になると、最適化が終了します。

'BatchLimit'PassLimit を指定した場合、処理する観測値の数が最も少なくなる引数が選択されます。

例: 'PassLimit',5

データ型: single | double

双対 SGD の収束制御

すべて折りたたむ

線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

Bt=[βtbt] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。BtBt1Bt2<BetaTolerance になると最適化が終了します。

DeltaGradientTolerance も指定した場合、いずれかの終了条件が満たされると最適化が終了します。

Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

例: 'BetaTolerance',1e-6

データ型: single | double

上位および下位プールのカルーシュ・キューン・タッカー (KKT) 相補性条件違反値の間における勾配差分の許容誤差。'DeltaGradientTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

  • KKT 違反値の大きさが DeltaGradientTolerance より小さい場合、最適化が終了します。

  • Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

例: 'DeltaGapTolerance',1e-2

データ型: double | single

次回の収束チェックの前に処理するデータセット全体が通される回数。'NumCheckConvergence' と正の整数から構成されるコンマ区切りのペアとして指定します。

例: 'NumCheckConvergence',100

データ型: single | double

データを通す最大回数。'PassLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。

データが完全に 1 回通されると、すべての観測値が処理されます。

データが通される回数が PassLimit になると、最適化が終了します。

例: 'PassLimit',5

データ型: single | double

BFGS、LBFGS および SpaRSA の収束制御

すべて折りたたむ

線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

Bt=[βtbt] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。BtBt1Bt2<BetaTolerance で最適化が終了します。

GradientTolerance も指定した場合、いずれかの終了条件が満たされると最適化が終了します。

Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

例: 'BetaTolerance',1e-6

データ型: single | double

勾配の絶対許容誤差。'GradientTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

最適化反復 t における係数およびバイアス項に関する目的関数の勾配ベクトルを t とします。t=max|t|<GradientTolerance で最適化が終了します。

BetaTolerance も指定した場合、いずれかの終了条件が満たされると最適化が終了します。

指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

例: 'GradientTolerance',1e-5

データ型: single | double

ヘッセ近似の履歴バッファーのサイズ。'HessianHistorySize' と正の整数から構成されるコンマ区切りのペアとして指定します。各反復において、最新の HessianHistorySize 回の反復の統計量を使用してヘッシアンが構成されます。

SpaRSA の場合、'HessianHistorySize' はサポートされません。

例: 'HessianHistorySize',10

データ型: single | double

最適化反復の最大回数。'IterationLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。IterationLimit は、Solver の値が 'bfgs''lbfgs' または 'sparsa' である場合に適用されます。

例: 'IterationLimit',500

データ型: single | double

出力引数

すべて折りたたむ

線形分類モデル学習器テンプレート。テンプレート オブジェクトとして返されます。マルチクラス問題の場合に高次元データを使用して線形分類モデルに学習をさせるには、tfitcecoc に渡します。

コマンド ウィンドウに t を表示する場合、すべての未指定のオプションは空 ([]) で表示されます。しかし、空のオプションは学習中に対応する既定値に置き換えられます。

詳細

すべて折りたたむ

ウォーム スタート

"ウォーム スタート" は、収束時間を短縮するために最適化ルーチンに与えられるベータ係数およびバイアス項の初期推定値です。

ヒント

  • 観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定することをお勧めします。このようにすると、最適化実行時間が大幅に短縮される可能性があります。

  • 予測子データが高次元で Regularization'ridge' の場合に最適化の精度を向上させるには、次の Solver の組み合わせのいずれかを設定します。

    • 'sgd'

    • 'asgd'

    • 'dual' (Learner'svm' の場合)

    • {'sgd','lbfgs'}

    • {'asgd','lbfgs'}

    • {'dual','lbfgs'} (Learner'svm' の場合)

    他の組み合わせでは、最適化の精度が低下する可能性があります。

  • 予測子データが中~低次元で Regularization'ridge' の場合に最適化の精度を向上させるには、Solver'bfgs' に設定します。

  • Regularization'lasso' の場合、次の Solver の組み合わせのいずれかを設定します。

    • 'sgd'

    • 'asgd'

    • 'sparsa'

    • {'sgd','sparsa'}

    • {'asgd','sparsa'}

  • SGD と ASGD のいずれかを選択する場合、以下を考慮します。

    • SGD は反復あたりの時間が短くなりますが、収束するまでに必要な反復回数が多くなります。

    • ASGD は収束するまでに必要な反復回数が少なくなりますが、反復あたりの時間が長くなります。

  • 予測子データに含まれている観測値の数が少なく、予測子変数の数が多い場合、次のようにします。

    • 'PostFitBias',true を指定します。

    • ソルバーが SGD または ASGD の場合、PassLimit を 1 より大きい正の整数 (5 や 10 など) に設定します。このように設定すると、多くの場合に精度が向上します。

  • ソルバーが SGD または ASGD の場合、BatchSize は収束速度に影響を与えます。

    • BatchSize が小さすぎる場合、最小値を計算するための反復回数は多くなりますが、反復ごとの勾配の計算時間は短くなります。

    • BatchSize が大きすぎる場合、最小値を計算するための反復回数は少なくなりますが、反復ごとの勾配の計算時間は長くなります。

  • 学習率 (LearnRate を参照) が大きいと、最小値への収束が高速になりますが、発散 (最小値の限度を超える状態) の可能性があります。学習率が小さいと最小値への収束が保証されますが、終了までに時間がかかる可能性があります。

  • Regularization'lasso' の場合は、さまざまな値の TruncationPeriod を試してください。たとえば、TruncationPeriod110 に設定してから 100 に設定します。

  • 効率のため、予測子データは標準化されません。予測子データ (X) を標準化するには、次のように入力します。

    X = bsxfun(@rdivide,bsxfun(@minus,X,mean(X,2)),std(X,0,2));

    このコードでは、予測子が行、観測値が列に対応するように X が配置されている必要があります。また、メモリを節約するため、このコードは元の予測子データを標準化されたデータに置き換えます。

参照

[1] Hsieh, C. J., K. W. Chang, C. J. Lin, S. S. Keerthi, and S. Sundararajan. “A Dual Coordinate Descent Method for Large-Scale Linear SVM.” Proceedings of the 25th International Conference on Machine Learning, ICML ’08, 2001, pp. 408–415.

[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] Nocedal, J. and S. J. Wright. Numerical Optimization, 2nd ed., New York: Springer, 2006.

[4] 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.

[5] Wright, S. J., R. D. Nowak, and M. A. T. Figueiredo. “Sparse Reconstruction by Separable Approximation.” Trans. Sig. Proc., Vol. 57, No 7, 2009, pp. 2479–2493.

[6] Xiao, Lin. “Dual Averaging Methods for Regularized Stochastic Learning and Online Optimization.” J. Mach. Learn. Res., Vol. 11, 2010, pp. 2543–2596.

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

拡張機能

R2016a で導入