templateKernel
説明
templateKernel
は、非線形分類の場合のガウス カーネル分類モデルの当てはめに適したテンプレートを作成します。
このテンプレートは、重要なパラメーターとして、バイナリ学習モデル、拡張空間の次元数、カーネル スケール、ボックス制約および正則化強度を指定します。テンプレートの作成後、テンプレートとデータを fitcecoc
に渡して、モデルに学習をさせます。
は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用してテンプレートを返します。たとえば、ロジスティック回帰を実装したり、拡張空間の次元数を指定できます。t
= templateKernel(Name,Value
)
コマンド ウィンドウで 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
Mdl
は CompactClassificationECOC
マルチクラス分類器です。
カーネル モデル テンプレートのオプションの指定
ヒューリスティック手法でカーネル スケール パラメーターを選択してロジスティック回帰を実装する追加オプションを使用して、カーネル モデル テンプレートを作成します。
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'
線形分類モデルのタイプ。'Learner'
と 'svm'
または 'logistic'
から構成されるコンマ区切りのペアとして指定します。
次の表では です。
x は p 個の予測子変数による観測値 (行ベクトル) です。
は特徴量を拡張するための観測値 (行ベクトル) の変換です。T(x) は の x を高次元空間 () にマッピングします。
β は係数のベクトルです。
b はスカラー バイアスです。
値 | アルゴリズム | 応答の範囲 | 損失関数 |
---|---|---|---|
'svm' | サポート ベクター マシン | y ∊ {–1,1}。陽性クラスの場合は 1、それ以外の場合は –1 | ヒンジ: |
'logistic' | ロジスティック回帰 | 'svm' と同じ | 逸脱度 (ロジスティック): |
例: 'Learner','logistic'
NumExpansionDimensions
— 拡張空間の次元数
'auto'
(既定値) | 正の整数
拡張空間の次元数。'NumExpansionDimensions'
と 'auto'
または正の整数から構成されるコンマ区切りのペアとして指定します。'auto'
の場合、関数 templateKernel
は 2.^ceil(min(log2(p)+5,15))
を使用して次元数を選択します。p
は予測子の個数です。
詳細については、ランダムな特徴量拡張を参照してください。
例: 'NumExpansionDimensions',2^15
データ型: char
| string
| single
| double
KernelScale
— カーネル スケール パラメーター
1
(既定値) | "auto"
| 正のスカラー
カーネル スケール パラメーター。"auto"
または正のスカラーとして指定します。カーネル スケール パラメーターを使用して、ランダムな特徴量拡張用のランダムな基底が取得されます。詳細については、ランダムな特徴量拡張を参照してください。
"auto"
を指定した場合、ヒューリスティック手法を使用して適切なカーネル スケール パラメーターが選択されます。このヒューリスティック手法では副標本抽出を使用するので、呼び出すたびに推定値が変化する可能性があります。このため、結果を再現するには、学習の前に rng
を使用して乱数シードを設定します。
例: KernelScale="auto"
データ型: char
| string
| single
| double
BoxConstraint
— ボックス制約
1 (既定値) | 正のスカラー
ボックス制約。'BoxConstraint'
と正のスカラーで構成されるコンマ区切りペアとして指定します。
この引数は、'Learner'
が 'svm'
(既定値) であり、正則化項の強度 'Lambda'
の値を指定しなかった場合のみ有効です。ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、'BoxConstraint'
または 'Lambda'
のいずれかを指定できます。n は観測値の個数です。
例: 'BoxConstraint',100
データ型: single
| double
Lambda
— 正則化項の強度
'auto'
(既定値) | 非負のスカラー
正則化項の強度。'Lambda'
と 'auto'
または非負のスカラーから構成されるコンマ区切りのペアとして指定します。
'auto'
の場合、Lambda
の値は 1/n です。n は観測値の個数です。
Learner
が 'svm'
の場合、ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、BoxConstraint
または Lambda
のいずれかを指定できます。
例: 'Lambda',0.01
データ型: char
| string
| single
| double
BetaTolerance
— 線形係数およびバイアス項の相対許容誤差
1e–4
(既定値) | 非負のスカラー
線形係数およびバイアス項 (切片) の相対許容誤差。非負のスカラーとして指定します。
であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 で最適化が終了します。
GradientTolerance
も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
例: BetaTolerance=1e–6
データ型: single
| double
GradientTolerance
— 勾配の絶対許容誤差
1e–6
(既定値) | 非負のスカラー
勾配の絶対許容誤差。非負のスカラーとして指定します。
最適化反復 t における係数およびバイアス項に関する目的関数の勾配ベクトルを とします。 で最適化が終了します。
BetaTolerance
も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
例: GradientTolerance=1e–5
データ型: single
| double
IterationLimit
— 最適化反復の最大回数
正の整数
最適化反復の最大回数。正の整数を指定します。
名前と値の引数 BlockSize
で指定されたメモリに変換後のデータが収まる場合、既定値は 1000 です。それ以外の場合、既定値は 100 です。
例: IterationLimit=500
データ型: single
| double
BlockSize
— 割り当てられたメモリの最大容量
4e^3
(4 GB) (既定値) | 正のスカラー
割り当てられたメモリの最大容量 (メガバイト)。'BlockSize'
と正のスカラーから構成されるコンマ区切りのペアとして指定します。
変換後の予測子データを保持するために templateKernel
で必要となるメモリが 'BlockSize'
の値より多い場合、ブロック単位方式が使用されます。ブロック単位方式の詳細については、アルゴリズムを参照してください。
例: 'BlockSize',1e4
データ型: single
| double
RandomStream
— 乱数ストリーム
グローバル ストリーム (既定値) | 乱数ストリーム オブジェクト
データ変換の再現性を得るための乱数ストリーム。乱数ストリーム オブジェクトとして指定します。詳細については、ランダムな特徴量拡張を参照してください。
予測子データを高次元空間に変換するために templateKernel
で使用されるランダムな基底関数を再現するには、RandomStream
を使用します。詳細は、RandStream を使用したグローバル ストリームの管理 と 乱数ストリームの作成と管理 を参照してください。
例: RandomStream=RandStream("mlfg6331_64")
HessianHistorySize
— ヘッセ近似の履歴バッファーのサイズ
15
(既定値) | 正の整数
ヘッセ近似の履歴バッファーのサイズ。'HessianHistorySize'
と正の整数から構成されるコンマ区切りのペアとして指定します。各反復において、templateKernel
は最新の HessianHistorySize
回の反復の統計量を使用してヘッセ近似を構成します。
例: 'HessianHistorySize',10
データ型: single
| double
Verbose
— 詳細レベル
0
(既定値) | 1
詳細レベル。'Verbose'
と 0
または 1
のいずれかから構成されるコンマ区切りのペアとして指定します。Verbose
は、コマンド ラインにおける診断情報の表示を制御します。
値 | 説明 |
---|---|
0 | templateKernel は診断情報を表示しません。 |
1 | templateKernel は、目的関数の値、勾配の大きさ、および他の診断情報を表示します。 |
例: 'Verbose',1
データ型: single
| double
出力引数
詳細
ランダムな特徴量拡張
Random Kitchen Sink[1]や Fastfood[2]などのランダムな特徴量拡張は、ビッグ データに使用するカーネル分類アルゴリズムのガウス カーネルを計算効率が高い方法で近似する手法です。ランダムな特徴量拡張は、大規模な学習セットが含まれているビッグ データ事例に対する方が現実的ですが、メモリに収まる小規模なデータセットにも適用できます。
カーネル分類アルゴリズムでは、特徴量を高次元空間にマッピングした後で、データを 2 つのクラスに分離する最適な超平面を求めます。低次元空間で線形不可分な非線形の特徴量は、拡張された高次元空間で可分にできます。超平面分類についてのすべての計算では、ドット積のみを使用します。非線形分類モデルは、ドット積 x1x2' を非線形カーネル関数 に置き換えることにより取得できます。ここで、xi は i 番目の観測値 (行ベクトル)、φ(xi) は xi を高次元空間にマッピングする変換 ("カーネル トリック" と呼ばれます) です。しかし、(n が大きい) 大規模なデータ セットでは、観測値の各ペアについて G(x1,x2) (グラム行列) を評価すると計算コストが高くなります。
ランダムな特徴量拡張の方式では、ドット積がガウス カーネルを近似するようなランダム変換を求めます。つまり、次のようになります。
ここで、T(x) は における x を高次元空間 () にマッピングします。Random Kitchen Sink 方式では、次のランダムな変換を使用します。
ここで、 は から抽出した標本、σ はカーネル スケールです。この方式では O(mp) の計算および格納が必要です。
Fastfood 方式では、ガウス スケーリング行列と組み合わせたアダマール行列を使用して、Z の代わりに別のランダムな基底 V を導入します。このランダムな基底により、計算コストが O(mlog
p) に、ストレージが 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
は各データ通過についての診断情報を表示し、情報を FitInfo
の History
フィールドに格納します。
templateKernel
がブロック単位方式を使用しない場合、初期推定値はゼロになります。'Verbose',1
が指定された場合、templateKernel
は各反復についての診断情報を表示し、情報を FitInfo
の History
フィールドに格納します。
参照
[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.
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
以下は、カーネル モデル テンプレートと tall 配列を fitcecoc
に渡してモデルに学習をさせる場合の使用上の注意および制限です。
tall 配列を処理する場合、以下の名前と値のペアの引数は既定値が異なります。
'Verbose'
— 既定値は1
です。'BetaTolerance'
— 既定値は1e–3
に緩和されます。'GradientTolerance'
— 既定値は1e–5
に緩和されます。'IterationLimit'
— 既定値は20
に緩和されます。
'KernelScale'
が'auto'
である場合、templateKernel
はtallrng
によって制御される乱数ストリームをサブサンプリングに使用します。再現性を得るには、tallrng
によって制御される乱数ストリームとグローバル ストリームの両方について乱数のシードを設定しなければなりません。'Lambda'
が'auto'
である場合、templateKernel
は観測値の個数を計算するため、さらにデータを通過する可能性があります。templateKernel
はブロック単位方式を使用します。詳細については、アルゴリズムを参照してください。
詳細は、tall 配列を参照してください。
バージョン履歴
R2018b で導入
参考
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)