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)

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

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

入力引数

すべて折りたたむ

学習済みの判別分析分類器。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 における d 行 d 列の共分散 Σ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 で導入