Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

templateLinear

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

説明

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

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

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

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

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

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

すべて折りたたむ

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

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

loadnlpdata

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

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

t = templateLinear();

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

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

X = X'; rng(1);% For reproducibilityMdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')
Mdl = 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 は学習標本のサイズです。

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

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

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

    • templateLinearは、指定された正則化強度ごとに係数の推定値を返します。

例:'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 , 1 y f ( x ) ]
'logistic' ロジスティック回帰 'svm'と同じ 逸脱度 (ロジスティック): [ y , f ( x ) ] = log { 1 + exp [ y f ( x ) ] }

例:'Learner','logistic'

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

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

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

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

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

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

ヒント

  • 予測子変数を選択する場合は、'lasso'を指定します。変数の選択の詳細については、特徴選択の紹介を参照してください。

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

例:'Regularization','lasso'

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

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

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

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

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

  • 予測子データセットに 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

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

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

例:“详细”,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を指定します。templateLinearは、次の式を使用して、反復 t、γtについての学習率を決定します。

    γ t = γ 0 ( 1 + λ γ 0 t ) 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 = { β ^ j u t if β ^ j > u t , 0 if | β ^ j | u t , β ^ j + u t if β ^ j < u t .

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

  • ASGD の場合、 β ^ j はミニバッチを次を満たす k の回数処理した後の係数 j の平均推定値です。 u t = 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'と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

B t = [ β t b t ] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 B t B t 1 B t 2 < 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'と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

B t = [ β t b t ] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 B t B t 1 B t 2 < 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'と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

B t = [ β t b t ] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 B t B t 1 B t 2 < 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'

    • “双重”(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]拉ngford, 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 で導入