Main Content

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

predict

判別分析分類モデルの使用によるラベルの予測

説明

label = predict(Mdl,X) は、学習済みの判別分析分類モデル Mdl に基づいて、テーブルまたは行列 X 内の予測子データに対する予測クラス ラベルのベクトルを返します。

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

  • ラベルが特定のクラスから派生する尤度を示す分類スコアの行列 (score)。判別分析の場合、スコアは事後確率です。

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

入力引数

すべて展開する

判別分析分類モデル。fitcdiscr によって返される ClassificationDiscriminant または CompactClassificationDiscriminant モデル オブジェクトとして指定します。

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

X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。X 内の予測子変数はすべて数値ベクトルでなければなりません。

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

  • テーブルの場合

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

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

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

データ型: table | double | single

出力引数

すべて展開する

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

X 内の各観測値について、予測クラス ラベルは、すべてのクラスの中で最小の予測分類コストに対応します。観測値のスコアが NaN の場合、関数はこの観測値を、学習ラベルの最大比率を占める多数クラスに分類します。

label:

  • Mdl に学習させた、観測されたクラス ラベル (Y) と同じデータ型です。(string 配列は文字ベクトルの cell 配列として扱われます)。

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

予測クラス事後確率。サイズが NK 列の数値行列として返されます。NX に含まれている観測値 (行) の数、K は (Mdl.ClassNames に含まれている) クラスの数です。score(i,j) は、X の観測値 iMdl.ClassNames のクラス j である事後確率です。

予測分類コスト。サイズが NK 列の行列として返されます。NX に含まれている観測値 (行) の数、K は (Mdl.ClassNames に含まれている) クラスの数です。cost(i,j) は、X の行 iMdl.ClassNames のクラス j として分類するコストです。

すべて展開する

フィッシャーのアヤメのデータセットを読み込みます。標本サイズを調べます。

load fisheriris
N = size(meas,1);

データを学習セットとテスト セットに分割します。データの 10% を検定用にホールドアウトします。

rng(1); % For reproducibility
cvp = cvpartition(N,'Holdout',0.1);
idxTrn = training(cvp); % Training set indices
idxTest = test(cvp);    % Test set indices

学習データをテーブルに格納します。

tblTrn = array2table(meas(idxTrn,:));
tblTrn.Y = species(idxTrn);

学習セットと既定のオプションを使用して、判別分析モデルに学習をさせます。

Mdl = fitcdiscr(tblTrn,'Y');

テスト セットについてラベルを予測します。Mdl の学習にはデータのテーブルを使用しましたが、ラベルの予測には行列を使用できます。

labels = predict(Mdl,meas(idxTest,:));

テスト セットの混同行列を作成します。

confusionchart(species(idxTest),labels)

Figure contains an object of type ConfusionMatrixChart.

Mdl は、テスト セット内の 1 つの versicolor 種のアヤメを virginica として誤分類します。

フィッシャーのアヤメのデータセットを読み込みます。花弁の長さと幅のみによる学習を考えます。

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

データセット全体を使用して、2 次判別分析モデルに学習をさせます。

Mdl = fitcdiscr(X,species,'DiscrimType','quadratic');

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

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

[~,score] = predict(Mdl,[x1Grid(:),x2Grid(:)]);
Mdl.ClassNames
ans = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

score はクラス事後確率の行列です。各列は Mdl.ClassNames 内のクラスに対応します。たとえば、観測値 j が setosa 種のアヤメである事後確率は score(j,1) です。

各観測値を versicolor 種として分類する事後確率をグリッドにプロットし、学習データをプロットします。

figure;
contourf(x1Grid,x2Grid,reshape(score(:,2),size(x1Grid,1),size(x1Grid,2)));
h = colorbar;
caxis([0 1]);
colormap jet;
hold on
gscatter(X(:,1),X(:,2),species,'mcy','.x+');
axis tight
title('Posterior Probability of versicolor'); 
hold off

Figure contains an axes object. The axes object with title Posterior Probability of versicolor contains 4 objects of type contour, line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

事後確率領域により決定境界の一部が明らかになります。

詳細

すべて展開する

拡張機能

バージョン履歴

R2011b で導入