ドキュメンテーション

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

predict

単純ベイズ分類モデルの使用によるラベルの予測

説明

label = predict(Mdl,X) は、学習済みの完全またはコンパクトな単純ベイズ分類器 Mdl に基づいて、テーブルまたは行列 X 内の予測子データに対する予測クラス ラベルのベクトルを返します。

[label,Posterior,Cost] = predict(Mdl,X) は、以下も返します。

  • ラベルが特定のクラスから派生する尤度を示す事後確率の行列 (Posterior)。

  • 誤分類コストの行列 (Cost)。X 内の各観測値について、予測クラス ラベルは、すべてのクラスの中で最小の予測分類コストに対応します。

入力引数

すべて展開する

単純ベイズ分類器。それぞれ fitcnb または compact により返される ClassificationNaiveBayes モデルまたは CompactClassificationNaiveBayes モデルとして指定します。

分類対象の予測子データ。数値行列またはテーブルを指定します。

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

  • 数値行列の場合

    • X の列を構成する変数の順序は、Mdl に学習させた予測子変数の順序と同じでなければなりません。

    • テーブル (たとえば Tbl) を使用して Mdl に学習をさせた場合、Tbl に含まれている予測子変数がすべて数値変数であれば、X を数値行列にすることができます。学習時に Tbl 内の数値予測子をカテゴリカルとして扱うには、fitcnb の名前と値のペアの引数 CategoricalPredictors を使用してカテゴリカル予測子を同定します。Tbl に種類の異なる予測子変数 (数値および categorical データ型など) が混在し、X が数値行列である場合、predict でエラーがスローされます。

  • テーブルの場合

    • predict は、文字ベクトルの cell 配列ではない cell 配列と複数列の変数をサポートしません。

    • テーブル (たとえば Tbl) を使用して Mdl に学習をさせた場合、X 内のすべての予測子変数は変数名およびデータ型が、Mdl に学習させた (Mdl.PredictorNames に格納されている) 変数と同じでなければなりません。ただし、X の列の順序が Tbl の列の順序に対応する必要はありません。TblX に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict はこれらを無視します。

    • 数値行列を使用して Mdl に学習をさせた場合、Mdl.PredictorNames 内の予測子名と X 内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定する方法については、fitcnb の名前と値のペアの引数 PredictorNames を参照してください。X 内の予測子変数はすべて数値ベクトルでなければなりません。X に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict はこれらを無視します。

データ型: テーブル | double | single

メモ:

  • Mdl.DistributionNames'mn' の場合、少なくとも 1 つの NaN を含む X の行に一致する NaN が返されます。

  • Mdl.DistributionNames'mn' 以外の場合、誤分類コストと事後確率を推定するときに NaN の値は無視されます。特に、欠損する予測子値に対応する要因を除外することで、クラスの与えられた予測子の条件付き密度が計算されます。

  • 予測子の分布として 'mvmn' を指定した場合、X に含まれるレベルが学習データに示されていない場合 (つまり、その予測子に対する Mdl.CategoricalLevels にない)、指定クラスに対する予測子の条件付き密度は 0 になります。このような観測値の場合、対応する Posterior の値として NaN が返されます。Mdl.Prior に格納されたクラス事前確率を使用して、観測のクラス ラベルが決定されます。

出力引数

すべて展開する

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

label:

  • Mdl の学習に使用した、観測されたクラス ラベル (Mdl.Y) と同じデータ型です。

  • 長さは Mdl.X の行数と同じです。

  • 最低の推定誤分類コスト (Cost) を発生するクラスです。

数値行列として返されるクラス事後確率Posterior は、X の行数に等しい行と、学習データ (size(Mdl.ClassNames,1)) の個々のクラス数に等しい列を含みます。

Posterior(j,k) は、X の行 j の観測が与えられたクラス k (たとえばクラス Mdl.ClassNames(k)) の予測事後確率です。

データ型: double

数値行列として返される予測誤分類コストCost は、X の行数に等しい行と、学習データ (size(Mdl.ClassNames,1)) の個々のクラス数に等しい列が含まれます。

Cost(j,k) は、(たとえばクラス Mdl.ClassNames(k) 内で) クラス k に予測される X の行 j にある観測の予測誤分類コストです。

すべて展開する

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

load fisheriris
X = meas;    % Predictors
Y = species; % Response
rng(1);

単純ベイズ分類器を学習させ、検定標本に対し 30% のデータをホールドアウトすることを指定します。クラスの順序を指定することをお勧めします。ラベルが与えられる場合、各予測子は条件付きで正規分布すると仮定します。

CVMdl = fitcnb(X,Y,'Holdout',0.30,...
    'ClassNames',{'setosa','versicolor','virginica'});
CMdl = CVMdl.Trained{1};          % Extract trained, compact classifier
testIdx = test(CVMdl.Partition); % Extract the test indices
XTest = X(testIdx,:);
YTest = Y(testIdx);

CVMdlClassificationPartitionedModel 分類器です。この分類器には Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた CompactClassificationNaiveBayes 分類器が格納されています。

検定標本観測値にラベルを設定します。検定標本にある 10 件の観測値の無作為なセットについて結果を表示します。

idx = randsample(sum(testIdx),10);
label = predict(CMdl,XTest);
table(YTest(idx),label(idx),'VariableNames',...
    {'TrueLabel','PredictedLabel'})
ans=10×2 table
     TrueLabel      PredictedLabel
    ____________    ______________

    'setosa'         'setosa'     
    'versicolor'     'versicolor' 
    'setosa'         'setosa'     
    'virginica'      'virginica'  
    'versicolor'     'versicolor' 
    'setosa'         'setosa'     
    'virginica'      'virginica'  
    'virginica'      'virginica'  
    'setosa'         'setosa'     
    'setosa'         'setosa'     

分類の目的は、学習させたアルゴリズムによって、新しい観測値の事後確率を推定します。多くのアプリケーションは大規模なデータセットでアルゴリズムを学習させており、これにより他の場所でより有効に利用されているリソースを使用できます。この例では、単純ベイズ分類器を使用して新しい観測値の事後確率を効率的に推定する方法を説明します。

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

load fisheriris
X = meas;    % Predictors
Y = species; % Response
rng(1);

データセットを 2 つのセットに分割します。1 つは学習セット内に含め、もう 1 つは新しい未観測のデータです。新しいデータセットの 10 件の観測値を保持します。

n = size(X,1);
newInds = randsample(n,10);
inds = ~ismember(1:n,newInds);
XNew = X(newInds,:);
YNew = Y(newInds);

単純ベイズ分類器を学習させます。クラスの順序を指定することをお勧めします。ラベルが与えられる場合、各予測子は条件付きで正規分布すると仮定します。学習させた SVM 分類器のサイズを減らし、メモリの消費量を抑えます。

Mdl = fitcnb(X(inds,:),Y(inds),...
    'ClassNames',{'setosa','versicolor','virginica'});
CMdl = compact(Mdl);
whos('Mdl','CMdl')
  Name      Size            Bytes  Class                                                        Attributes

  CMdl      1x1              5346  classreg.learning.classif.CompactClassificationNaiveBayes              
  Mdl       1x1             12671  ClassificationNaiveBayes                                               

ClassificationNaiveBayes 分類器 (Mdl) にデータが格納されるため、CompactClassificationNaiveBayes 分類器 (CMdl) の方が使用する領域は少なくなります。

ラベル、事後確率および予測クラスの誤分類コストを予測します。真のラベルが使用可能なため、予測されたラベルと比較します。

CMdl.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

[labels,PostProbs,MisClassCost] = predict(CMdl,XNew);
table(YNew,labels,PostProbs,'VariableNames',...
    {'TrueLabels','PredictedLabels',...
    'PosteriorProbabilities'})
ans=10×3 table
     TrueLabels     PredictedLabels             PosteriorProbabilities          
    ____________    _______________    _________________________________________

    'setosa'         'setosa'                    1     4.1259e-16     1.1846e-23
    'versicolor'     'versicolor'       1.0373e-60        0.99999     5.8053e-06
    'virginica'      'virginica'       4.8708e-211     0.00085645        0.99914
    'setosa'         'setosa'                    1     1.4053e-19     2.2672e-26
    'versicolor'     'versicolor'       2.9308e-75        0.99987     0.00012869
    'setosa'         'setosa'                    1      2.629e-18     4.4297e-25
    'versicolor'     'versicolor'       1.4238e-67        0.99999      9.733e-06
    'versicolor'     'versicolor'      2.0667e-110        0.94237       0.057625
    'setosa'         'setosa'                    1     4.3779e-19     3.5139e-26
    'setosa'         'setosa'                    1     1.1792e-17     2.2912e-24

MisClassCost
MisClassCost = 10×3

    0.0000    1.0000    1.0000
    1.0000    0.0000    1.0000
    1.0000    0.9991    0.0009
    0.0000    1.0000    1.0000
    1.0000    0.0001    0.9999
    0.0000    1.0000    1.0000
    1.0000    0.0000    1.0000
    1.0000    0.0576    0.9424
    0.0000    1.0000    1.0000
    0.0000    1.0000    1.0000

PostProbsMisClassCost153 列の数値行列で、各行は新しい観測値に、各列はクラスに対応します。列の順序は CMdl.ClassNames の順序に対応します。

フィッシャーのアヤメのデータセットを読み込みます。花弁の長さと幅を使用して分類器を学習させます。

load fisheriris
X = meas(:,3:4);
Y = species;

単純ベイズ分類器を学習させます。クラスの順序を指定することをお勧めします。ラベルが与えられる場合、各予測子は条件付きで正規分布すると仮定します。

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

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

観測された予測子領域の値のグリッドを定義します。グリッド内の各インスタンスの事後確率を予測します。

xMax = max(X);
xMin = min(X);
h = 0.01;
[x1Grid,x2Grid] = meshgrid(xMin(1):h:xMax(1),xMin(2):h:xMax(2));

[~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);

事後確率領域と学習データをプロットします。

figure;
% Plot posterior regions 
scatter(x1Grid(:),x2Grid(:),1,PosteriorRegion);
% Adjust color bar options
h = colorbar;
h.Ticks = [0 0.5 1];
h.TickLabels = {'setosa','versicolor','virginica'};
h.YLabel.String = 'Posterior';
h.YLabel.Position = [-0.5 0.5 0];
% Adjust color map options
d = 1e-2;
cmap = zeros(201,3);
cmap(1:101,1) = 1:-d:0;
cmap(1:201,2) = [0:d:1 1-d:-d:0];
cmap(101:201,3) = 0:d:1;
colormap(cmap);
% Plot data
hold on
gh = gscatter(X(:,1),X(:,2),Y,'k','dx*');
title 'Iris Petal Measurements and Posterior Probabilities';
xlabel 'Petal length (cm)';
ylabel 'Petal width (cm)';
axis tight
legend(gh,'Location','Best')
hold off

詳細

すべて展開する

参照

[1] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.

拡張機能