Main Content

templateKernel

カーネル モデル テンプレート

R2018b 以降

説明

templateKernel は、非線形分類の場合のガウス カーネル分類モデルの当てはめに適したテンプレートを作成します。

このテンプレートは、重要なパラメーターとして、バイナリ学習モデル、拡張空間の次元数、カーネル スケール、ボックス制約および正則化強度を指定します。テンプレートの作成後、テンプレートとデータを fitcecoc に渡して、モデルに学習をさせます。

t = templateKernel() は、カーネル モデル テンプレートを返します。

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

t = templateKernel(Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用してテンプレートを返します。たとえば、ロジスティック回帰を実装したり、拡張空間の次元数を指定できます。

コマンド ウィンドウで t を表示すると、t の一部のプロパティは空 ([]) として表示されます。学習時は、空のプロパティに対して既定値が使用されます。

すべて折りたたむ

既定のカーネル モデル テンプレートを作成し、これを使用して誤り訂正出力符号 (ECOC) マルチクラス モデルに学習をさせます。

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris

既定のカーネル モデル テンプレートを作成します。

t = templateKernel()
t = 
Fit template for classification Kernel.

             BetaTolerance: []
                 BlockSize: []
             BoxConstraint: []
                   Epsilon: []
    NumExpansionDimensions: []
         GradientTolerance: []
        HessianHistorySize: []
            IterationLimit: []
               KernelScale: []
                    Lambda: []
                   Learner: 'svm'
              LossFunction: []
                    Stream: []
            VerbosityLevel: []
                   Version: 1
                    Method: 'Kernel'
                      Type: 'classification'

学習時は、空のプロパティに対してそれぞれの既定値が設定されます。

t を ECOC マルチクラス モデルのバイナリ学習器として指定します。

Mdl = fitcecoc(meas,species,'Learners',t)
Mdl = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: {'setosa'  'versicolor'  'virginica'}
    ScoreTransform: 'none'
    BinaryLearners: {3x1 cell}
      CodingMatrix: [3x3 double]


  Properties, Methods

MdlCompactClassificationECOC マルチクラス分類器です。

ヒューリスティック手法でカーネル スケール パラメーターを選択してロジスティック回帰を実装する追加オプションを使用して、カーネル モデル テンプレートを作成します。

t = templateKernel('Learner','logistic','KernelScale','auto')
t = 
Fit template for classification Kernel.

             BetaTolerance: []
                 BlockSize: []
             BoxConstraint: []
                   Epsilon: []
    NumExpansionDimensions: []
         GradientTolerance: []
        HessianHistorySize: []
            IterationLimit: []
               KernelScale: 'auto'
                    Lambda: []
                   Learner: 'logistic'
              LossFunction: []
                    Stream: []
            VerbosityLevel: []
                   Version: 1
                    Method: 'Kernel'
                      Type: 'classification'

入力引数

すべて折りたたむ

名前と値の引数

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

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

例: 'Learner','logistic','NumExpansionDimensions',2^15,'KernelScale','auto' は、ヒューリスティック手法でスケール パラメーターを選択し、特徴量拡張を使用して予測子データを 2^15 次元空間にマッピングした後で、ロジスティック回帰を実装するよう指定します。

カーネル分類のオプション

すべて折りたたむ

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

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

  • x は p 個の予測子変数による観測値 (行ベクトル) です。

  • T(·) は特徴量を拡張するための観測値 (行ベクトル) の変換です。T(x)p の x を高次元空間 (m) にマッピングします。

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

  • 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'

拡張空間の次元数。'NumExpansionDimensions''auto' または正の整数から構成されるコンマ区切りのペアとして指定します。'auto' の場合、関数 templateKernel2.^ceil(min(log2(p)+5,15)) を使用して次元数を選択します。p は予測子の個数です。

詳細については、ランダムな特徴量拡張を参照してください。

例: 'NumExpansionDimensions',2^15

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

カーネル スケール パラメーター。"auto" または正のスカラーとして指定します。カーネル スケール パラメーターを使用して、ランダムな特徴量拡張用のランダムな基底が取得されます。詳細については、ランダムな特徴量拡張を参照してください。

"auto" を指定した場合、ヒューリスティック手法を使用して適切なカーネル スケール パラメーターが選択されます。このヒューリスティック手法では副標本抽出を使用するので、呼び出すたびに推定値が変化する可能性があります。このため、結果を再現するには、学習の前に rng を使用して乱数シードを設定します。

例: KernelScale="auto"

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

ボックス制約。'BoxConstraint' と正のスカラーで構成されるコンマ区切りペアとして指定します。

この引数は、'Learner''svm' (既定値) であり、正則化項の強度 'Lambda' の値を指定しなかった場合のみ有効です。ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、'BoxConstraint' または 'Lambda' のいずれかを指定できます。n は観測値の個数です。

例: 'BoxConstraint',100

データ型: single | double

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

'auto' の場合、Lambda の値は 1/n です。n は観測値の個数です。

Learner'svm' の場合、ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、BoxConstraint または Lambda のいずれかを指定できます。

例: 'Lambda',0.01

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

収束制御

すべて折りたたむ

線形係数およびバイアス項 (切片) の相対許容誤差。非負のスカラーとして指定します。

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

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

例: BetaTolerance=1e–6

データ型: single | double

勾配の絶対許容誤差。非負のスカラーとして指定します。

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

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

例: GradientTolerance=1e–5

データ型: single | double

最適化反復の最大回数。正の整数を指定します。

名前と値の引数 BlockSize で指定されたメモリに変換後のデータが収まる場合、既定値は 1000 です。それ以外の場合、既定値は 100 です。

例: IterationLimit=500

データ型: single | double

その他のカーネル分類のオプション

すべて折りたたむ

割り当てられたメモリの最大容量 (メガバイト)。'BlockSize' と正のスカラーから構成されるコンマ区切りのペアとして指定します。

変換後の予測子データを保持するために templateKernel で必要となるメモリが 'BlockSize' の値より多い場合、ブロック単位方式が使用されます。ブロック単位方式の詳細については、アルゴリズムを参照してください。

例: 'BlockSize',1e4

データ型: single | double

データ変換の再現性を得るための乱数ストリーム。乱数ストリーム オブジェクトとして指定します。詳細については、ランダムな特徴量拡張を参照してください。

予測子データを高次元空間に変換するために templateKernel で使用されるランダムな基底関数を再現するには、RandomStream を使用します。詳細は、RandStream を使用したグローバル ストリームの管理乱数ストリームの作成と管理 を参照してください。

例: RandomStream=RandStream("mlfg6331_64")

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

例: 'HessianHistorySize',10

データ型: single | double

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

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

例: 'Verbose',1

データ型: single | double

出力引数

すべて折りたたむ

カーネル モデル テンプレート。テンプレート オブジェクトとして返されます。マルチクラス問題についてカーネル分類モデルに学習させるには、tfitcecoc に渡します。

コマンド ウィンドウで t を表示すると、一部のプロパティは空 ([]) として表示されます。学習時は、空のプロパティが対応する既定値に置き換えられます。

詳細

すべて折りたたむ

ランダムな特徴量拡張

Random Kitchen Sink[1]や Fastfood[2]などのランダムな特徴量拡張は、ビッグ データに使用するカーネル分類アルゴリズムのガウス カーネルを計算効率が高い方法で近似する手法です。ランダムな特徴量拡張は、大規模な学習セットが含まれているビッグ データ事例に対する方が現実的ですが、メモリに収まる小規模なデータセットにも適用できます。

カーネル分類アルゴリズムでは、特徴量を高次元空間にマッピングした後で、データを 2 つのクラスに分離する最適な超平面を求めます。低次元空間で線形不可分な非線形の特徴量は、拡張された高次元空間で可分にできます。超平面分類についてのすべての計算では、ドット積のみを使用します。非線形分類モデルは、ドット積 x1x2' を非線形カーネル関数 G(x1,x2)=φ(x1),φ(x2) に置き換えることにより取得できます。ここで、xi は i 番目の観測値 (行ベクトル)、φ(xi) は xi を高次元空間にマッピングする変換 ("カーネル トリック" と呼ばれます) です。しかし、(n が大きい) 大規模なデータ セットでは、観測値の各ペアについて G(x1,x2) (グラム行列) を評価すると計算コストが高くなります。

ランダムな特徴量拡張の方式では、ドット積がガウス カーネルを近似するようなランダム変換を求めます。つまり、次のようになります。

G(x1,x2)=φ(x1),φ(x2)T(x1)T(x2)',

ここで、T(x)p における x を高次元空間 (m) にマッピングします。Random Kitchen Sink 方式では、次のランダムな変換を使用します。

T(x)=m1/2exp(iZx')',

ここで、Zm×pN(0,σ2) から抽出した標本、σ はカーネル スケールです。この方式では O(mp) の計算および格納が必要です。

Fastfood 方式では、ガウス スケーリング行列と組み合わせたアダマール行列を使用して、Z の代わりに別のランダムな基底 V を導入します。このランダムな基底により、計算コストが O(mlogp) に、ストレージが O(m) に削減されます。

m および σ の値はそれぞれ、templateKernel の名前と値の引数 NumExpansionDimensions および KernelScale を使用して指定できます。

関数 templateKernel は、ランダムな特徴量拡張に Fastfood 方式を使用し、線形分類を使用してガウス カーネル分類モデルに学習させます。関数 templateSVM のソルバーでは n 行 n 列のグラム行列の計算が必要ですが、templateKernel のソルバーに必要なのは、n 行 m 列の行列の形成だけです。ビッグ データの場合は一般に m が n よりはるかに小さくなります。

ボックス制約

ボックス制約は、マージンに違反している観測値に課せられる最大ペナルティを制御するパラメーターであり、過適合の防止 (正則化) に役立ちます。ボックス制約の値を大きくすると、学習時間が長くなる場合があります。

ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があります。n は観測値の個数です。

アルゴリズム

templateKernel は、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) ソルバーとリッジ (L2) 正則化を使用して、正則化された目的関数を最小化します。学習に使用した LBFGS ソルバーのタイプを調べるには、コマンド ウィンドウで FitInfo.Solver と入力します。

  • 'LBFGS-fast' — LBFGS ソルバー。

  • 'LBFGS-blockwise' — ブロック単位方式を使用する LBFGS ソルバー。変換後の予測子データを保持するために templateKernel で必要となるメモリが BlockSize の値より多い場合、この関数はブロック単位方式を使用します。

  • 'LBFGS-tall' — ブロック単位方式の tall 配列用 LBFGS ソルバー。

templateKernel がブロック単位方式を使用する場合、各反復で損失と勾配の計算をデータのさまざまな部分に分散させることにより LBFGS が実装されます。また、templateKernel は、データの一部に対して局所的にモデルを当てはめ、平均化で係数を結合することにより、線形係数およびバイアス項の初期推定値を改善します。'Verbose',1 が指定された場合、templateKernel は各データ通過についての診断情報を表示し、情報を FitInfoHistory フィールドに格納します。

templateKernel がブロック単位方式を使用しない場合、初期推定値はゼロになります。'Verbose',1 が指定された場合、templateKernel は各反復についての診断情報を表示し、情報を FitInfoHistory フィールドに格納します。

参照

[1] Rahimi, A., and B. Recht. “Random Features for Large-Scale Kernel Machines.” Advances in Neural Information Processing Systems. Vol. 20, 2008, pp. 1177–1184.

[2] Le, Q., T. Sarlós, and A. Smola. “Fastfood — Approximating Kernel Expansions in Loglinear Time.” Proceedings of the 30th International Conference on Machine Learning. Vol. 28, No. 3, 2013, pp. 244–252.

[3] Huang, P. S., H. Avron, T. N. Sainath, V. Sindhwani, and B. Ramabhadran. “Kernel methods match Deep Neural Networks on TIMIT.” 2014 IEEE International Conference on Acoustics, Speech and Signal Processing. 2014, pp. 205–209.

拡張機能

バージョン履歴

R2018b で導入