Main Content

predict

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

説明

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

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

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

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

すべて折りたたむ

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

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;
clim([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.

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

入力引数

すべて折りたたむ

学習済みの判別分析分類器。fitcdiscr で学習させた ClassificationDiscriminant モデル オブジェクト、または compact で作成した CompactClassificationDiscriminant モデル オブジェクトとして指定します。

分類対象の予測子データ。数値行列または table として指定します。

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

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

  • テーブルの場合

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

    • table (たとえば 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 配列として扱われます)。

  • label の長さは 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 として分類するコストです。

詳細

すべて折りたたむ

事後確率

x がクラス k に属する事後確率は、事前確率と多変量正規密度の積です。1 行 d 列の平均 μk および 1 行 d 列の点 x における dd 列の共分散 Σk をもつ、多変量正規密度関数は次のとおりです。

P(x|k)=1((2π)d|Σk|)1/2exp(12(xμk)Σk1(xμk)T),

ここで、|Σk| は Σk の行列式、Σk1 は逆行列です。

P(k) でクラス k の事前確率を表してみます。すると、観測 x がクラス k になる事後確率は次のとおりです。

P^(k|x)=P(x|k)P(k)P(x),

ここで P(x) は正規化定数、P(x|k)P(k) の合計 k です。

事前確率

事前確率は次の 3 つの選択肢のいずれかです。

  • 'uniform' — クラス k の事前確率は、クラスの総数に対して 1 です。

  • 'empirical' — クラス k の事前確率は、クラス k の学習標本の数を学習標本の合計で除算した値です。

  • カスタム — クラス k の事前確率は、prior ベクトルの k 番目の要素です。fitcdiscr を参照してください。

分類モデル (Mdl) を作成した後で、ドット表記を使用して事前確率を設定できます。

Mdl.Prior = v;

ここで v は各要素が発生する頻度を表す正の要素のベクトルです。新しい事前確率を設定する場合に、分類器に再学習させる必要はありません。

コスト

観測ごとの予測コストの行列は、コストで定義されています。

予測クラス ラベル

predict は、予測される分類コストが最小になるように分類します。

y^=argminy=1,...,Kk=1KP^(k|x)C(y|k),

ここで

  • y^ は、予測された分類です。

  • K は、クラスの数です。

  • P^(k|x) は、観測値 x のクラス k事後確率です。

  • C(y|k) は、真のクラスが k の場合に観測値を y として分類するコストです。

代替機能

Simulink ブロック

Simulink® に判別分析分類モデルの予測を統合するには、Statistics and Machine Learning Toolbox™ ライブラリにある ClassificationDiscriminant Predict ブロックを使用するか、MATLAB® Function ブロックを関数 predict と共に使用します。例については、ClassificationDiscriminant Predict ブロックの使用によるクラス ラベルの予測MATLAB Function ブロックの使用によるクラス ラベルの予測を参照してください。

使用するアプローチを判断する際は、以下を考慮してください。

  • Statistics and Machine Learning Toolbox ライブラリ ブロックを使用する場合、固定小数点ツール (Fixed-Point Designer)を使用して浮動小数点モデルを固定小数点に変換できます。

  • MATLAB Function ブロックを関数 predict と共に使用する場合は、可変サイズの配列に対するサポートを有効にしなければなりません。

  • MATLAB Function ブロックを使用する場合、予測の前処理や後処理のために、同じ MATLAB Function ブロック内で MATLAB 関数を使用することができます。

拡張機能

バージョン履歴

R2011b で導入