ドキュメンテーション

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

crossval

クラス: ClassificationNaiveBayes

交差検証した単純ベイズ分類器

説明

CVMdl = crossval(Mdl) は学習させた単純ベイズ分類器 (Mdl) から分割された単純ベイズ分類器 (CVSMdl) を返します。

既定の設定では、crossval は 学習データに 10 分割交差検証を使用して、CVMdl を作成します。

CVMdl = crossval(Mdl,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使用して、分割された単純ベイズ分類器を返します。

たとえば、ホールドアウト標本比率を指定できます。

入力引数

すべて展開する

完全な学習済み単純ベイズ分類器。fitcnb で学習させた ClassificationNaiveBayes モデルとして指定します。

名前と値のペアの引数

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

交差検証分割。'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'

出力引数

すべて展開する

交差検証した単純ベイズ分類器。ClassificationPartitionedModel モデルとして返されます。

すべて展開する

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

load ionosphere
X = X(:,3:end); % Remove first two predictors for stability
rng(1);         % For reproducibility

単純ベイズ分類器を学習させます。クラスの順序を定義することをお勧めします。ラベルが与えられる場合、各予測子は条件付きで正規分布すると仮定します。

Mdl = fitcnb(X,Y,'ClassNames',{'b','g'});

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

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

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


  Properties, Methods

FirstModel = CVMdl.Trained{1}
FirstModel = 
  classreg.learning.classif.CompactClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'b'  'g'}
            ScoreTransform: 'none'
         DistributionNames: {1x32 cell}
    DistributionParameters: {2x32 cell}


  Properties, Methods

CVMdlClassificationPartitionedModel 交差検証分類器です。次の処理が実行されます。

  1. データを無作為に同じサイズの 10 個の組に分割します。

  2. 9 個の組で単純ベイズ分類器を学習させます。

  3. 手順 1 および 2 を k = 10 回繰り返します。各回につき 1 つの分割を除外し、他の 9 つの分割で学習させます。

  4. 分割ごとに汎化統計値を結合します。

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

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

既定では、crossval は 10 分割交差検証を使用して単純ベイズ分類器を交差検証します。この他にも、異なる分割数またはホールドアウト標本比率を指定するなどのオプションがあります。この例では、ホールドアウト標本比率を指定する方法を説明します。

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

load ionosphere
X = X(:,3:end); % Remove first two predictors for stability
rng(1);         % For reproducibility

単純ベイズ分類器を学習させます。ラベルが与えられる場合、各予測子は条件付きで正規分布すると仮定します。クラスの順序を定義することをお勧めします。

Mdl = fitcnb(X,Y,'ClassNames',{'b','g'});

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

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

CVMdl = crossval(Mdl,'Holdout',0.30)
CVMdl = 
  classreg.learning.partition.ClassificationPartitionedModel
    CrossValidatedModel: 'NaiveBayes'
         PredictorNames: {1x32 cell}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 1
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


  Properties, Methods

TrainedModel = CVMdl.Trained{1}
TrainedModel = 
  classreg.learning.classif.CompactClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'b'  'g'}
            ScoreTransform: 'none'
         DistributionNames: {1x32 cell}
    DistributionParameters: {2x32 cell}


  Properties, Methods

CVMdlClassificationPartitionedModel です。TrainedModel はデータの 70% を使用して学習させた CompactClassificationNaiveBayes 分類器です。

汎化誤差を推定します。

kfoldLoss(CVMdl)
ans = 0.2571

標本外の誤分類誤差は約 2.6% です。

ヒント

関数 "kfold" と kfoldLoss などの CVMdl のプロパティを使用して交差検証されたデータにおいて、Mdl の予測パフォーマンスを評価します。

代替方法

単純ベイズ分類器を作成し、その後に交差検証分類器を作成するのではなく、fitcnb を使用して次のいずれかの名前と値のペアの引数を指定し、交差検証分類器を直接作成してください。'CrossVal''CVPartition''Holdout''Leaveout' または 'KFold' です。