ドキュメンテーション

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

predict

k 最近傍分類モデルの使用によるラベルの予測

説明

label = predict(mdl,X) は、学習済みの k 最近傍分類モデル mdl に基づいて、table または行列 X 内の予測子データに対する予測クラス ラベルのベクトルを返します。予測クラス ラベルを参照してください。

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

  • ラベルが特定のクラスから派生する尤度を示す分類スコアの行列 (score)。k 最近傍法の場合、スコアは事後確率です。事後確率を参照してください。

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

すべて折りたたむ

フィッシャーのアヤメのデータについて k 最近傍分類器を作成します。ここで、k = 5 です。新しいデータでいくつかのモデル予測を評価します。

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

load fisheriris
X = meas;
Y = species;

5 つの最近傍について分類器を作成します。非カテゴリカル予測子データを標準化します。

mdl = fitcknn(X,Y,'NumNeighbors',5,'Standardize',1);

最小、平均および最大の特性をもつ花の分類を予測します。

Xnew = [min(X);mean(X);max(X)];
[label,score,cost] = predict(mdl,Xnew)
label = 3x1 cell array
    {'versicolor'}
    {'versicolor'}
    {'virginica' }

score = 3×3

    0.4000    0.6000         0
         0    1.0000         0
         0         0    1.0000

cost = 3×3

    0.6000    0.4000    1.0000
    1.0000         0    1.0000
    1.0000    1.0000         0

スコア行列とコスト行列の 2 行目および 3 行目にはバイナリ値が格納されます。つまり、花の測定値の平均値と最大値に対する 5 つの最近傍はすべて同じ分類になります。

入力引数

すべて折りたたむ

k 最近傍分類モデル。ClassificationKNN オブジェクトを指定します。

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

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

  • 数値行列の場合

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

    • table (たとえば Tbl) を使用して mdl に学習をさせる場合、Tbl に含まれている予測子変数がすべて数値変数であれば、X を数値行列にすることができます。k 最近傍分類では、同質な種類の予測子が必要です。したがって、学習時に Tbl 内のすべての数値予測子を categorical として扱うには、fitcknn を使用して学習をさせるときに 'CategoricalPredictors','all' を設定します。Tbl に種類の異なる予測子 (数値および categorical データ型など) が混在し、X が数値行列である場合、predict でエラーがスローされます。

  • テーブルの場合

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

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

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

fitcknn'Standardize',true に設定して mdl を学習させた場合、X の列が mdl.Mu の対応する平均値と mdl.Sigma の標準偏差を使用して標準化されます。

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

出力引数

すべて折りたたむ

X 内の観測値 (行) の予測クラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として返されます。label の長さは X の行数に等しくなります。このラベルは最小の予測コストをもつクラスです。予測クラス ラベルを参照してください。

予測クラス スコアまたは事後確率。サイズが n 行 K 列の数値行列として返されます。n は X に含まれている観測値 (行) の数、K は (mdl.ClassNames に含まれている) クラスの数です。score(i,j) は、X の観測値 imdl.ClassNames のクラス j である事後確率です。事後確率を参照してください。

データ型: single | double

予測分類コスト。サイズが n 行 K 列の数値行列として返されます。n は X に含まれている観測値 (行) の個数、K は (mdl.ClassNames に含まれている) クラスの個数です。cost(i,j) は、X の行 imdl.ClassNames のクラス j として分類するコストです。予測コストを参照してください。

データ型: single | double

アルゴリズム

すべて折りたたむ

予測クラス ラベル

predict は、予測される分類コストを最小化することにより分類します。

y^=argminy=1,...,Kj=1KP^(j|x)C(y|j),

ここで、

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

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

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

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

事後確率

ベクトル (単一のクエリ点) xnew とモデル mdl があるとします。

  • k は、予測に使用する最近傍の個数 mdl.NumNeighbors です。

  • nbd(mdl,xnew) は、mdl.X 内の xnew に対する k 個の最近傍を指定します。

  • Y(nbd) は、nbd(mdl,xnew) における点の分類、つまり mdl.Y(nbd) を指定します。

  • W(nbd) は、nbd(mdl,xnew) における点の重みを指定します。

  • prior は、mdl.Y 内のクラスの事前確率を指定します。

事前確率のベクトルがモデルに含まれている場合、観測値の重み W は合計が事前確率と等しくなるようにクラスによって正規化されます。xnew から mdl.X までの距離に重みが依存する可能性があるので、このプロセスには点 xnew についての計算が含まれる場合があります。

事後確率 p(j|xnew) は

p(j|xnew)=inbdW(i)1Y(X(i))=jinbdW(i).

ここで 1Y(X(i))=j は、mdl.Y(i) = j である場合は 1、それ以外の場合は 0 です。

真の誤分類コスト

KNN 分類には、クラスごとの真の誤分類コストおよび観測値ごとの予測誤分類コストという 2 つのコストが関連付けられています。

fitcknn を実行するときに名前と値のペアの引数 'Cost' を使用することにより、クラスごとの真の誤分類コストを設定できます。値 Cost(i,j) は、真のクラスが i である観測値をクラス j に分類するコストです。既定では、Cost(i,j) = 1 (i ~= j の場合) および Cost(i,j) = 0 (i = j の場合) です。つまり、正しい分類のコストは 0、誤った分類のコストは 1 です。

予測コスト

KNN 分類には、クラスごとの真の誤分類コストおよび観測値ごとの予測誤分類コストという 2 つのコストが関連付けられています。predict の 3 番目の出力は、観測ごとの予測誤分類コストです。

学習済みの分類器 mdl を使用して Nobs 個の観測値を分類するとします。また、K 個のクラスがあるとします。1 行に 1 観測ずつ、観測値を行列 Xnew に置きます。次のコマンド

[label,score,cost] = predict(mdl,Xnew)

これは、他の出力に加えて、NobsK 列の行列 cost を返します。cost 行列の各行には、観測をそれぞれのクラス K に分類する予測 (平均) コストが含まれます。cost(n,j) は次のとおりです。

i=1KP^(i|Xnew(n))C(j|i),

ここで、

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

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

  • C(j|i) は、真のクラスが i である観測値を j に分類する真の誤分類コストです。

拡張機能

R2012a で導入