ドキュメンテーション

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

ClassificationPartitionedECOC

サポート ベクター マシン (SVM) またはその他の分類器向けの交差検証済みマルチクラス ECOC モデル

説明

ClassificationPartitionedECOC は交差検証分割で学習を行った ECOC (誤り訂正出力符号) モデルのセットです。"kfold" 関数 kfoldPredictkfoldLosskfoldMarginkfoldEdgekfoldfun を 1 つ以上使用して、交差検証分類の品質を評価します。

すべての "kfold" メソッドでは、学習分割 (分割内) 観測値で学習をさせたモデルを使用して、検証分割 (分割外) 観測値に対する応答を予測します。たとえば、データを 5 つに分割して交差検証を行うとします。この場合、ほぼ等しいサイズの 5 つのグループに各観測値が無作為に割り当てられます。"学習分割" にはグループのうち 4 つ (データの約 4/5) が含まれ、"検証分割" には他のグループ (データの約 1/5) が含まれます。この場合、交差検証は次のように処理されます。

  1. (CVMdl.Trained{1} に格納されている) 1 番目のモデルの学習には最後の 4 つのグループの観測値が使用され、1 番目のグループの観測値は検証用に確保されます。

  2. (CVMdl.Trained{2} に格納されている) 2 番目のモデルの学習には、1 番目のグループと最後の 3 つのグループの観測値が使用されます。2 番目のグループの観測値は、検証用に予約されます。

  3. 3 番目、4 番目および 5 番目のモデルに対しても同様に続けられます。

kfoldPredict を使用して検証する場合、i 番目のモデルを使用してグループ i の観測値について予測が計算されます。つまり、それぞれの観測値に対する応答は、その観測値を使用せずに学習させたモデルによって推定されます。

作成

ClassificationPartitionedECOC モデルは 2 つの方法で作成できます。

  • オブジェクト関数 crossval を使用して、交差検証済み ECOC モデルを ECOC モデルから作成する。

  • 関数 fitcecoc を使用し、名前と値のペアの引数 'CrossVal''CVPartition''Holdout''KFold''Leaveout' のいずれかを指定して、交差検証済み ECOC モデルを作成する。

プロパティ

すべて展開する

交差検証のプロパティ

交差検証済みモデルの名前。文字ベクトルを指定します。

たとえば、'ECOC' は交差検証された ECOC モデルを指定します。

データ型: char

交差検証された分割の数。正の整数で指定します。

データ型: double

交差検証パラメーター値。オブジェクトを指定します。パラメーター値は、ECOC 分類器の交差検証に使用した名前と値のペアの引数の値に対応します。推定されたパラメーターは ModelParameters に含まれません。

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

学習データに含まれている観測値の数。正の数値スカラーを指定します。

データ型: double

データを交差検証分割に分割する方法を含むデータ分割。cvpartition モデルとして指定します。

交差検証分割で学習させたコンパクトな分類器。CompactClassificationECOC モデルの cell 配列を指定します。Trained には k 個のセルがあります。k は分割数です。

データ型: cell

モデルの交差検証に使用した観測値の重み。数値ベクトルを指定します。W には NumObservations 個の要素があります。

学習に使用する重みは正規化され nansum(W)1 になります。

データ型: single | double

分類器の交差検証に使用した標準化されていない予測子データ。数値行列を指定します。XNumObservations 行 p 列の行列です。p は予測子の数です。

X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

データ型: single | double

モデルの交差検証に使用される、観測されたクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y には NumObservations 個の要素があり、データ型はモデルの交差検証を実行するために fitcecoc に渡した入力引数 Y と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。

Y の各行は、X の対応する行の観測された分類を表します。

データ型: categorical | char | logical | single | double | cell

ECOC のプロパティ

バイナリ学習器の損失関数。損失関数名を表す文字ベクトルを指定します。

異なる損失関数を使用するバイナリ学習器によって学習させる場合、BinaryLoss'hamming' に設定されます。精度が向上する可能性を高めるには、kfoldPredict または kfoldLoss の名前と値のペアの引数 'BinaryLoss' を使用して予測または損失を計算するときに、既定以外のバイナリ損失関数を指定します。

データ型: char

バイナリ学習器クラス ラベル。数値行列または [] として指定します。

  • すべての分割で符号化行列が同じである場合、BinaryYNumObservations 行 L 列の行列になります。L はバイナリ学習器の個数 (size(CodingMatrix,2)) です。

    BinaryY の要素は –10 または 1 であり、値は二分法によるクラス割り当てに対応します。次の表に、学習器 j が観測値 kBinaryY(k,j) の値に対応する二分法によるクラスに割り当てる方法を示します。

    二分法によるクラス割り当て
    –1学習器 j は、観測値 k を陰性クラスに割り当てます。
    0学習の前に、学習器 j は観測値 k をデータセットから削除します。
    1学習器 j は、観測値 k を陽性クラスに割り当てます。

  • コーディング行列が分割全体で異なる場合、BinaryY は空 ([]) です。

データ型: double

バイナリ学習器のクラス割り当てを指定するコード。数値行列または [] として指定します。

  • すべての分割で符号化行列が同じである場合、CodingMatrix は K 行 L 列の行列になります。K はクラスの個数、L はバイナリ学習器の個数です。

    CodingMatrix の要素は –10 または 1 であり、値は二分法によるクラス割り当てに対応します。次の表に、学習器 j がクラス i の観測値を CodingMatrix(i,j) の値に対応する二分法によるクラスに割り当てる方法を示します。

    二分法によるクラス割り当て
    –1学習器 j は、クラス i の観測値を陰性クラスに割り当てます。
    0学習の前に、学習器 j はクラス i の観測値をデータセットから削除します。
    1学習器 j は、クラス i の観測値を陽性クラスに割り当てます。

  • コーディング行列が分割全体で異なる場合、CodingMatrix は空 ([]) です。Trained プロパティを使用することにより、各分割の符号化行列を取得できます。たとえば、CVMdl.Trained{1}.CodingMatrix は、交差検証された ECOC モデル CVMdl の最初の分割のコーディング行列です。

データ型: double | single | int8 | int16 | int32 | int64

他の分類のプロパティ

カテゴリカル予測子のインデックス。正の整数のベクトルを指定します。CategoricalPredictors には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値を格納します。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: single | double

学習で使用する一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames のデータ型はクラス ラベル Y と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。 ClassNames はクラスの順序も決定します。

データ型: categorical | char | logical | single | double | cell

このプロパティは読み取り専用です。

誤分類のコスト。正方数値行列として指定します。Cost には K 個の行および列が含まれ、K はクラスの数です。

Cost(i,j) は、真のクラスが i である点をクラス j に分類するコストです。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。

fitcecoc は、異なるタイプのバイナリ学習器に異なる誤分類のコストを組み込みます。

データ型: double

予測子データ X に現れる順序で並んでいる予測子名。文字ベクトルの cell 配列を指定します。PredictorNames の長さは、X の列数と同じです。

データ型: cell

このプロパティは読み取り専用です。

クラスの事前確率。Prior の要素数は ClassNames 内のクラス数と同じであり、要素の順序は ClassNames の要素に対応します。

fitcecoc は、異なるタイプのバイナリ学習器に異なる誤分類のコストを組み込みます。

データ型: double

応答変数名。文字ベクトルを指定します。

データ型: char

予測されたスコアに適用するスコア変換関数。関数名または関数ハンドルを指定します。

スコア変換関数を function などに変更するには、ドット表記を使用します。

  • 組み込み関数の場合、function を表の値に置き換えて次のコードを入力します。

    Mdl.ScoreTransform = 'function';

    説明
    'doublelogit'1/(1 + e–2x)
    'invlogit'log(x / (1–x))
    'ismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定します。
    'logit'1/(1 + e–x)
    'none' または 'identity'x (変換なし)
    'sign'x < 0 のとき –1
    x = 0 のとき 0
    x > 0 のとき 1
    'symmetric'2x – 1
    'symmetricismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定します。
    'symmetriclogit'2/(1 + e–x) – 1

  • MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。

    Mdl.ScoreTransform = @function;

    function は、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。

データ型: char | 関数ハンドル

オブジェクト関数

kfoldEdge交差検証済み ECOC モデルの分類エッジ
kfoldLoss交差検証済み ECOC モデルの分類損失
kfoldMargin交差検証済み ECOC モデルの分類マージン
kfoldPredict交差検証済み ECOC モデルの観測値の分類
kfoldfun交差検証済み ECOC モデルを使用する交差検証関数

すべて折りたたむ

フィッシャーのアヤメのデータセットを読み込みます。予測子データ 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 分類器がかなり良好に一般化を行うことを示しています。

代理分岐をもつ決定木の GentleBoost アンサンブルを使用して 1 対他の ECOC 分類器を学習させます。10 分割交差検証を使用して分類誤差を推定します。

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

load arrhythmia
[n,p] = size(X)
n = 452
p = 279
isLabels = unique(Y);
nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%

このデータセットには 279 個の予測子が含まれ、452 という標本サイズは相対的に小さいものです。16 個の異なるラベルのうち、13 個のみが応答 (Y) で表現されています。各ラベルは不整脈のさまざまな段階を表しており、観測値の 54.20% がクラス 1 に含まれています。

アンサンブル テンプレートを作成します。少なくとも 3 つの引数を指定しなければなりません。メソッド、学習器の数、および学習器のタイプです。この例では、方式として 'GentleBoost'、学習器の個数として 100 を指定します。欠損観測値があるので、代理分岐を使用する決定木テンプレートを指定します。

tTree = templateTree('surrogate','on');
tEnsemble = templateEnsemble('GentleBoost',100,tTree);

tEnsemble はテンプレート オブジェクトです。ほとんどのプロパティは空ですが、学習中に既定値が入力されます。

決定木のアンサンブルをバイナリ学習器として使用して、1 対他の ECOC 分類器を学習させます。Parallel Computing Toolbox のライセンスがある場合、プール内のワーカーに各バイナリ学習器を送信する並列計算を使用して、計算を高速化できます (ワーカーの個数はシステム構成によって異なります)。さらに、事前確率として 1/K を指定します。K = 13 は異なるクラスの個数です。

pool = parpool; % Invoke workers
Starting parallel pool (parpool) using the 'local' profile ...
connected to 6 workers.
options = statset('UseParallel',true);
Mdl = fitcecoc(X,Y,'Coding','onevsall','Learners',tEnsemble,...
                'Prior','uniform','Options',options);

MdlClassificationECOC モデルです。

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

CVMdl = crossval(Mdl,'Options',options);
Warning: One or more folds do not contain points from all the groups.

CVMdlClassificationPartitionedECOC モデルです。少なくとも 1 つの分割の学習中に、いくつかのクラスが表示されないことが警告でわかります。したがって、これらの分割は欠損クラスに対するラベルを予測できません。cell のインデックス指定とドット表記を使用して、分割の結果を調査できます。たとえば、1 番目の分割の結果にアクセスするには CVMdl.Trained{1} と入力します。

交差検証済みの ECOC 分類器を使用して、検証分割のラベルを予測します。混同行列は、confusionchart を使用して計算できます。内側の位置のプロパティを変更してチャートを移動およびサイズ変更することにより、行要約の内部にパーセントが表示されるようにします。

oofLabel = kfoldPredict(CVMdl,'Options',options);
ConfMat = confusionchart(Y,oofLabel,'RowSummary','total-normalized');
ConfMat.InnerPosition = [0.10 0.12 0.85 0.85];

R2014b で導入