Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

resume

サポート ベクター マシン (SVM) 分類器の学習を再開

説明

UpdatedSVMModel = resume(SVMModel,numIter) は、さらに numIter 回の反復についてサポート ベクター マシン (SVM) 分類器 SVMModel に学習をさせることによって更新した SVM 分類器 UpdatedSVMModel を返します。SVMModel と同様、更新された SVM 分類器は ClassificationSVM 分類器です。

resume は、fitcsvmSVMModel に学習をさせるときに設定された学習オプションを引き続き適用します。

UpdatedSVMModel = resume(SVMModel,numIter,Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して UpdatedSVMModel を返します。たとえば、詳細レベルを指定できます。

すべて折りたたむ

SVM 分類器に学習をさせ、意図的にソルバーが解に収束しないようにします。そして、学習プロセス全体をやり直さずに分類器の学習を再開します。

ionosphere データセットを読み込みます。

load ionosphere
rng(1); % For reproducibility

SVM 分類器を学習させます。最適化ルーチンが最大で 50 回の反復を実行するよう指定します。

SVMModel = fitcsvm(X,Y,'IterationLimit',50);
DidConverge = SVMModel.ConvergenceInfo.Converged
DidConverge = logical
   0

Reason = SVMModel.ConvergenceInfo.ReasonForConvergence
Reason = 
'NoConvergence'

DidConverge = 0 は、最適化ルーチンが解に収束しなかったことを示します。Reason は、収束しなかった理由を示します。したがって、SVMModel は部分的に学習をさせた SVM 分類器です。

SVM 分類器の学習を再開し、1500 回の反復を追加で実行します。

UpdatedSVMModel = resume(SVMModel,1500);
DidConverge = UpdatedSVMModel.ConvergenceInfo.Converged
DidConverge = logical
   1

Reason = UpdatedSVMModel.ConvergenceInfo.ReasonForConvergence
Reason = 
'DeltaGradient'

DidConverge は、最適化ルーチンが解に収束したことを示しています。Reason は、勾配差分 (DeltaGradient) が許容レベル (DeltaGradientTolerance) に達していることを表します。そのため、SVMModel は完全な学習済み SVM 分類器です。

SVM 分類器に学習をさせ、意図的にソルバーが解に収束しないようにします。そして、学習プロセス全体をやり直さずに分類器の学習を再開します。部分的に学習をさせた SVM 分類器と完全に学習をさせた分類器について再代入損失の値を比較します。

ionosphere データセットを読み込みます。

load ionosphere

SVM 分類器を学習させます。最適化ルーチンが最大で 100 回の反復を実行するよう指定します。50 回の反復ごとに診断情報を出力するように指定して、アルゴリズムを監視します。

SVMModel = fitcsvm(X,Y,'IterationLimit',100,'Verbose',1,'NumPrint',50);
|===================================================================================================================================|
|   Iteration  | Set  |   Set Size   |  Feasibility  |     Delta     |      KKT      |  Number of   |   Objective   |   Constraint  |
|              |      |              |      Gap      |    Gradient   |   Violation   |  Supp. Vec.  |               |   Violation   |
|===================================================================================================================================|
|            0 |active|          351 |  9.971591e-01 |  2.000000e+00 |  1.000000e+00 |            0 |  0.000000e+00 |  0.000000e+00 |
|           50 |active|          351 |  8.064425e-01 |  3.736929e+00 |  2.161317e+00 |           60 | -3.628863e+01 |  5.551115e-17 |

SVM optimization did not converge to the required tolerance.

反復表示がコマンド ウィンドウに出力されます。この出力からは、最適化ルーチンが解に収束しなかったことがわかります。

部分的に学習させた SVM 分類器の再代入損失を推定します。

partialLoss = resubLoss(SVMModel)
partialLoss = 0.1197

学習標本の誤分類誤差は約 12% です。

分類器の学習を再開し、1500 回の反復を追加で実行します。反復を 250 回実行するごとに診断情報を出力するよう指定します。

UpdatedSVMModel = resume(SVMModel,1500,'NumPrint',250)
|===================================================================================================================================|
|   Iteration  | Set  |   Set Size   |  Feasibility  |     Delta     |      KKT      |  Number of   |   Objective   |   Constraint  |
|              |      |              |      Gap      |    Gradient   |   Violation   |  Supp. Vec.  |               |   Violation   |
|===================================================================================================================================|
|          250 |active|          351 |  2.097627e-01 |  1.965259e+00 |  1.211407e+00 |          102 | -7.577701e+01 |  1.956768e-15 |
|          500 |active|          351 |  3.625797e-03 |  9.547707e-02 |  5.710587e-02 |          103 | -7.819434e+01 |  2.337974e-15 |
|          750 |active|          351 |  5.810633e-04 |  2.683463e-02 |  1.500555e-02 |          103 | -7.820914e+01 |  2.724383e-15 |
|         1000 |active|          351 |  7.464431e-05 |  2.218816e-03 |  1.276094e-03 |          103 | -7.820958e+01 |  2.277258e-15 |
|         1067 |active|          351 |  4.748866e-05 |  9.882221e-04 |  5.178619e-04 |          103 | -7.820959e+01 |  2.257309e-15 |

 Exiting Active Set upon convergence due to DeltaGradient.
UpdatedSVMModel = 
  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
          NumObservations: 351
                    Alpha: [103x1 double]
                     Bias: -3.8827
         KernelParameters: [1x1 struct]
           BoxConstraints: [351x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [351x1 logical]
                   Solver: 'SMO'


  Properties, Methods

反復が 1000 回実行されると処理が再開され、fitcsvm を使用してモデルに学習をさせるときに設定したものと同じ詳細レベルを使用します。アルゴリズムが収束していることが、出力からわかります。そのため、UpdatedSVMModel は完全な学習済み ClassificationSVM 分類器です。

updatedLoss = resubLoss(UpdatedSVMModel)
updatedLoss = 0.0769

完全な学習済み分類器の学習標本誤分類誤差は約 8% です。

入力引数

すべて折りたたむ

完全な学習済み SVM 分類器。fitcsvm で学習をさせた ClassificationSVM モデルを指定します。

SVM 分類器の学習を続行するための反復の回数。正の整数として指定します。

データ型: double

名前と値のペアの引数

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

例: resume(SVMModel,500,'Verbose',2) は、さらに 500 回の反復について SVMModel に学習をさせ、すべての反復で診断メッセージの表示と収束基準の保存を行うよう指定します。

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

次の表は、詳細レベルの値をまとめています。

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

既定では、VerbosefitcsvmSVMModel に学習をさせるために使用する値です。

例: 'Verbose',1

データ型: single

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

'Verbose',1'NumPrint',numprint を設定した場合、SMO[1]および ISDA[2]による最適化診断メッセージが numprint 回の反復ごとにコマンド ウィンドウに表示されます。

既定では、NumPrintfitcsvmSVMModel に学習をさせるために使用する値です。

例: 'NumPrint',500

データ型: single

ヒント

ソルバーが 'SMO' または 'ISDA' である場合に最適化が収束しない場合は、SVM 分類器の学習の再開を試してください。

参照

[1] 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.

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

拡張機能

R2014a で導入