ドキュメンテーション

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

crossval

クラス: ClassificationECOC

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

構文

CVMdl = crossval(Mdl)
CVMdl = crossval(Mdl,Name,Value)

説明

CVMdl = crossval(Mdl) は、学習済みの誤り訂正出力符号 (ECOC) モデル (Mdl) から、交差検証された (分割された) マルチクラスの ECOC モデル (CVMdl) を返します。

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

CVMdl = crossval(Mdl,Name,Value) は、1 つ以上の Name,Value のペアの引数によって指定された追加オプションを使用して分割された ECOC モデルを返します。

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

入力引数

すべて展開する

マルチクラス ECOC モデル。fitcecoc によって返される ClassificationECOC モデルを指定します。

名前と値のペアの引数

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

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

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、'CVPartition''Holdout''KFold''Leaveout' の 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',1) を指定します。

出力引数

すべて展開する

交差検証 ECOC モデル。ClassificationPartitionedECOC モデルとして返されます。

すべて展開する

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

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

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

t = templateSVM('Standardize',1)
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 分類器です。

分類誤差を推定します。

loss = kfoldLoss(CVMdl)
loss = 0.0400

分類誤差は 4% であり、ECOC 分類器がかなり良好に一般化を行うことを示しています。

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

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

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

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

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

OrdMat = designecoc(11,'ordinal');
nOM = 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,nOM(2)); OrdMat; zeros(1,nOM(2))]];

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

t = templateEnsemble('GentleBoost',50,'Tree');
options = statset('UseParallel',1);
Mdl = fitcecoc(X,Y,'Coding',Coding,'Learners',t,'Options',options);

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.

クラスの中には相対的頻度が低いものがあるため、一部の分割はそれらのクラスの観測を使用した学習を実行しません。CVMdlClassificationPartitionedECOC 交差検証 ECOC モデルです。

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

oosLoss = kfoldLoss(CVMdl,'Options',options)
oosLoss =

    0.3208

標本外分類誤差は 32% であるため、このモデルの一般化が良好ではないことを示しています。モデルの精度を向上させるため、RobustBoost など別のブースティング メソッドか、SVM などのまったく異なるアルゴリズムによる学習を試してください。

ヒント

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

代替方法

ECOC モデルを学習させ交差検証を実行する代わりに、fitcecoc を使用し、下記のいずれかの名前と値のペアの引数を指定して交差検証 ECOC モデルを直接作成することができます。CrossValCVPartitionHoldoutLeaveout または KFold

拡張機能