ドキュメンテーション

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

crossval

サポート ベクター マシン (SVM) 分類器の交差検証

説明

CVSVMModel = crossval(SVMModel) は、学習済みのサポート ベクター マシン (SVM) 分類器 (SVMModel) から、交差検証された (分割された) SVM 分類器 (CVSVMModel) を返します。既定では、crossval は学習データに対して 10 分割の交差検証を使用して ClassificationPartitionedModel 分類器 CVSVMModel を作成します。

CVSVMModel = crossval(SVMModel,Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、分割された SVM 分類器を返します。たとえば、分割数またはホールドアウト標本比率を指定できます。

すべて折りたたむ

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

load ionosphere
rng(1); % For reproducibility

SVM 分類器を学習させます。予測子データを標準化し、クラスの順序を指定します。

SVMModel = fitcsvm(X,Y,'Standardize',true,'ClassNames',{'b','g'});

SVMModel は学習させた ClassificationSVM 分類器です。'b' は陰性のクラス、'g' は陽性のクラスです。

10 分割交差検証を使用して分類器を交差検証します。

CVSVMModel = crossval(SVMModel)
CVSVMModel = 
  classreg.learning.partition.ClassificationPartitionedModel
    CrossValidatedModel: 'SVM'
         PredictorNames: {1x34 cell}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


  Properties, Methods

FirstModel = CVSVMModel.Trained{1}
FirstModel = 
  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
                    Alpha: [78x1 double]
                     Bias: -0.2209
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           SupportVectors: [78x34 double]
      SupportVectorLabels: [78x1 double]


  Properties, Methods

CVSVMModelClassificationPartitionedModel 交差検証分類器です。交差検証時は、以下の手順が実行されます。

  1. データを同じサイズの 10 個のセットに無作為に分割する。

  2. 9 個のセットに対して SVM 分類器に学習をさせる。

  3. 手順 1 および 2 を k = 10 回繰り返す。毎回、1 個の分割が除外され、残りの 9 個について学習が行われます。

  4. 各分割について汎化統計量を結合する。

FirstModel は 10 個の学習させた分類器のうち最初のものです。これは CompactClassificationSVM 分類器です。

CVSVMModelkfoldLoss に渡すと、汎化誤差を推定できます。

交差検証のホールドアウト標本比率を指定します。既定では、crossval は 10 分割交差検証を使用して SVM 分類器を交差検証します。しかし、交差検証には他のいくつかのオプションがあります。たとえば、異なる分割数またはホールドアウト標本比率を指定できます。

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

load ionosphere
rng(1); % For reproducibility

SVM 分類器を学習させます。データを標準化し、'g' が陽性クラスであることを指定します。

SVMModel = fitcsvm(X,Y,'Standardize',true,'ClassNames',{'b','g'});

SVMModel は学習させた ClassificationSVM 分類器です。

15% のホールドアウト標本を指定して、分類器を交差検証します。

CVSVMModel = crossval(SVMModel,'Holdout',0.15)
CVSVMModel = 
  classreg.learning.partition.ClassificationPartitionedModel
    CrossValidatedModel: 'SVM'
         PredictorNames: {1x34 cell}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 1
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


  Properties, Methods

CVSVMModelClassificationPartitionedModel です。

85% のデータを使用して学習をさせた分類器の比率を表示します。

TrainedModel = CVSVMModel.Trained{1}
TrainedModel = 
  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
                    Alpha: [74x1 double]
                     Bias: -0.2952
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           SupportVectors: [74x34 double]
      SupportVectorLabels: [74x1 double]


  Properties, Methods

TrainedModel は、85% のデータを使用して学習をさせた CompactClassificationSVM 分類器です。

汎化誤差を推定します。

kfoldLoss(CVSVMModel)
ans = 0.0769

サンプル外の誤分類誤差は約 8% です。

入力引数

すべて折りたたむ

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

名前と値のペアの引数

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

例: crossval(SVMModel,'KFold',5) は、5 つの分割を交差検証済みモデルで使用することを指定します。

交差検証分割。'CVPartition' と、cvpartition で作成した cvpartition 分割オブジェクトから構成されるコンマ区切りのペアとして指定します。分割オブジェクトは、交差検証のタイプと、学習セットおよび検証セットのインデックス付けを指定します。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: cvp = cvpartition(500,'KFold',5) を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、'CVPartition',cvp を使用して交差検証済みモデルを指定できます。

ホールドアウト検定に使用されるデータの比率。'Holdout' と範囲 (0,1) のスカラー値から構成されるコンマ区切りのペアとして指定します。'Holdout',p を指定した場合、以下の手順が実行されます。

  1. p*100% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。

  2. コンパクトな学習済みモデルを交差検証済みモデルの Trained プロパティに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'Holdout',0.1

データ型: double | single

交差検証済みモデルで使用する分割数。'KFold' と 1 より大きい正の整数から構成されるコンマ区切りのペアとして指定します。'KFold',k を指定した場合、以下の手順が実行されます。

  1. データを無作為に k 個のセットに分割する。

  2. 各セットについて、そのセットを検定データとして確保し、他の k - 1 個のセットを使用してモデルに学習をさせる。

  3. k 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている k 行 1 列の cell ベクトルのセルに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'KFold',5

データ型: single | double

Leave-one-out 法の交差検証のフラグ。'Leaveout''on' または 'off' で構成されるコンマ区切りのペアとして指定します。'Leaveout','on' を指定した場合、n 個の観測値 (n は、モデルの NumObservations プロパティで指定される、欠損観測値を除外した観測値の個数) のそれぞれについて以下の手順が実行されます。

  1. その観測値を検証データとして確保し、他の n - 1 個の観測値を使用してモデルに学習をさせる。

  2. n 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている n 行 1 列の cell ベクトルのセルに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'Leaveout','on'

ヒント

"kfold" メソッドと、kfoldLoss などの CVSVMModel のプロパティを使用して、交差検証データに対する SVMModel の予測性能を評価します。

代替機能

SVM 分類器に学習をさせてから交差検証を行う代わりに、fitcsvm を使用して名前と値のペアの引数 'CrossVal''CVPartition''Holdout''Leaveout''KFold' のいずれかを指定することにより、交差検証済みの分類器を直接作成できます。

R2014a で導入