このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
predict
判別分析分類モデルの使用によるラベルの予測
説明
入力引数
Mdl
— 判別分析分類モデル
ClassificationDiscriminant
モデル オブジェクト | CompactClassificationDiscriminant
モデル オブジェクト
判別分析分類モデル。fitcdiscr
によって返される ClassificationDiscriminant
または CompactClassificationDiscriminant
モデル オブジェクトとして指定します。
X
— 分類対象の予測子データ
数値行列 | テーブル
分類対象の予測子データ。数値行列またはテーブルを指定します。
X
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。X
内の予測子変数はすべて数値ベクトルでなければなりません。
数値行列の場合、
X
の列を構成する変数の順序は、Mdl
に学習させた予測子変数の順序と同じでなければなりません。テーブルの場合
predict
は、文字ベクトルの cell 配列ではない cell 配列と複数列の変数をサポートしません。テーブル (たとえば
Tbl
) を使用してMdl
に学習をさせた場合、X
内のすべての予測子変数は変数名およびデータ型が、Mdl
に学習させた (Mdl.PredictorNames
に格納されている) 変数と同じでなければなりません。ただし、X
の列の順序がTbl
の列の順序に対応する必要はありません。Tbl
とX
に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict
はこれらを無視します。数値行列を使用して
Mdl
に学習をさせた場合、Mdl.PredictorNames
内の予測子名とX
内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定する方法については、fitcdiscr
の名前と値のペアの引数PredictorNames
を参照してください。X
に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict
はこれらを無視します。
データ型: table
| double
| single
出力引数
label
— 予測クラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
cost
— 予測分類コスト
数値行列
予測分類コスト。サイズが N
行 K
列の行列として返されます。N
は X
に含まれている観測値 (行) の数、K
は (Mdl.ClassNames
に含まれている) クラスの数です。cost(i,j)
は、X
の行 i
を Mdl.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)
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
事後確率領域により決定境界の一部が明らかになります。
詳細
事後確率
点 x がクラス k に属する事後確率は、事前確率と多変量正規密度の積です。1 行 d 列の平均 μk および 1 行 d 列の点 x における d 行 d 列の共分散 Σk をもつ、多変量正規密度関数は次のとおりです。
ここで、 は Σk の行列式、 は逆行列です。
P(k) でクラス k の事前確率を表してみます。すると、観測 x がクラス k になる事後確率は次のとおりです。
ここで P(x) は正規化定数、P(x|k)P(k) の合計 k です。
事前確率
事前確率は次の 3 つの選択肢のいずれかです。
'uniform'
— クラスk
の事前確率は、クラスの総数に対して 1 です。'empirical'
— クラスk
の事前確率は、クラスk
の学習標本の数を学習標本の合計で除算した値です。カスタム — クラス
k
の事前確率は、prior
ベクトルのk
番目の要素です。fitcdiscr
を参照してください。
分類モデル (Mdl
) を作成した後で、ドット表記を使用して事前確率を設定できます。
Mdl.Prior = v;
ここで v
は各要素が発生する頻度を表す正の要素のベクトルです。新しい事前確率を設定する場合に、分類器に再学習させる必要はありません。
コスト
観測ごとの予測コストの行列は、コストで定義されています。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
この関数は、tall 配列を完全にサポートします。この関数でインメモリ データまたは tall データに対して学習を行ったモデルを使用できます。
詳細は、tall 配列を参照してください。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
saveLearnerForCoder
、loadLearnerForCoder
およびcodegen
(MATLAB Coder) を使用して、関数predict
のコードを生成します。saveLearnerForCoder
を使用して、学習済みモデルを保存します。loadLearnerForCoder
を使用して保存済みモデルを読み込んで関数predict
を呼び出す、エントリポイント関数を定義します。次に、codegen
を使用して、エントリポイント関数のコードを生成します。predict
用の単精度 C/C++ コードを生成するには、関数loadLearnerForCoder
を呼び出すときに名前と値の引数"DataType","single"
を指定します。次の表は、
predict
の引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。引数 注意と制限 Mdl
モデル オブジェクトの使用上の注意および制限については、
CompactClassificationDiscriminant
オブジェクトのコード生成を参照してください。X
X
は、単精度または倍精度の行列か、数値変数を含む table でなければなりません。X
の行数、または観測値の数は可変サイズにすることができますが、X
の列数は固定でなければなりません。X
を table として指定する場合、モデルは table を使用して学習させたものでなければならず、かつ予測のためのエントリポイント関数で次を行う必要があります。データを配列として受け入れる。
データ入力の引数から table を作成し、その table 内で変数名を指定する。
table を
predict
に渡す。
このテーブルのワークフローの例については、table のデータを分類するためのコードの生成を参照してください。コード生成におけるテーブルの使用の詳細については、table のコード生成 (MATLAB Coder)およびコード生成における table の制限事項 (MATLAB Coder)を参照してください。
詳細は、コード生成の紹介を参照してください。
バージョン履歴
R2011b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)