Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ClassificationPartitionedModel

パッケージ: classreg.learning.partition

交差検証分類モデル

説明

ClassificationPartitionedModel は、交差検証の学習集合で学習を行った分類モデルのセットです。次のうち 1 つ以上の kfold メソッドを使用した交差検証により、分類の品質を評価します。それらは kfoldPredictkfoldLosskfoldMarginkfoldEdge および kfoldfun です。

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

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

  • CVMdl.Trained{2} に保存されている 2 番目のモデルは、最初のグループおよび後の 3 グループの観測値によって学習され、検証のために 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 を参照してください。

入力引数

Mdl

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

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

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

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

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

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

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

プロパティ

BinEdges

数値予測子のビンのエッジ。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 になります。

CategoricalPredictors

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

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

ClassNames

モデルの学習に使用した一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

Cost

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

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

CVModel.Cost = CostMatrix;

CrossValidatedModel

交差検証済みモデルの名前。文字ベクトル。

KFold

交差検証済みモデルで使用される分割数。正の整数。

ModelParameters

CVModel のパラメーターを保持しているオブジェクト。

NumObservations

X および Y に格納されている学習データ内の観測値の個数。数値スカラーを指定します。

Partition

交差検証済みモデルの作成に使用されるクラス CVPartition の分割。

PredictorNames

予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は、予測子名が学習データに現れる順序に対応します。

Prior

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

CVModel が交差検証済みの ClassificationDiscriminant モデルまたは ClassificationNaiveBayes モデルの場合、ドット表記を使用して事前確率のベクトルをたとえば priorVector などに変更することができます。

CVModel.Prior = priorVector;

ResponseName

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

ScoreTransform

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

スコア変換関数を 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 は、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。

Trained

学習済みの学習器。コンパクトな分類モデルの cell 配列。

W

スケーリングされた weights。長さ n のベクトル、X の観測値の数。

X

予測子の値の行列または table。

Y

各観測値のクラス ラベルを指定する categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列。Y の各エントリは、X で該当する観測の応答値です。

オブジェクト関数

gatherGPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集
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.17379     
            7                   0.89638     
            8                 0.0076606     
            9                   0.91603     
           16                  0.026714     
           22                4.6086e-06     
           23                    0.9024     
           24                2.4131e-06     
           38                0.00042687     
           41                   0.86427     

ヒント

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

拡張機能

バージョン履歴

すべて展開する