メインコンテンツ

ClassificationPartitionedModel

交差検証分類モデル

説明

ClassificationPartitionedModel は、交差検証分割で学習させた一連の分類モデルです。"kfold" メソッド kfoldPredictkfoldLosskfoldMarginkfoldEdgekfoldfun の 1 つ以上を使用した交差検証によって分類の品質を推定します。

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

  • CVMdl.Trained{1} に保存されている最初のモデルは、後の 4 グループの観測値によって学習され、最初のグループの観測値を検証用に確保します。

  • 1 番目のグループと最後の 3 つのグループの観測値を使用して 2 番目のモデル (CVMdl.Trained{2} に格納) に学習させ、2 番目のグループの観測値を検証用に確保します。

  • 3 番目~ 5 番目のモデルについて同様に続けます。

kfoldPredict を呼び出して検証する場合、最初のモデルを使用してグループ 1 の観測に対する予測が計算され、2 番目のモデルにはグループ 2 が計算され、以降同様です。つまり、それぞれの観測値に対する応答は、その観測値ではなく学習したモデルによって推定されます。

作成

説明

CVMdl = crossval(Mdl) は、分類モデル (Mdl) から交差検証分類モデルを作成します。

あるいは、次のようにします。

  • CVDiscrMdl = fitcdiscr(X,Y,Name,Value)

  • CVKNNMdl = fitcknn(X,Y,Name,Value)

  • CVNetMdl = fitcnet(X,Y,Name,Value)

  • CVNBMdl = fitcnb(X,Y,Name,Value)

  • CVSVMMdl = fitcsvm(X,Y,Name,Value)

  • CVTreeMdl = fitctree(X,Y,Name,Value)

これらは、Name'CrossVal''KFold''Holdout''Leaveout'、または 'CVPartition' のいずれかである場合に、その交差検証モデルを作成します。構文の詳細については、fitcdiscrfitcknnfitcnetfitcnbfitcsvm、および fitctree を参照してください。

入力引数

すべて展開する

分類モデル。次のいずれかとして指定します。

  • fitctree を使用して学習させた分類木

  • fitcdiscr を使用して学習させた判別分析分類器

  • fitcnet を使用して学習させたニューラル ネットワーク分類器

  • fitcnb を使用して学習させた単純ベイズ分類器

  • fitcknn を使用して学習させた最近傍分類器

  • fitcsvm を使用して学習させたサポート ベクター マシン分類器

プロパティ

すべて展開する

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

数値予測子のビンのエッジ。p 個の数値ベクトルが含まれている cell 配列を指定します。p は予測子の個数です。各ベクトルには、数値予測子のビンのエッジを含めます。カテゴリカル予測子はビン化されないので、カテゴリカル予測子の場合は、この cell 配列の要素を空にします。

数値予測子がビン化されるのは、木学習器を使用してモデルに学習をさせるときに名前と値の引数 NumBins として正の整数スカラーを指定した場合だけです。NumBins の値が空 (既定) である場合、BinEdges プロパティは空になります。

学習済みモデル mdlBinEdges プロパティを使用することにより、ビン化された予測子データ Xbinned を再現できます。

X = mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
    idxNumeric = idxNumeric';
end
for j = idxNumeric 
    x = X(:,j);
    % Convert x to array if x is a table.
    if istable(x) 
        x = table2array(x);
    end
    % Group x into bins by using the discretize function.
    xbinned = discretize(x,[-inf; edges{j}; inf]); 
    Xbinned(:,j) = xbinned;
end
数値予測子の場合、1 からビンの数までの範囲にあるビンのインデックスが Xbinned に格納されます。カテゴリカル予測子の場合、Xbinned の値は 0 になります。XNaN が含まれている場合、対応する Xbinned の値は NaN になります。

データ型: cell

カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

Mdl が学習済みの判別分析分類器の場合、CategoricalPredictors は常に空 ([]) になります。

データ型: single | double

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

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

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

正方行列。Cost(i,j) は真のクラスが i である場合に 1 つの点をクラス j に分類するためのコストです (行は真のクラス、列は予測したクラスに対応します)。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。Cost の行および列の数は、応答に含まれている一意なクラスの数です。

CVModel が交差検証済みの ClassificationDiscriminant モデル、ClassificationKNN モデル、ClassificationNaiveBayes モデル、または ClassificationNeuralNetwork モデルの場合、ドット表記を使用してコスト行列を変更できます。たとえば、CostMatrix の場合は次のようになります。

CVModel.Cost = CostMatrix;

データ型: double

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

交差検証済みモデルの名前。文字ベクトルとして返されます。

データ型: char

交差検証モデルの分割の数。正の整数として返されます。

データ型: double

交差検証済みモデルのパラメーター。オブジェクトとして返されます。

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

学習データ内の観測値の数。正の整数として返されます。入力データまたは応答データに欠損値がある場合、NumObservations は入力データの行数よりも少なくなることがあります。

データ型: double

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

交差検証で使用される分割。CVPartition オブジェクトとして返されます。

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

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

データ型: cell

各クラスの事前確率。数値ベクトルとして返されます。Prior の要素の順序は、ClassNames のクラスの順序に対応します。

CVModel が交差検証済みの ClassificationDiscriminant モデルまたは ClassificationNaiveBayes モデルの場合、ドット表記を使用して事前確率のベクトルを変更できます。たとえば、priorVector をクラス数と同じ長さのベクトルとすると次のようになります。

CVModel.Prior = priorVector;

データ型: double

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

データ型: char

スコア変換。文字ベクトルまたは関数ハンドルを指定します。ScoreTransform は、組み込みの変換関数または予測した分類スコアを変換する関数のハンドルを表します。

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

  • 組み込み関数の場合は、文字ベクトルを入力します。

    Mdl.ScoreTransform = 'function';

    次の表は、使用可能な組み込み関数の一覧です。

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

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

    Mdl.ScoreTransform = @function;

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

データ型: char | string | function_handle

学習済みの学習器。交差検証分割で学習させたコンパクトな分類モデルの cell 配列として返されます。

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

モデル内のスケーリングされた重み。数値ベクトルとして返されます。W の長さは n (学習データの行数) です。

データ型: double

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

予測子の値。実数行列または table として返されます。X の各列が 1 つの変数 (予測子) を表し、各行が 1 つの観測値を表します。

データ型: double | table

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

X の観測値に対応するクラス ラベル。categorical 配列、文字ベクトルの cell 配列、文字配列、logical ベクトル、または数値ベクトルとして返されます。Y の各行は、X の対応する行の分類を表します。

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

オブジェクト関数

gatherGather properties of Statistics and Machine Learning Toolbox object from GPU
kfoldEdge交差検証済み分類モデルの分類エッジ
kfoldLoss交差検証済み分類モデルの分類損失
kfoldMargin交差検証済み分類モデルの分類マージン
kfoldPredict交差検証済み分類モデルの観測値の分類
kfoldfun分類での関数の交差検証

すべて折りたたむ

分類木モデルの "k" 分割交差検証誤差を評価します。

フィッシャーのアヤメのデータ セットを読み込みます。

load fisheriris

既定のオプションを使用して分類木に学習させます。

Mdl = fitctree(meas,species);

分類木モデルを交差検証します。

CVMdl = crossval(Mdl);

10 分割交差検証損失を推定します。

L = kfoldLoss(CVMdl)
L = 
0.0533

SVM アルゴリズムのテスト セットの陽性クラス事後確率を推定します。

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

load ionosphere

SVM 分類器を学習させます。20% のホールドアウト標本を指定します。予測子を標準化してクラスの順序を指定することをお勧めします。

rng(1) % For reproducibility
CVSVMModel = fitcsvm(X,Y,'Holdout',0.2,'Standardize',true,...
    'ClassNames',{'b','g'});

CVSVMModel は学習させた ClassificationPartitionedModel 交差検証分類器です。

観測スコアを、'g' として分類される観測の事後確率にマッピングするために最適なスコア関数を推定します。

ScoreCVSVMModel = fitSVMPosterior(CVSVMModel);

ScoreSVMModel は学習させた ClassificationPartitionedModel 交差検証分類器で、学習データから推定された最適スコア変換関数が含まれます。

標本外の陽性クラス事後確率を推定します。最初の 10 件の標本外観測の結果を表示します。

[~,OOSPostProbs] = kfoldPredict(ScoreCVSVMModel);
indx = ~isnan(OOSPostProbs(:,2));
hoObs = find(indx); % Holdout observation numbers
OOSPostProbs = [hoObs, OOSPostProbs(indx,2)];
table(OOSPostProbs(1:10,1),OOSPostProbs(1:10,2),...
    'VariableNames',{'ObservationIndex','PosteriorProbability'})
ans=10×2 table
    ObservationIndex    PosteriorProbability
    ________________    ____________________

            6                   0.17375     
            7                   0.89638     
            8                 0.0076573     
            9                   0.91602     
           16                  0.026709     
           22                4.6069e-06     
           23                   0.90241     
           24                2.4119e-06     
           38                0.00042666     
           41                   0.86429     

ヒント

学習済みの交差検証 SVM 分類器の事後確率を推定するには、fitSVMPosterior を使用します。

拡張機能

すべて展開する

バージョン履歴

R2011a で導入

すべて展開する