Main Content

templateKernel

カーネル学習器テンプレート

説明

t = templateKernel は、非線形分類または非線形回帰の場合のガウス カーネル モデルの学習に適したカーネル学習器テンプレートを返します。

t = templateKernel(Name,Value) は、1 つ以上の名前と値の引数で指定された追加オプションを使用してテンプレートを返します。

たとえば、学習器や拡張空間の次元数を指定できます。

名前と値の引数 Type を使用してモデルのタイプを指定する場合、コマンド ウィンドウに t を表示すると、すべてのオプションは、名前と値の引数を使用して指定する場合を除き、空 ([]) として示されます。モデルのタイプを指定しない場合、この表示では、空のオプションは非表示になります。学習中、空のオプションに既定値が使用されます。

すべて折りたたむ

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

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

load fisheriris

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

t = templateKernel
t = 
Fit template for Kernel.
    Learner: 'svm'

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

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

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


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: []
           StandardizeData: []
                   Version: 1
                    Method: 'Kernel'
                      Type: 'classification'

入力引数

すべて折りたたむ

名前と値の引数

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

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

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

分類モデルと回帰モデル

すべて折りたたむ

カーネル学習器のタイプ。"svm""logistic"、または "leastsquares" として指定します。

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

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

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

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

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

アルゴリズム応答の範囲損失関数
"svm"サポート ベクター マシン (分類または回帰)

分類: y ∊ {–1,1}。陽性クラスの場合は 1、それ以外の場合は –1

回帰: y ∊ (-∞,∞)

分類: ヒンジ [y,f(x)]=max[0,1yf(x)]

回帰: イプシロン不感応 [y,f(x)]=max[0,|yf(x)|ε]

"logistic"ロジスティック回帰 (分類のみ)y ∊ {–1,1}。陽性クラスの場合は 1、それ以外の場合は –1逸脱度 (ロジスティック) [y,f(x)]=log{1+exp[yf(x)]}
"leastsquares"通常の最小二乗による線形回帰 (回帰のみ)y ∊ (-∞,∞)平均二乗誤差 (MSE) [y,f(x)]=12[yf(x)]2

例: "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

R2023b 以降

予測子データを標準化するためのフラグ。数値または logical の 0 (false) または 1 (true) として指定します。Standardizetrue に設定すると、各数値予測子変数が対応する列の平均値と標準偏差によってセンタリングおよびスケーリングされます。ソフトウェアは、カテゴリカル予測子を標準化しません。

例: "Standardize",true

データ型: single | double | logical

R2023b 以降

カーネル モデルのタイプ。"classification" または "regression" として指定します。

説明
"classification"分類カーネル学習器テンプレートを作成します。Type"classification" と指定しない場合、近似関数 fitcecoctestckfold、および fitsemigrapht を渡すと、この値が設定されます。
"regression"回帰カーネル学習器テンプレートを作成します。Type"regression" と指定しない場合、近似関数 directforecastert を渡すと、この値が設定されます。

例: "Type","classification"

データ型: char | string

回帰モデルのみ

すべて折りたたむ

イプシロン不感応区間の幅の半分。非負のスカラー値を指定します。この引数は、サポート ベクター マシン学習器にのみ適用されます。

Epsilon の既定値は、iqr(Y)/13.49 です。これは、応答変数 Y の四分位数間範囲を使用した標準偏差の推定値です。iqr(Y) がゼロに等しい場合、Epsilon の既定値は 0.1 になります。

例: "Epsilon",0.3

データ型: 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

出力引数

すべて折りたたむ

非線形分類または非線形回帰の場合のガウス カーネル モデルの学習に適したカーネル学習器テンプレート。テンプレート オブジェクトとして返されます。学習中、空のオプションに既定値が使用されます。

詳細

すべて折りたたむ

ランダムな特徴量拡張

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 および σ の値は、それぞれ templateKernelNumExpansionDimensions および 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 で導入

すべて展開する