ドキュメンテーション

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

crossval

マルチクラス誤り訂正出力符号 (ECOC) モデルの交差検証

説明

CVMdl = crossval(Mdl) は、学習済みの誤り訂正出力符号 (ECOC) モデル (Mdl) から、交差検証された (分割された) マルチクラス ECOC モデル (CVMdl) を返します。既定では、crossval は学習データに対して 10 分割の交差検証を使用して ClassificationPartitionedECOC モデル CVMdl を作成します。

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

すべて折りたたむ

SVM バイナリ学習器による ECOC 分類器を交差検証し、一般化分類誤差を推定します。

フィッシャーのアヤメのデータセットを読み込みます。予測子データ X と応答データ Y を指定します。

load fisheriris
X = meas;
Y = species;
rng(1); % For reproducibility

SVM テンプレートを作成し、予測子を標準化します。

t = templateSVM('Standardize',true)
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: 1
        SaveSupportVectors: []
            VerbosityLevel: []
                   Version: 2
                    Method: 'SVM'
                      Type: 'classification'

t は SVM テンプレートです。テンプレート オブジェクトのプロパティは、ほとんとが空です。ECOC 分類器に学習をさせると、該当するプロパティが既定値に設定されます。

ECOC 分類器に学習をさせ、クラスの順序を指定します。

Mdl = fitcecoc(X,Y,'Learners',t,...
    'ClassNames',{'setosa','versicolor','virginica'});

MdlClassificationECOC 分類器です。ドット表記を使用してプロパティにアクセスできます。

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

CVMdl = crossval(Mdl);

CVMdlClassificationPartitionedECOC 交差検証 ECOC 分類器です。

一般化分類誤差を推定します。

genError = kfoldLoss(CVMdl)
genError = 0.0400

一般化分類誤差が 4% なので、ECOC 分類器がかなり良好に一般化を行うことがわかります。

以下の arrhythmia データセットを考えます。このデータセットには 16 個のクラスが含まれており、そのうち 13 個がデータ内で表されています。最初のクラスは被験者に不整脈がないことを示し、最後のクラスは被験者の不整脈の状態が記録されていないことを示します。他のクラスは不整脈の重症度を示す順序レベルです。

ECOC 分類器をクラスの説明で指定されるカスタム符号化設計行列を使用して学習させます。

arrhythmia データセットを読み込みます。Ycategorical 変数に変換し、クラスの個数を調べます。

load arrhythmia
Y = categorical(Y);
K = unique(Y); % Number of distinct classes

クラスの性質を説明するコーディング行列を作成します。

OrdMat = designecoc(11,'ordinal');
nOrdMat = size(OrdMat);
class1VSOrd = [1; -ones(11,1); 0];
class1VSClass16 = [1; zeros(11,1); -1];
OrdVSClass16 = [0; ones(11,1); -1];
Coding = [class1VSOrd class1VSClass16 OrdVSClass16,...
    [zeros(1,nOrdMat(2)); OrdMat; zeros(1,nOrdMat(2))]];

ECOC 分類器をカスタム符号化設計 (Coding) と並列計算を使用して学習させます。GentleBoost を使用してブースティングされた 50 本の分類木によるアンサンブルを指定します。

t = templateEnsemble('GentleBoost',50,'Tree');
options = statset('UseParallel',true);
Mdl = fitcecoc(X,Y,'Coding',Coding,'Learners',t,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

MdlClassificationECOC モデルです。ドット表記を使用してプロパティにアクセスできます。

8 分割の交差検証と並列計算を使用して、Mdl の交差検証を実行します。

rng(1); % For reproducibility
CVMdl = crossval(Mdl,'Options',options,'KFold',8);
Warning: One or more folds do not contain points from all the groups.

相対頻度が低いクラスがあるので、一部の分割の学習ではこれらのクラスの観測値が使用されません。CVMdl は、交差検証済み ECOC モデル (ClassificationPartitionedECOC モデル) です。

並列計算を使用して汎化誤差を推定します。

error = kfoldLoss(CVMdl,'Options',options)
error = 0.3208

交差検証分類誤差は 32% なので、このモデルの一般化が良好ではないことがわかります。モデルを改善するには、異なるブースティング法 (RobustBoost など) または異なるアルゴリズム (SVM など) を使用した学習を試してください。

入力引数

すべて折りたたむ

学習済みの完全なマルチクラス ECOC モデル。fitcecoc によって学習をさせた ClassificationECOC モデルを指定します。

名前と値のペアの引数

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

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

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

推定オプション。statset により返される 'Options' と構造体配列から構成されるコンマ区切りのペアとして指定します。

並列計算を起動するには、以下を行います。

  • Parallel Computing Toolbox™ ライセンスが必要です。

  • 'Options',statset('UseParallel',true) を指定します。

ヒント

  • 交差検証されたデータに対する Mdl の予測性能を評価するには、kfoldLoss など、CVMdl の "kfold" メソッドおよびプロパティを使用します。

代替機能

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

拡張機能

R2014b で導入