ドキュメンテーション

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

fitcknn

k 最近傍分類器の近似

構文

  • mdl = fitcknn(tbl,ResponseVarName)
  • mdl = fitcknn(tbl,formula)
  • mdl = fitcknn(tbl,Y)
  • mdl = fitcknn(X,Y)
  • mdl = fitcknn(___,Name,Value)

説明

mdl = fitcknn(tbl,ResponseVarName) は、テーブル tbl の入力変数 (予測子、機能または属性とも呼ばれます) と出力 (応答) TBL.ResponseVarName に基づいて分類モデルを返します。

mdl = fitcknn(tbl,formula) は、テーブル tbl の入力変数に基づいて分類モデルを返します。formula は、mdl のあてはめに使用する tbl 内の応答と予測子の値を特定する式の文字列です。

mdl = fitcknn(tbl,Y) は、テーブル tbl の入力変数 (予測子、特徴量または属性とも呼ばれます) と出力 (応答) Y に基づいて分類モデルを返します。

mdl = fitcknn(X,Y) は、入力変数 X と出力 (応答) Y に基づいて分類モデルを返します。

mdl = fitcknn(___,Name,Value) は、前の構文のいずれかを使用し、1 つ以上の名前と値のペアの引数で指定されたオプションを追加して、モデルの近似を行います。たとえば、タイブレーク アルゴリズム、距離計量、観測値の重みを指定できます。

すべて折りたたむ

フィッシャーのアヤメのデータに対して k 最近傍分類器を構築します。ここで、予測子の最近傍の数 k は 5 です。

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

load fisheriris
X = meas;
Y = species;

X は、150 本のアヤメについて 4 つの花弁の測定値が含まれている数値行列です。Y は、対応するアヤメの種類が含まれている文字列のセル配列です。

5 最近傍分類器の学習。非カテゴリカル予測子データを標準化することをお勧めします。

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

  ClassificationKNN
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
          NumObservations: 150
                 Distance: 'euclidean'
             NumNeighbors: 5


Mdl は学習させたClassificationKNN 分類器で、一部のプロパティはコマンド ウィンドウに表示されます。

ドット表記を使用して Mdl プロパティにアクセスします。

Mdl.ClassNames
Mdl.Prior
ans = 

    'setosa'
    'versicolor'
    'virginica'


ans =

    0.3333    0.3333    0.3333

Mdl.Prior はクラス事前確率を含み、fitcknn'Prior' 名前と値のペアの引数を使用して設定できます。クラス事前確率の順序は Mdl.ClassNames のクラスの順序に対応します。既定では、事前確率はデータ内のクラスのそれぞれの相対的頻度です。

学習後に事前確率をリセットすることもできます。たとえば、事前確率を 0.5、0.2 および 0.3 にそれぞれ設定します。

Mdl.Prior = [0.5 0.2 0.3];

Mdl を、たとえば、ClassificationKNN.predictに渡して新しい測定をラベル化できます。またClassificationKNN.crossvalに渡すと分類器に交差検定を実行できます。

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

load fisheriris
X = meas;
Y = species;

X は、150 本のアヤメについて 4 つの花弁の測定値が含まれている数値行列です。Y は、対応するアヤメの種類が含まれている文字列のセル配列です。

3 最近傍分類器をミンコフスキー距離を使用して学習させます。ミンコフスキー距離を使用するには、網羅的探索を使用しなければなりません。非カテゴリカル予測子データを標準化することをお勧めします。

Mdl = fitcknn(X,Y,'NumNeighbors',3,...
    'NSMethod','exhaustive','Distance','minkowski',...
    'Standardize',1);

MdlClassificationKNN 分類器です。

Mdl のプロパティをワークスペース ウィンドウの Mdl をダブルクリックして調べることができます。変数エディターが開きます。

カイ二乗距離を使用して k 最近傍分類器を学習させます。

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

load fisheriris
X = meas;    % Predictors
Y = species; % Response

j 次元の x 点と z 点のカイ二乗距離は次のようになります。

$$\chi(x,z) = \sqrt{\displaystyle\sum^J_{j = 1}w_j\left(x_j - z_j\right)^2},$$

ここで、 $w_j$ は次元 j に関連付けられている重みです。

カイ二乗距離関数を指定します。距離関数は以下の手順を実行しなければなりません。

  • X の1 行、たとえば、x と行列 Z をとります。

  • xZ の各行と比較する。

  • 長さが $n_z$ のベクトル D を返す。ここで、 $n_z$Z の行数です。D の各要素は x に対応する観測と Z の各行に対応する観測との間の距離です。

chiSqrDist = @(x,Z,wt)sqrt((bsxfun(@minus,x,Z).^2)*wt);

この例では例示のために任意の重みを使用しています。

3 最近傍分類器を学習させます。非カテゴリカル予測子データの標準化をお勧めします。

k = 3;
w = [0.3; 0.3; 0.2; 0.2];
KNNMdl = fitcknn(X,Y,'Distance',@(x,Z)chiSqrDist(x,Z,w),...
    'NumNeighbors',k,'Standardize',1);

KNNMdlClassificationKNN 分類器です。

10 分割交差検定を使用して KNN 分類器を交差検定します。分類誤差を調べます。

rng(1); % For reproducibility
CVKNNMdl = crossval(KNNMdl);
classError = kfoldLoss(CVKNNMdl)
classError =

    0.0600

CVKNNMdlClassificationPartitionedModel 分類器です。10 分割分類誤差は 4% です。

分類器を異なる加重スキームを使用するものと比較します。

w2 = [0.2; 0.2; 0.3; 0.3];
CVKNNMdl2 = fitcknn(X,Y,'Distance',@(x,Z)chiSqrDist(x,Z,w2),...
    'NumNeighbors',k,'KFold',10,'Standardize',1);
classError2 = kfoldLoss(CVKNNMdl2)
classError2 =

    0.0400

2 番目の加重スキームから得られた分類器のほうが標本外パフォーマンスが優れています。

関連する例

入力引数

すべて折りたたむ

モデルを学習させるために使用する標本データ。テーブルとして指定します。tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、tbl に応答変数用の列を 1 つ追加できます。複数列の変数と、文字列のセル配列ではないセル配列は使用できません。

tbl に応答変数が含まれている場合に tbl 内の他の変数をすべて予測子として使用するには、ResponseVarName を使用して応答変数を指定します。

tbl に応答変数が含まれている場合に tbl 内の他の変数の一部のみを予測子として使用するには、formula を使用して式の文字列を指定します。

tbl に応答変数が含まれていない場合は、Y を使用して応答変数を指定します。応答変数の長さと tbl の行数は、同じでなければなりません。

データ型: table

応答変数の名前。tbl に含まれている変数の名前として指定します。

ResponseVarName は、文字列として指定しなければなりません。たとえば、応答変数 Ytbl.Y として格納されている場合、'Y' として指定します。そうでない場合、モデルを学習させるときに、tbl の列は Y を含めてすべて予測子として扱われます。

応答変数は、カテゴリカル配列、文字配列、論理ベクトル、数値ベクトル、または文字列のセル配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

ClassNames 名前と値のペアの引数を使用してクラスの順序を指定することをお勧めします。

モデルの学習で使用する応答変数と予測子変数。'Y~X1+X2+X3' という形式の文字列として指定します。この形式では、Y は応答変数を、X1X2 および X3 は予測子変数を表します。

モデルを学習させるための予測子として、tbl に含まれている変数の一部を指定するには、式の文字列を使用します。式の文字列を指定した場合、formula に現れない tbl の変数はモデルの学習に使用されません。

予測子の値。数値行列として指定します。X の各列が 1 つの変数を表し、各行が 1 つの観測値を表します。

データ型: single | double

分類値。数値ベクトル、カテゴリカル ベクトル、論理ベクトル、文字配列または文字列のセル配列。行数は X と同じです。Y の各行は、X の対応する行の分類を表します。

データ型: single | double | cell | logical | char

名前/値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: 'NumNeighbors',3,'NSMethod','exhaustive','Distance','minkowski' は最近傍検索法とミンコフスキー距離を使用して 3 最近傍の分類器を指定します。

すべて折りたたむ

複数のクラスで最小コストが同じである場合に predict メソッドで使用されるタイブレーク アルゴリズム。'BreakTies' と以下のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'smallest' — 同順位グループの中で最小インデックスを使用します。

  • 'nearest' — 同順位グループの中で最近傍のあるクラスを使用します。

  • 'random' — 同順位グループの中でランダムなタイブレーカーを使用します。

既定では、同順位は K 最近傍の中で同じ数の最近傍点を複数のクラスがもつときに発生します。

例: 'BreakTies','nearest'

kd ツリーの葉ノード内のデータ点の最大数。'BucketSize' と正の整数値で構成されるコンマ区切りのペアとして指定します。この引数は、NSMethod'kdtree' の場合にのみ意味があります。

例: 'BucketSize',40

データ型: single | double

カテゴリカル予測子フラグ。'CategoricalPredictors' と以下のいずれかで構成される、コンマ区切りペアとして指定します。

  • 'all' — すべての予測子がカテゴリカルです。

  • [] — カテゴリカル予測子はありません。

CategoricalPredictors'all' に設定した場合、既定の設定の Distance'hamming' です。

例: 'CategoricalPredictors','all'

学習に使用するクラスの名前。'ClassNames' とカテゴリカル配列、文字配列、論理ベクトル、数値ベクトル、または文字列のセル配列から構成されるコンマ区切りのペアとして指定します。ClassNames のデータ型は Y と同じでなければなりません。

ClassNames が文字配列の場合、各要素は配列の 1 つの "行" に対応しなければなりません。

ClassNames の使用目的は次のとおりです。

  • 学習時のクラスの順序を指定する。

  • クラスの順序に対応する入力または出力引数の次元の順序を指定する。たとえば、Cost の次元の順序や predict によって返される分類スコアの列の順序を指定するために ClassNames を使用します。

  • 学習用にクラスのサブセットを選択する。たとえば、Y に含まれているすべての異なるクラス名の集合が {'a','b','c'} であるとします。クラス 'a' および 'c' のみの観測値を使用してモデルに学習をさせるには、'ClassNames',{'a','c'} を指定します。

既定の設定は、Y に含まれているすべての異なるクラス名の集合です。

例: 'ClassNames',{'b','g'}

データ型: categorical | char | logical | single | double | cell

点の誤判別のコスト。'Cost' と以下のいずれかで構成されるコンマ区切りペアとして指定されます。

  • 正方行列。Cost(i,j) は真のクラスが i である場合に 1 つの点をクラス j に分類するためのコストです (行は真のクラス、列は予測したクラスに対応します)。Cost の対応する行および列についてクラスの順序を指定するには、名前と値のペアの引数 ClassNames をさらに指定します。

  • 2 つのフィールドをもつ S を構成します。2 つのフィールドは、Y と同じ型のグループ名を表す変数が格納されている S.ClassNames と、コスト行列が格納されている S.ClassificationCosts です。

既定値は、i~=j の場合は Cost(i,j)=1i=j の場合は Cost(i,j)=0 です。

データ型: single | double | struct

共分散行列。'Cov' と、マハラノビス距離の計算時の共分散行列を表すスカラー値の正定行列で構成される、コンマ区切りのペアとして指定します。この引数は、'Distance''mahalanobis' の場合にのみ有効です。

'Standardize' および 'Scale' または 'Cov' のいずれかを同時に指定できません。

データ型: single | double

交差検定フラグ。'CrossVal' と、'on' または 'off' で構成されるコンマ区切りのペアとして指定します。'on' の場合、fitcknn は 10 分割交差検定モデルを作成します。パラメーター 'KFold''Holdout''Leaveout' または 'CVPartition' を使用して、この交差検定の設定をオーバーライドします。交差検定対象モデルを作成するときに使用できる交差検定の名前と値のペアの引数は、一度に 1 つだけです。

または、メソッド crossval を使用して、後で mdl の交差検定を実行します。

例: 'Crossval','on'

交差検定モデルの分割。'CVPartition' と、cvpartition を使用して作成されたオブジェクトで構成されるコンマ区切りのペアとして指定します。交差検定モデルの作成には、一度に次の 4 つのオプションの 1 つのみを使用できます。'KFold''Holdout''Leaveout' または 'CVPartition' のいずれかです。

距離計量。'Distance' と、有効な距離計量文字列または関数ハンドルで構成される、コンマ区切りのペアとして指定します。許容される文字列は NSMethod パラメーターに依存します。これは、fitcknn で設定するものであり、ModelParameters のフィールドとして存在するものです。CategoricalPredictors'all' に指定した場合、既定の距離計量は 'hamming' となります。それ以外の場合は、既定の距離計量は 'euclidean' です。

NSMethod距離計量名
exhaustiveExhaustiveSearcher の任意の距離計量
kdtree'citYblock''chebychev''euclidean'、または 'minkowski'

定義については、「「距離計量」」を参照してください。

このテーブルには、ExhaustiveSearcher の有効な距離計量が含まれます。

説明
'cityblock'市街地距離。
'chebychev'チェビシェフ距離 (最大座標差)。
'correlation'1 から、一連の値として扱われる観測間の標本線形相関係数を引きます。
'cosine'1 から、ベクトルとして扱われる観測間の夾角の余弦を引きます。
'euclidean'ユークリッド距離。
'hamming'ハミング距離 (異なる座標の割合)。
'jaccard'1 から、ジャカード係数 (異なる非ゼロ座標の割合) を引いた値。
'mahalanobis'正定共分散行列 C を使用して計算される、マハラノビス距離。C の既定値は X の標本共分散行列であり、nancov(x) によって計算されます。C に別の値を指定するには、'Cov' 名前と値のペアの引数を使用します。
'minkowski'ミンコフスキー距離。既定の指数は 2 です。別の指数を指定するには、'Exponent' 名前と値のペアの引数を使用します。
'seuclidean'標準化されたユークリッド距離。X と各クエリ点の間の各座標差分がスケーリングされます。つまり、スケール値 S で除算されます。S の既定値は、XS = nanstd(X) から計算される標準偏差です。S に別の値を指定するには、Scale 名前と値のペアの引数を使用します。
'spearman'1 から、観測値間の標本スピアマンの順位相関 (値の系列として扱われる) を引いた値。
@distfun距離関数ハンドル。distfun は次の形式です
function D2 = DISTFUN(ZI,ZJ)
% calculation of  distance
...
ここで、
  • ZI は 1 行の X または Y を含む 1N 列のベクトルです。

  • ZJ は複数行の X または Y を含む M2N 列の行列です。

  • D2M21 列の距離のベクトルであり、D2(k) は観測値 ZIZJ(J,:) の間の距離です。

例: 'Distance','minkowski'

データ型: function_handle

距離重み付け関数。'DistanceWeight' と、距離重み付けを指定する関数ハンドルまたは次のいずれかの文字列で構成される、コンマ区切りのペアとして指定します。

DistanceWeight意味
'equal'重み付けなし
'inverse'重みは 1/距離です
'squaredinverse'重みは 1/距離2 です
@fcnfcn は、非負の距離の行列を受け入れる関数であり、非負の距離重み付けを含む同じサイズの行列を返します。たとえば、'squaredinverse'@(d)d.^(-2) と同じです。

例: 'DistanceWeight','inverse'

データ型: function_handle

ミンコフスキー距離指数。'Exponent' と正のスカラー値で構成されるコンマ区切りのペアとして指定します。この引数は、'Distance''minkowski' の場合にのみ有効です。

例: 'Exponent',3

データ型: single | double

ホールドアウト検定に使用されるデータの比率。'Holdout' と、[0,1] の範囲内のスカラー値から成るコンマ区切りのペアとして指定します。ホールドアウト検定は、データの指定部分をテストし、データの残りの部分を学習に使用します。

Holdout を使用する場合は、'CVPartition''KFold' または 'Leaveout' 名前と値のペアの引数のいずれも使用できません。

例: 'Holdout',0.1

データ型: single | double

同順位使用フラグ。'IncludeTies' と、距離の値が K 番目に小さい距離と等しい近傍点をすべて predict に含めるかどうかを表す論理値で構成される、コンマ区切りのペアとして指定します。IncludeTiestrue の場合、predict はすべての近傍点を含みます。それ以外の場合、predict は正確に K の近傍点を使用します。

例: 'IncludeTies',true

データ型: logical

交差検定分類器で使用する分割の数。'KFold' と 1 より大きい正の整数から構成されるコンマ区切りのペアとして指定します。たとえば、'KFold',k を指定した場合、以下が行われます。

  1. データを無作為に k 個のセットに分割する

  2. 各セットについて、そのセットを検証データとして予約し、他の k – 1 個のセットを使用してモデルを学習させる

  3. k 個のコンパクトな学習済みモデルを、交差検定対象モデルの Trained プロパティに含まれている k 行 1 列のセル ベクトルのセルに格納する。

交差検定対象モデルを作成するために使用できるオプションは、'CVPartition''Holdout''KFold''Leaveout' のいずれかのみです。

例: 'KFold',8

データ型: single | double

Leave-one-out 法の交差検定のフラグ。'Leaveout''on' または 'off' で構成されるコンマ区切りのペアとして指定します。Leave-one-out 法の交差検定を使用する場合は、'on' を指定します。

'Leaveout' を使用する場合は、'CVPartition''Holdout' または 'KFold' 名前と値のペアの引数のいずれも使用できません。

例: 'Leaveout','on'

最近傍検索法。'NSMethod''exhaustive' または 'kdtree' で構成されるコンマ区切りのペアとして指定します。

  • 'kdtree' — 最近傍を見つけるために kd ツリーを作成して使用します。'kdtree' は距離計量が次のいずれか 1 つのときに有効です。

    • 'euclidean'

    • 'cityblock'

    • 'minkowski'

    • 'chebychev'

  • 'exhaustive' — 網羅的探索アルゴリズムを使用します。最近傍を求めるために、X のすべての点から Y の各点までの距離が計算されます。

既定値は、X の列数が 10 以下で、X がスパースでなく、距離計量が 'kdtree' 型の場合は 'kdtree' で、それ以外の場合は 'exhaustive' です。

例: 'NSMethod','exhaustive'

予測時に各点を分類するために検出する X の最近傍の数。'NumNeighbors' と正の整数値で構成されるコンマ区切りのペアとして指定します。

例: 'NumNeighbors',3

データ型: single | double

予測子変数名。'PredictorNames' と、予測子変数名を含む文字列のセル配列で構成される、コンマ区切りのペアとして指定されます。予測子変数名は X と同じ順序で配列されます。

予測子をテーブル (tbl) として指定する場合、PredictorNamestbl に含まれている変数名のサブセットでなければなりません。この場合、PredictorNames に含まれている変数のみがモデルの学習に使用されます。formula を使用してモデルを指定する場合、名前と値のペア PredictorNames は使用できません。

例: 'PredictorNames',{'PedalWidth','PedalLength'}

データ型: cell

各クラスの事前確率。'Prior' と以下のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 文字列:

    • 'empirical'Y のクラスの頻度からクラス確率を決定します。観測値の重みを渡す場合は、クラス確率の計算に使用されます。

    • 'uniform' はすべてのクラス確率を均等に設定します。

  • ベクトル (クラスごとに 1 つのスカラー値)。Prior の対応する要素についてクラスの順序を指定するには、名前と値のペアの引数 ClassNames をさらに指定します。

  • 構造体 S には 2 つのフィールドがあります。

    • Y と同じ型の変数としてクラス名を含む S.ClassNames

    • 対応する確率のベクトルを含む S.ClassProbs

WeightsPrior の両方に値を設定した場合は、重みは再正規化され、それぞれのクラスの事前確率の値に加算されます。

例: 'Prior','uniform'

データ型: single | double | struct

応答変数名。'ResponseName' と、応答変数 Y の名前が格納された文字列で構成される、コンマ区切りのペアとして指定します。

入力引数 ResponseVarName または formula を使用した場合、この名前と値のペアは無効になります。

例: 'ResponseName','Response'

データ型: char

距離スケール。'Scale' と、X の列数と同じ長さの非負のスカラー値を含むベクトルで構成される、コンマ区切りのペアとして指定します。X とクエリ点の間の各座標差分は、Scale の対応する要素でスケーリングされます。この引数は、'Distance''seuclidean' の場合にのみ有効です。

'Standardize' および 'Scale' または 'Cov' のいずれかを同時に指定できません。

データ型: single | double

スコア変換関数。'ScoreTransform' と文字列または関数ハンドルで構成されるコンマ区切りペアとして指定します。

  • 値が文字列の場合、この文字列が組み込み関数に対応していなければなりません。次の表は、使用可能な組み込み関数の一覧です。

    文字列
    'doublelogit'1/(1 + e–2x)
    'invlogit'log(x / (1–x))
    'ismax'最大のスコアをもつクラスのスコアを 1 に設定し、それ以外のクラスのスコアを 0 に設定します。
    'logit'1/(1 + e–x)
    'none' または 'identity'x (変換なし)
    'sign'x < 0 のとき –1
    x = 0 のとき 0
    x > 0 のとき 1
    'symmetric'2x – 1
    'symmetriclogit'2/(1 + e–x) – 1
    'symmetricismax'最大のスコアをもつクラスのスコアを 1 に設定し、それ以外のクラスのスコアを -1 に設定します。

  • MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。

    Mdl.ScoreTransform = @function;

    function は行列 (元のスコア) を受け入れ、同じサイズの行列 (変換されたスコア) を返さなければなりません。

例: 'ScoreTransform','sign'

データ型: char | function_handle

予測子を標準化するためのフラグ。'Standardize' と、true (1) または false (0) のいずれかで構成される、コンマ区切りのペアとして指定します。

'Standardize',true を設定すると、予測子データ (X) の各列のセンタリングとスケーリングを、それぞれ列の平均値と標準偏差を使用して行います。

すべての予測子がカテゴリカルの場合、カテゴリカル予測子は標準化されずエラーがスローされます。

'Standardize',1 および 'Scale' または 'Cov' のいずれかを同時に指定できません。

予測子データの標準化をお勧めします。

例: 'Standardize',true

データ型: logical

観測値の重み。'Weights' とスカラー値のベクトルで構成されるコンマ区切りのペアとして指定します。X または tbl の各行に含まれている観測値は、Weights の対応する値で重み付けされます。Weights のサイズは、X または tbl の行数と等しくなければなりません。

入力データをテーブル tbl として指定した場合、Weights は数値ベクトルが含まれている tbl 内の変数の名前にすることができます。この場合、Weights は変数名の文字列として指定しなければなりません。たとえば、重みベクトル wtbl.w として格納されている場合、'w' として指定します。そうでない場合、モデルを学習させるときに、tbl の列は w を含めてすべて予測子として扱われます。

各クラスの重みは合計がクラスの事前確率の値になるように正規化されます。

データ型: single | double

出力引数

すべて折りたたむ

k 最近傍分類器モデル。分類器モデル オブジェクトとして返します。

'CrossVal''KFold''Holdout''Leaveout' または 'CVPartition' オプションを使用すると、クラス ClassificationPartitionedModel のモデルが生成されます。予測に分割されたツリーは使用できないため、この種類のツリーには predict メソッドがありません。

それ以外の場合、mdl のクラスは ClassificationKNN で、predict メソッドを使用して予測を行うことができます。

代替方法

fitcknn はマルチクラス KNN 分類器を学習させることができます。また、fitcecoc を使用して、マルチクラス学習問題を一連の KNN バイナリ学習器に縮小できます。

詳細

すべて折りたたむ

予測

ClassificationKNN は次と同等の手順を使用して点 Xnew の分類を予測します。

  1. Xnew に最近傍である学習セット XNumNeighbors 点を検出します。

  2. それらの最近傍点への NumNeighbors 応答値 Y を検出します。

  3. Y の値の中で事後確率が最も大きい Ynew 分類ラベルを割り当てます。

詳細は、『predict』ドキュメンテーションの事後確率を参照してください。

アルゴリズム

  • NaNs または <undefined> は観測値の欠損を示します。以下はデータセットまたは重みに欠損した観測がある場合の fitcknn の動作を説明します。

    • Y の任意の値または重みに欠損がある場合、fitcknn はこれらの値を Y から削除し、重みおよび対応する X の行をデータから削除します。重みは再度正規化され、合計は 1 になります。

    • 予測子 ('Standardize',1) または標準化されたユークリッド距離 ('Distance','seuclidean') に、スケーリングなしの標準化を指定する場合、fitcknn は平均と標準偏差を計算する前に、欠損した観測値を各予測子から削除します。つまり、nanmean および nanstd が各予測子で実行されます。

    • 共分散行列を使用せずにマハラノビス距離 ('Distance','mahalanbois') を指定する場合、fitcknn によって少なくとも 1 つの欠損値を含む X の行が削除されます。つまり、予測子行列 Xnancov が実行されます。

  • 'Standardize',1 を設定すると仮定します。

    • Prior または Weights も指定する場合、観測値の重みが考慮されます。具体的には、予測子 j の加重平均は次のようになります。

      x¯j=Bjwkxjk

      また、加重標準偏差は次のようになります。

      sj=Bjwk(xjkx¯j),

      ここで Bj は、xjk と wk が欠損していないインデックス k の集合です。

    • 'Distance','mahalanobis' または 'Distance','seuclidean' も設定する場合、Scale または Cov は指定できません。代わりに、次の処理が実行されます。

      1. 各予測子の平均と標準偏差を計算する

      2. ステップ 1 の結果を使用してデータを標準化する

      3. distance パラメーターの値をそれぞれの既定値を使用して計算する。

  • Scale および Prior または Weights のいずれかを指定する場合、観測された距離は加重標準偏差でスケーリングされます。

  • Cov および Prior または Weights のいずれかを指定する場合、加重共分散行列が距離に適用されます。つまり、次のようになります。

    Cov=Bwj(Bwj)2Bwj2Bwj(xjx¯)(xjx¯),

    ここで B は、観測値 xj に欠損値がなく wj が欠損していないインデックス j の集合です。

R2014a で導入

この情報は役に立ちましたか?