Main Content

resubPredict

学習済み分類器を使用した学習データの分類

    説明

    label = resubPredict(Mdl) は、Mdl.X に格納されている予測子データを使用して、学習済み分類モデル Mdl の予測クラス ラベルのベクトル (label) を返します。

    [label,Score] = resubPredict(Mdl) は、分類スコアも返します。

    [label,Score] = resubPredict(Mdl,'IncludeInteractions',includeInteractions) は、計算に交互作用項を含めるかどうかを指定します。この構文は一般化加法モデルにのみ適用されます。

    [label,Score,Cost] = resubPredict(Mdl) は、予測誤分類コストも返します。この構文は k 最近傍モデルと単純ベイズ モデルにのみ適用されます。

    すべて折りたたむ

    fisheriris データ セットを読み込みます。150 本のアヤメについて 4 つの測定値が含まれる数値行列 X を作成します。対応するアヤメの種類が含まれる文字ベクトルの cell 配列 Y を作成します。

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

    予測子 X とクラス ラベル Y を使用して、単純ベイズ分類器に学習させます。クラス名を指定することが推奨されます。fitcnb は、各予測子が条件付き正規分布に従うと仮定しています。

    Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'})
    Mdl = 
      ClassificationNaiveBayes
                  ResponseName: 'Y'
         CategoricalPredictors: []
                    ClassNames: {'setosa'  'versicolor'  'virginica'}
                ScoreTransform: 'none'
               NumObservations: 150
             DistributionNames: {'normal'  'normal'  'normal'  'normal'}
        DistributionParameters: {3x4 cell}
    
    
    

    Mdl は学習させた ClassificationNaiveBayes 分類器です。

    学習標本のラベルを予測します。

    label = resubPredict(Mdl);

    10 件の観測値の無作為なセットについて結果を表示します。

    idx = randsample(size(X,1),10);
    table(Y(idx),label(idx),'VariableNames', ...
        {'True Label','Predicted Label'})
    ans=10×2 table
          True Label      Predicted Label
        ______________    _______________
    
        {'virginica' }    {'virginica' } 
        {'setosa'    }    {'setosa'    } 
        {'virginica' }    {'virginica' } 
        {'versicolor'}    {'versicolor'} 
        {'virginica' }    {'virginica' } 
        {'versicolor'}    {'versicolor'} 
        {'virginica' }    {'virginica' } 
        {'setosa'    }    {'setosa'    } 
        {'virginica' }    {'virginica' } 
        {'setosa'    }    {'setosa'    } 
    
    

    真のラベル Y と予測ラベル label から混同チャートを作成します。

    cm = confusionchart(Y,label);

    Figure contains an object of type ConfusionMatrixChart.

    ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子と、不良 ('b') または良好 ('g') という 351 個の二項反応が含まれています。

    load ionosphere

    サポート ベクター マシン (SVM) 分類器に学習させます。データを標準化し、'g' が陽性クラスであることを指定します。

    SVMModel = fitcsvm(X,Y,'ClassNames',{'b','g'},'Standardize',true);

    SVMModelClassificationSVM 分類器です。

    スコアから事後確率への最適な変換関数パラメーターを近似します。

    rng(1); % For reproducibility
    ScoreSVMModel = fitPosterior(SVMModel)
    ScoreSVMModel = 
      ClassificationSVM
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: {'b'  'g'}
               ScoreTransform: '@(S)sigmoid(S,-9.482430e-01,-1.217774e-01)'
              NumObservations: 351
                        Alpha: [90x1 double]
                         Bias: -0.1342
             KernelParameters: [1x1 struct]
                           Mu: [0.8917 0 0.6413 0.0444 0.6011 0.1159 0.5501 0.1194 0.5118 0.1813 0.4762 0.1550 0.4008 0.0934 0.3442 0.0711 0.3819 -0.0036 0.3594 -0.0240 0.3367 0.0083 0.3625 -0.0574 0.3961 -0.0712 0.5416 -0.0695 0.3784 ... ] (1x34 double)
                        Sigma: [0.3112 0 0.4977 0.4414 0.5199 0.4608 0.4927 0.5207 0.5071 0.4839 0.5635 0.4948 0.6222 0.4949 0.6528 0.4584 0.6180 0.4968 0.6263 0.5191 0.6098 0.5182 0.6038 0.5275 0.5785 0.5085 0.5162 0.5500 0.5759 0.5080 ... ] (1x34 double)
               BoxConstraints: [351x1 double]
              ConvergenceInfo: [1x1 struct]
              IsSupportVector: [351x1 logical]
                       Solver: 'SMO'
    
    
    

    クラスは不可分であるため、スコア変換関数 (ScoreSVMModel.ScoreTransform) はシグモイド関数です。

    学習データのスコアと陽性のクラスの事後確率を推定します。最初の 10 件の観測の結果を表示します。

    [label,scores] = resubPredict(SVMModel);
    [~,postProbs] = resubPredict(ScoreSVMModel);
    table(Y(1:10),label(1:10),scores(1:10,2),postProbs(1:10,2),'VariableNames',...
        {'TrueLabel','PredictedLabel','Score','PosteriorProbability'})
    ans=10×4 table
        TrueLabel    PredictedLabel     Score     PosteriorProbability
        _________    ______________    _______    ____________________
    
          {'g'}          {'g'}          1.4862           0.82216      
          {'b'}          {'b'}         -1.0003           0.30433      
          {'g'}          {'g'}          1.8685           0.86917      
          {'b'}          {'b'}         -2.6457          0.084171      
          {'g'}          {'g'}          1.2807           0.79186      
          {'b'}          {'b'}         -1.4616           0.22025      
          {'g'}          {'g'}          2.1674           0.89816      
          {'b'}          {'b'}         -5.7085           0.00501      
          {'g'}          {'g'}          2.4798           0.92224      
          {'b'}          {'b'}         -2.7812          0.074781      
    
    

    予測子の線形項と交互作用項の両方が格納されている分類一般化加法モデル (GAM) を使用して、学習データについて事後確率のロジット (分類スコア) を推定します。分類スコアを計算する際に交互作用項を含めるかどうかを指定します。

    ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子と、不良 ('b') または良好 ('g') という 351 個の二項反応が含まれています。

    load ionosphere

    予測子 X とクラス ラベル Y を使用して、GAM に学習させます。クラス名を指定することが推奨されます。上位 10 個の最も重要な交互作用項を含めるように指定します。

    Mdl = fitcgam(X,Y,'ClassNames',{'b','g'},'Interactions',10)
    Mdl = 
      ClassificationGAM
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: {'b'  'g'}
               ScoreTransform: 'logit'
                    Intercept: 3.2565
                 Interactions: [10x2 double]
              NumObservations: 351
    
    
    

    MdlClassificationGAM モデル オブジェクトです。

    線形項と交互作用項の両方を使用してラベルを予測してから、線形項のみを使用してラベルを予測します。交互作用項を除外するには、'IncludeInteractions',false を指定します。ScoreTransform プロパティとして 'none' を指定して、事後確率のロジットを推定します。

    Mdl.ScoreTransform = 'none';
    [labels,scores] = resubPredict(Mdl);
    [labels_nointeraction,scores_nointeraction] = resubPredict(Mdl,'IncludeInteractions',false);

    真のラベル、予測ラベルおよびスコアが格納されている table を作成します。table の最初の 8 行を表示します。

    t = table(Y,labels,scores,labels_nointeraction,scores_nointeraction, ...
        'VariableNames',{'True Labels','Predicted Labels','Scores' ...
        'Predicted Labels Without Interactions','Scores Without Interactions'});
    head(t)
        True Labels    Predicted Labels          Scores          Predicted Labels Without Interactions    Scores Without Interactions
        ___________    ________________    __________________    _____________________________________    ___________________________
    
           {'g'}            {'g'}          -51.628     51.628                    {'g'}                        -47.676     47.676     
           {'b'}            {'b'}           37.433    -37.433                    {'b'}                         36.435    -36.435     
           {'g'}            {'g'}          -62.061     62.061                    {'g'}                        -58.357     58.357     
           {'b'}            {'b'}           37.666    -37.666                    {'b'}                         36.297    -36.297     
           {'g'}            {'g'}          -47.361     47.361                    {'g'}                        -43.373     43.373     
           {'b'}            {'b'}           106.48    -106.48                    {'b'}                         102.43    -102.43     
           {'g'}            {'g'}          -62.665     62.665                    {'g'}                        -58.377     58.377     
           {'b'}            {'b'}           201.46    -201.46                    {'b'}                         197.84    -197.84     
    

    学習データ X の予測ラベルは交互作用項を含めても変化しませんが、推定スコア値は異なります。

    単純ベイズ分類器を使用して、標本内の事後確率と誤分類コストを推定します。

    fisheriris データ セットを読み込みます。150 本のアヤメについて 4 つの花弁の測定値が含まれる数値行列 X を作成します。対応するアヤメの種類が含まれる文字ベクトルの cell 配列 Y を作成します。

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

    予測子 X とクラス ラベル Y を使用して、単純ベイズ分類器に学習させます。クラス名を指定することが推奨されます。fitcnb は、各予測子が条件付き正規分布に従うと仮定しています。

    Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'});

    Mdl は学習させた ClassificationNaiveBayes 分類器です。

    学習データの事後確率と予測誤分類コストを推定します。

    [label,Posterior,MisclassCost] = resubPredict(Mdl);
    Mdl.ClassNames
    ans = 3x1 cell
        {'setosa'    }
        {'versicolor'}
        {'virginica' }
    
    

    無作為に選択した 10 個の観測値についての結果を表示します。

    idx = randsample(size(X,1),10);
    table(Y(idx),label(idx),Posterior(idx,:),MisclassCost(idx,:),'VariableNames', ...
        {'TrueLabel','PredictedLabel','PosteriorProbability','MisclassificationCost'})
    ans=10×4 table
          TrueLabel       PredictedLabel              PosteriorProbability                       MisclassificationCost         
        ______________    ______________    _________________________________________    ______________________________________
    
        {'virginica' }    {'virginica' }    6.2514e-269     1.1709e-09              1             1             1    1.1709e-09
        {'setosa'    }    {'setosa'    }              1     5.5339e-19      2.485e-25    5.5339e-19             1             1
        {'virginica' }    {'virginica' }    7.4191e-249     1.4481e-10              1             1             1    1.4481e-10
        {'versicolor'}    {'versicolor'}     3.4472e-62        0.99997      3.362e-05             1     3.362e-05       0.99997
        {'virginica' }    {'virginica' }    3.4268e-229      6.597e-09              1             1             1     6.597e-09
        {'versicolor'}    {'versicolor'}     6.0941e-77         0.9998     0.00019663             1    0.00019663        0.9998
        {'virginica' }    {'virginica' }    1.3467e-167       0.002187        0.99781             1       0.99781      0.002187
        {'setosa'    }    {'setosa'    }              1     1.5776e-15     5.7172e-24    1.5776e-15             1             1
        {'virginica' }    {'virginica' }    2.0116e-232     2.6206e-10              1             1             1    2.6206e-10
        {'setosa'    }    {'setosa'    }              1     1.8085e-17     1.9639e-24    1.8085e-17             1             1
    
    

    PosteriorMisclassCost の列の順序は、Mdl.ClassNames のクラスの順序に対応します。

    入力引数

    すべて折りたたむ

    分類機械学習モデル。完全な分類モデル オブジェクトとして指定します。サポートされるモデルは次の表に記載されています。

    モデル分類モデル オブジェクト
    一般化加法モデルClassificationGAM
    k 最近傍モデルClassificationKNN
    単純ベイズ モデルClassificationNaiveBayes
    ニューラル ネットワーク モデルClassificationNeuralNetwork
    1 クラスおよびバイナリ分類用のサポート ベクター マシンClassificationSVM

    モデルの交互作用項を含むというフラグ。true または false として指定します。この引数は、一般化加法モデル (GAM) の場合のみ有効です。つまり、この引数を指定できるのは、MdlClassificationGAM である場合だけです。

    Mdl に交互作用項が含まれる場合、既定値は true です。モデルに交互作用項が含まれない場合、値は false でなければなりません。

    データ型: logical

    出力引数

    すべて折りたたむ

    予測クラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として返されます。

    label は、Mdl に学習させた観測済みクラス ラベルと同じデータ型になり、Mdl.X の観測値の数と同じ長さになります。(string 配列は文字ベクトルの cell 配列として扱われます)。

    クラス スコア。数値行列として返されます。Score は、Mdl.X の観測値の数に等しい行と、学習データ (size(Mdl.ClassNames,1)) の個々のクラスの数に等しい列をもちます。

    予測誤分類コスト。数値行列として返されます。この出力は k 最近傍モデルと単純ベイズ モデルにのみ適用されます。つまり、resubPredictCost を返すのは、MdlClassificationKNN または ClassificationNaiveBayes である場合だけです。

    Cost は、Mdl.X の観測値の数に等しい行と、学習データ (size(Mdl.ClassNames,1)) の個々のクラスの数に等しい列をもちます。

    Cost(j,k) はクラス k (クラス Mdl.ClassNames(k) 内) で予測される Mdl.X の行 j の観測値の予測誤分類コストです。

    アルゴリズム

    resubPredict は、オブジェクト (Mdl) の対応する関数 predict に従って予測を計算します。モデル固有の説明については、次の表に示す関数 predict のリファレンス ページを参照してください。

    モデル分類モデル オブジェクト (Mdl)オブジェクト関数 predict
    一般化加法モデルClassificationGAMpredict
    k 最近傍モデルClassificationKNNpredict
    単純ベイズ モデルClassificationNaiveBayespredict
    ニューラル ネットワーク モデルClassificationNeuralNetworkpredict
    1 クラスおよびバイナリ分類用のサポート ベクター マシンClassificationSVMpredict

    拡張機能

    バージョン履歴

    R2012a で導入

    すべて展開する