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 |  1.110223e-16 |

 SVM optimization did not converge to the required tolerance.

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

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

partialLoss = resubLoss(SVMModel)
partialLoss = 0.1054

学習標本の誤分類誤差は約 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 |  1.137406e-01 |  1.688486e+00 |  1.064098e+00 |          100 | -7.654307e+01 |  1.477984e-15 |
|          500 |active|          351 |  2.458986e-03 |  8.900780e-02 |  5.353919e-02 |          103 | -7.819650e+01 |  1.570792e-15 |
|          750 |active|          351 |  6.861149e-04 |  2.041818e-02 |  1.045385e-02 |          103 | -7.820930e+01 |  1.499668e-15 |
|         1000 |active|          351 |  5.992844e-05 |  1.878806e-03 |  1.095583e-03 |          103 | -7.820958e+01 |  1.606354e-15 |
|         1072 |active|          351 |  3.992245e-05 |  9.877142e-04 |  5.324559e-04 |          103 | -7.820959e+01 |  1.823194e-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.8829
         KernelParameters: [1x1 struct]
           BoxConstraints: [351x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [351x1 logical]
                   Solver: 'SMO'


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

updatedLoss = resubLoss(UpdatedSVMModel)
updatedLoss = 0.0769

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

入力引数

すべて折りたたむ

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

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

データ型: double

名前と値の引数

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

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

例: 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 で導入