Main Content

templateSVM

サポート ベクター マシン テンプレート

説明

t = templateSVM は分類モデルまたは回帰モデルの学習に適した SVM (サポート ベクター マシン) 学習器テンプレートを返します。

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

たとえば、ボックス制約、カーネル関数または予測子を標準化するかを指定します。

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

すべて折りたたむ

関数 templateSVM を使用して既定の SVM テンプレートを作成します。

t = templateSVM
t = 
Fit template for SVM.

t は SVM 学習器のテンプレート オブジェクトです。t のプロパティはすべて空です。t を学習関数 (ECOC マルチクラス分類用のfitcecocなど) に渡す場合、空のプロパティはそれぞれの既定値に設定されます。たとえば、KernelFunction"linear" に、Type"classification" に設定されます。他の既定値の詳細については、fitcsvmfitrsvmを参照してください。

fitcecocで使用する既定以外の SVM テンプレートを作成します。

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

load fisheriris

SVM 分類器のテンプレートを作成して、ガウス カーネル関数の使用を指定します。

t = templateSVM("KernelFunction","gaussian","Type","classification")
t = 
Fit template for classification SVM.

                     Alpha: [0x1 double]
             BoxConstraint: []
                 CacheSize: []
             CachingMethod: ''
                ClipAlphas: []
    DeltaGradientTolerance: []
                   Epsilon: []
              GapTolerance: []
              KKTTolerance: []
            IterationLimit: []
            KernelFunction: 'gaussian'
               KernelScale: []
              KernelOffset: []
     KernelPolynomialOrder: []
                  NumPrint: []
                        Nu: []
           OutlierFraction: []
          RemoveDuplicates: []
           ShrinkagePeriod: []
                    Solver: ''
           StandardizeData: []
        SaveSupportVectors: []
            VerbosityLevel: []
                   Version: 2
                    Method: 'SVM'
                      Type: 'classification'

KernelFunctionMethod および Type を除き、テンプレート オブジェクトのすべてのプロパティは空です。学習の際、空のプロパティはそれぞれの既定値で入力されます。

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

Mdl = fitcecoc(meas,species,"Learners",t);

MdlClassificationECOC マルチクラス分類器です。既定の設定では、Mdl は、1 対 1 の符号化設計を使用の学習が実行されます。

標本内 (再代入) 誤分類誤差を表示します。

L = resubLoss(Mdl,"LossFun","classiferror")
L = 
0.0200

線形 SVM バイナリ学習器が含まれている ECOC モデルに学習をさせるときに、既定では、fitcecoc はバイナリ学習器の AlphaSupportVectorLabels および SupportVectors プロパティを空にします。代わりに、サポート ベクターおよび関連する値を保持し、後でモデルから破棄することもできます。

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

load fisheriris
rng(1); % For reproducibility

データ セット全体を使用して ECOC モデルを学習させます。適切な SVM テンプレートに渡すことにより、サポート ベクターを保存するように指定します。

t = templateSVM('SaveSupportVectors',true);
MdlSV = fitcecoc(meas,species,'Learners',t);

MdlSV は、線形 SVM バイナリ学習器が含まれている学習済みの ClassificationECOC モデルです。既定では、fitcecoc は 1 対 1 の符号化設計を実装するので、3 クラス学習の場合は 3 つのバイナリ学習器が必要になります。

ドット表記を使用して α (アルファ) の推定値にアクセスします。

alpha = cell(3,1);
alpha{1} = MdlSV.BinaryLearners{1}.Alpha;
alpha{2} = MdlSV.BinaryLearners{2}.Alpha;
alpha{3} = MdlSV.BinaryLearners{3}.Alpha;
alpha
alpha=3×1 cell array
    { 3x1 double}
    { 3x1 double}
    {23x1 double}

alpha は、α の推定値が格納されている 3 行 1 列の cell 配列です。

サポート ベクターおよび関連する値を ECOC モデルから破棄します。

Mdl = discardSupportVectors(MdlSV);

MdlMdlSV に似ていますが、すべての線形 SVM バイナリ学習器の AlphaSupportVectorLabels および SupportVectors プロパティが空 ([]) であるという点が異なります。

areAllEmpty = @(x)isempty([x.Alpha x.SupportVectors x.SupportVectorLabels]);
cellfun(areAllEmpty,Mdl.BinaryLearners)
ans = 3x1 logical array

   1
   1
   1

2 つの ECOC モデルのサイズを比較します。

vars = whos('Mdl','MdlSV');
100*(1 - vars(1).bytes/vars(2).bytes)
ans = 
4.9037

MdlMdlSV より約 5% 小さくなっています。

Mdl を圧縮し MdlMdlSV をワークスペースからクリアして、メモリ使用量を減らします。

CompactMdl = compact(Mdl);
clear Mdl MdlSV;

より効率的な SVM モデルを使用して、学習データのランダムな行についてラベルを予測します。

idx = randsample(size(meas,1),1)
idx = 
63
predictedLabel = predict(CompactMdl,meas(idx,:))
predictedLabel = 1x1 cell array
    {'versicolor'}

trueLabel = species(idx)
trueLabel = 1x1 cell array
    {'versicolor'}

入力引数

すべて折りたたむ

名前と値の引数

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

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

例: 'BoxConstraint',0.1,'KernelFunction','gaussian','Standardize',1 はガウス (RBF) カーネルの使用と予測の標準化に 0.1 のボックス制約を指定します。

分類モデルと回帰モデル

すべて折りたたむ

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

1 クラス学習の場合、ボックス制約は必ず 1 に設定されます。

BoxConstraintCostPriorStandardize および Weights の関係とアルゴリズム動作についての詳細は、アルゴリズムを参照してください。

例: 'BoxConstraint',100

データ型: double | single

キャッシュ サイズ。'CacheSize''maximal' または正のスカラーで構成されるコンマ区切りのペアとして指定します。

CacheSize'maximal' の場合、nn 列 のグラム行列を保持できる十分なメモリが確保されます。

CacheSize が正のスカラーの場合、モデルの学習用に CacheSize メガバイトのメモリが確保されます。

例: 'CacheSize','maximal'

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

アルファ係数をクリップするためのフラグ。'ClipAlphas'true または false のいずれかから構成されるコンマ区切りのペアとして指定します。

観測値 j のアルファ係数が αj、観測値 j のボックス制約が Cj であるとします (j = 1,...,n)。n は学習標本のサイズです。

説明
true各反復で αj が 0 または Cj に近い場合、MATLAB®αj がそれぞれ 0 または Cj に設定されます。
false最適化時に MATLAB でアルファ係数は変更されません。

MATLAB では、学習済みの SVM モデル オブジェクトの Alpha プロパティに最終的な α の値が格納されます。

ClipAlphas は、SMO と ISDA の収束に影響を与える可能性があります。

例: 'ClipAlphas',false

データ型: logical

SMO (逐次最小最適化) または ISDA (反復単一データ アルゴリズム) により取得された上位の違反値と下位の違反値の間に存在する、勾配差分の許容誤差。'DeltaGradientTolerance' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

DeltaGradientTolerance0 の場合、最適化収束を確認するために、勾配差分の許容誤差を使用しません。

既定値は、以下のとおりです。

  • ソルバーが SMO の場合 (たとえば、'Solver','SMO' を設定した場合など) は 1e-3

  • ソルバーが ISDA の場合 (たとえば、'Solver','ISDA' を設定した場合など) は 0

例: 'DeltaGradientTolerance',1e-2

データ型: double | single

SMO または ISDA により取得された実行可能性ギャップの許容誤差。'GapTolerance' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

GapTolerance0 の場合、最適化収束の確認には、実行可能性ギャップの許容誤差を使用しません。

例: 'GapTolerance',1e-2

データ型: double | single

数値最適化反復の最大回数。'IterationLimit' と正の整数値で構成されるコンマ区切りのペアとして指定します。

最適化ルーチンが正常に収束したかどうかに関係なく、学習済みのモデルが返されます。Mdl.ConvergenceInfo に収束情報が格納されます。

例: 'IterationLimit',1e8

データ型: double | single

グラム行列の要素の計算に使用するカーネル関数。'KernelFunction' とカーネル関数名から構成されるコンマ区切りのペアとして指定します。G(xj,xk) がグラム行列の要素 (j,k) であるとします。ここで、xj および xkX 内の観測値 j および k を表す p 次元ベクトルです。サポートされるカーネル関数の名前および関数形式を次の表で説明します。

カーネル関数名説明
'gaussian' または 'rbf'ガウスまたは放射基底関数 (RBF) カーネル (1 クラス学習の場合の既定値)

G(xj,xk)=exp(xjxk2)

'linear'線形カーネル (2 クラス学習の場合の既定値)

G(xj,xk)=xjxk

'polynomial'多項式カーネル。'PolynomialOrder',q を使用して多項式カーネルの順序 (q) を指定します。

G(xj,xk)=(1+xjxk)q

独自のカーネル関数を設定することもできます。たとえば、'KernelFunction','kernel' を使用すると kernel が設定されます。値 kernel は次の形式でなければなりません。

function G = kernel(U,V)
ここで

  • U は、mp 列の行列です。列は予測子変数に、行は観測値に対応します。

  • V は、np 列の行列です。列は予測子変数に、行は観測値に対応します。

  • G は、UV の行による mn 列のグラム行列です。

kernel.m は、MATLAB パス上になければなりません。

カーネル関数には一般的な名前を使用しないようにしてください。たとえば、シグモイド カーネル関数には 'sigmoid' ではなく 'mysigmoid' などの名前を使用します。

例: 'KernelFunction','gaussian'

データ型: char | string

カーネル オフセット パラメーター。'KernelOffset' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

KernelOffset がグラム行列の各要素に追加されます。

既定値は以下のとおりです。

  • ソルバーが SMO の場合 (つまり、'Solver','SMO' を設定した場合) は 0

  • ソルバーが ISDA の場合 (つまり、'Solver','ISDA' を設定した場合) は 0.1

例: 'KernelOffset',0

データ型: double | single

カーネル スケール パラメーター。'KernelScale' と、'auto' または正のスカラーで構成される、コンマ区切りのペアとして指定します。予測子行列 X のすべての要素が KernelScale の値で除算されます。その後、適切なカーネル ノルムが適用され、グラム行列が計算されます。

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

  • 'KernelFunction','kernel' のように KernelScale と独自のカーネル関数を指定すると、エラーが発生します。kernel の内部でスケーリングを適用しなければなりません。

例: 'KernelScale','auto'

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

KKT (カルーシュ・キューン・タッカー) 相補性条件の違反許容誤差。'KKTTolerance' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

KKTTolerance0 の場合、最適化収束の確認に実行可能性の KKT 相補性条件の違反許容誤差は使用されません。

既定値は、以下のとおりです。

  • ソルバーが SMO の場合 (たとえば、'Solver','SMO' を設定した場合など) は 0

  • ソルバーが ISDA の場合 (たとえば、'Solver','ISDA' を設定した場合など) は 1e-3

例: 'KKTTolerance',1e-2

データ型: double | single

最適化診断メッセージ出力の反復回数。'NumPrint' と非負の整数で構成されるコンマ区切りのペアとして指定します。

'Verbose',1'NumPrint',numprint を指定すると、numprint 回反復するたびに SMO と ISDA からのすべての最適化診断メッセージがコマンド ウィンドウに表示されます。

例: 'NumPrint',500

データ型: double | single

学習データで想定される外れ値の比率。'OutlierFraction' と区間 [0,1) の数値スカラーから構成されるコンマ区切りのペアとして指定します。

'OutlierFraction',outlierfraction を設定するとします。outlierfraction は 0 より大きい値です。

  • 2 クラス学習では "ロバスト学習" が行われます。この方式では、最適化アルゴリズムが収束すると、観測値のうち 100*outlierfraction% が削除されます。削除された観測値は、勾配の大きいものに対応します。

  • 1 クラス学習では、学習セットに負のスコアをもつ観測 outlierfraction など、適切なバイアス項が検出されます。

例: 'OutlierFraction',0.01

データ型: double | single

多項式カーネル関数の次数。'PolynomialOrder' と正の整数から成るコンマ区切りのペアとして指定されます。

KernelFunction'polynomial' ではない場合に 'PolynomialOrder' を設定すると、エラーがスローされます。

例: 'PolynomialOrder',2

データ型: double | single

結果のモデルのプロパティとしてサポート ベクター、そのラベル、および推定した α の係数を格納するかどうか。'SaveSupportVectors'true または false をコンマ区切りのペアとして指定します。

SaveSupportVectorstrue の場合、結果のモデルの SupportVectors プロパティにはサポート ベクター、SupportVectorLabels プロパティにはそのラベル、コンパクトな SVM 学習器の Alpha プロパティには推定した α の係数が格納されます。

SaveSupportVectorsfalseKernelFunction'linear' の場合、結果のモデルではサポート ベクターと関連推定値が格納されません。

コンパクトな SVM モデルのメモリ消費量を減らすには、SaveSupportVectors を指定します。

ECOC モデルに線形 SVM バイナリ学習器を使用した場合、既定値は false です。それ以外の場合、既定値は true です。

例: 'SaveSupportVectors',true

データ型: logical

アクティブ セットの縮小間の反復回数。'ShrinkagePeriod' と非負の整数から構成されるコンマ区切りのペアとして指定します。

'ShrinkagePeriod',0 を設定すると、アクティブ セットは縮小されません。

例: 'ShrinkagePeriod',1000

データ型: double | single

最適化ルーチン。'Solver' と次の表の値から構成されるコンマ区切りのペアとして指定します。

説明
'ISDA'反復単一データ アルゴリズム ([4]参照)
'L1QP'quadprog (Optimization Toolbox) を使用して二次計画法による L1 ソフト マージン最小化を実装します。このオプションには Optimization Toolbox™ ライセンスが必要です。詳細は、二次計画法の定義 (Optimization Toolbox)を参照してください。
'SMO'逐次最小最適化 ([2]参照)

既定値は、2 クラス学習で 'OutlierFraction' を正の値に設定した場合は 'ISDA' で、それ以外の場合は 'SMO' です。

例: 'Solver','ISDA'

予測子データを標準化するためのフラグ。'Standardize'true (1) または false (0) から構成されるコンマ区切りのペアとして指定します。

'Standardize',true を設定した場合、次のようになります。

  • 列の加重平均と標準偏差によって予測子データ (X) の各列がそれぞれセンタリングおよびスケーリングされます (重みを付けた標準化の詳細についてはアルゴリズムを参照してください)。MATLAB では、カテゴリカル予測子用に生成されたダミー変数の列に含まれているデータは標準化されません。

  • 分類器の学習には標準化された予測子行列が使用されますが、分類器の X プロパティには標準化されていないデータが格納されます。

例: 'Standardize',true

データ型: logical

R2023b 以降

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

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

例: "Type","classification"

データ型: char | string

学習データ内の重複する観測値を単一の観測値に置き換えるためのフラグ。true または false として指定します。

RemoveDuplicatestrue の場合、学習データ内の重複する観測値が同じ値の単一の観測値に置き換えられます。単一の観測値の重みは、削除された対応する重複の重みの合計に等しくなります (分類の場合は Weights、回帰の場合は Weights を参照)。

ヒント

多数の重複する観測値がデータ セットに含まれている場合は、"RemoveDuplicates",true を指定すると収束時間が大幅に短くなる可能性があります。

データ型: logical

詳細レベル。'Verbose'01 または 2 から構成されるコンマ区切りのペアとして指定します。Verbose の値は、コマンド ウィンドウに表示され構造体として Mdl.ConvergenceInfo.History に保存される最適化情報の量を制御します。

次の表は、使用できる詳細レベル オプションの一覧です。

説明
0収束情報の表示や保存は行われません。
1診断メッセージが表示され、numprint 回の反復ごとに収束基準が保存されます。ここで、numprint は名前と値のペアの引数 'NumPrint' の値です。
2診断メッセージが表示され、1 回の反復ごとに収束基準が保存されます。

例: 'Verbose',1

データ型: double | single

回帰モデルのみ

R2023b 以降

すべて折りたたむ

イプシロン不感応区間の幅の半分。非負のスカラー値を指定します。

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

例: "Epsilon",0.3

データ型: single | double

出力引数

すべて折りたたむ

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

ヒント

既定では、効率を向上させるため、fitcecoc はすべての線形 SVM バイナリ学習器の AlphaSupportVectorLabels および SupportVectors プロパティを空にします。fitcecoc は、Alpha ではなく Beta をモデル表示で出力します。

AlphaSupportVectorLabels および SupportVectors を保存するには、サポート ベクターを fitcecoc に保存するよう指定する線形 SVM テンプレートを渡します。たとえば、次のように入力します。

t = templateSVM('SaveSupportVectors',true)
Mdl = fitcecoc(X,Y,'Learners',t);

サポート ベクターおよび関連する値は、生成された ClassificationECOC モデルを discardSupportVectors に渡すことにより削除できます。

参照

[1] Christianini, N., and J. C. Shawe-Taylor. An Introduction to Support Vector Machines and Other Kernel-Based Learning Methods. Cambridge, UK: Cambridge University Press, 2000.

[2] Fan, R.-E., P.-H. Chen, and C.-J. Lin. “Working set selection using second order information for training support vector machines.” Journal of Machine Learning Research, Vol 6, 2005, pp. 1889–1918.

[3] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.

[4] Kecman V., T. -M. Huang, and M. Vogt. “Iterative Single Data Algorithm for Training Kernel Machines from Huge Data Sets: Theory and Performance.” In Support Vector Machines: Theory and Applications. Edited by Lipo Wang, 255–274. Berlin: Springer-Verlag, 2005.

[5] Scholkopf, B., J. C. Platt, J. C. Shawe-Taylor, A. J. Smola, and R. C. Williamson. “Estimating the Support of a High-Dimensional Distribution.” Neural Comput., Vol. 13, Number 7, 2001, pp. 1443–1471.

[6] Scholkopf, B., and A. Smola. Learning with Kernels: Support Vector Machines, Regularization, Optimization and Beyond, Adaptive Computation and Machine Learning. Cambridge, MA: The MIT Press, 2002.

バージョン履歴

R2014b で導入

すべて展開する