ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

templateSVM

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

構文

t = templateSVM()
t = templateSVM(Name,Value)

説明

t = templateSVM() は ECOC (誤り訂正出力符号) マルチクラス モデルの学習に適した SVM (サポート ベクター マシン) 学習器テンプレートを返します。

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

tfitcecoc のバイナリ学習器またはバイナリ学習器のセットの 1 つとして指定し、ECOC マルチクラス分類器に学習をさせます。

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

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

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

すべて折りたたむ

templateSVM を使用して既定の SVM テンプレートを指定します。

t = templateSVM()
t = 
Fit template for classification SVM.

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

MethodType を除き、テンプレート オブジェクトのすべてのプロパティは空です。t を学習関数に渡す場合、空のプロパティはそれぞれの既定値で入力されます。たとえば、KernelFunction プロパティは、'linear' で入力されます。他の既定値の詳細は、fitcsvmを参照してください。

t は SVM 分類器の計画です。これを指定する場合、計算は実行されません。tfitcecocに渡して、ECOC マルチクラス学習の SVM バイナリ学習器を指定します。しかし、既定の設定では、fitcecoc は既定の SVM バイナリ学習器を使用します。

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

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

load fisheriris

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

t = templateSVM('KernelFunction','gaussian')
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'

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

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

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

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

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

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

既定の設定では、学習済み ECOC モデルの BinaryLearners プロパティに格納されている線形 SVM バイナリ学習器について、fitcecocAlphaSupportVectorLabels および SupportVectors プロパティを空にします。サポート ベクターおよび関連する値は、保存した後でモデルから破棄できます。

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

load fisheriris
rng(1); % For reproducibility

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

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

Mdl は学習させた ClassificationECOC モデルです。既定では、fitcecoc は線形 SVM バイナリ学習器を使用します。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 =

  3x1 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('MdlSV','Mdl');
100*(1 - vars(1).bytes/vars(2).bytes)
ans =

    5.1575

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

Mdl を圧縮し MdlSVMdl をワークスペースからクリアして、メモリ フットプリントを減らします。

CMdl = compact(Mdl);
clear MdlSV Mdl;

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

idx = randsample(size(meas,1),1)
predictedLabel = predict(CMdl,meas(idx,:))
trueLabel = species(idx)
idx =

    63


predictedLabel =

  1x1 cell array

    {'versicolor'}


trueLabel =

  1x1 cell array

    {'versicolor'}

入力引数

すべて折りたたむ

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で閉じなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

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

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

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

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

例: 'BoxConstraint',100

データ型: double | single

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

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

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 は、m 行 p 列の行列です。列は予測子変数に、行は観測値に対応します。

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

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

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

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

例: 'Solver','ISDA'

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

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

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

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

例: 'Standardize',true

データ型: logical

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

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

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

例: 'Verbose',1

データ型: double | single

出力引数

すべて折りたたむ

ECOC (誤り訂正出力符号) マルチクラス モデルの学習に適した SVM 分類テンプレート。テンプレート オブジェクトとして返します。tfitcecoc に渡し、ECOC モデルの SVM 分類器を作成する方法を指定します。

コマンド ウィンドウに t を表示する場合、すべての未指定のオプションは空 ([]) で表示されます。しかし、空のオプションは学習中に対応する既定値に置き換えられます。

ヒント

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

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

t = templateSVM('SaveSupportVectors','on')
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 で導入