ドキュメンテーション

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

ClassificationKNN クラス

説明

最近傍分類オブジェクト。ここで距離計量 ("最近傍") と近傍の数の両方とも変更できます。このオブジェクトはメソッド predict を使用して新しい観測を分類します。オブジェクトには、学習に使用したデータが格納されているため、再代入予測を計算できます。

構築

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 つ以上の名前と値のペアの引数で指定されたオプションを追加して、モデルの近似を行います。たとえば、タイブレーク アルゴリズム、距離計量、観測値の重みを指定できます。

入力引数

すべて展開する

モデルを学習させるために使用する標本データ。テーブルとして指定します。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

プロパティ

BreakTies

メソッド predict を指定する文字列は、複数のクラスが同じ最小コストである場合に、同順位を解除するために使用します。既定では、同順位は K 最近傍の中で同じ数の最近傍点を複数のクラスがもつときに発生します。

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

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

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

'BreakTies''IncludeTies'false である場合に適用されます。

ドット表記を使用して BreakTies を変更します。mdl.BreakTies = newBreakTies

CategoricalPredictors

どの予測子がカテゴリカルであるかを指定します。

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

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

ClassNames

重複が削除された学習データ Y の要素のリスト。ClassNames には、数値ベクトル、カテゴリカル変数のベクトル、論理ベクトル、文字配列、文字列のセル配列のいずれかを指定できます。ClassNames のデータ型は、引数 Y のデータ型と同じです。

ClassNames を変更するには、次のようにドット表記を使用します。mdl.ClassNames = newClassNames

Cost

正方行列。Cost(i,j) は真のクラスが i である場合に 1 つの点をクラス j に分類するためのコストです (行は真のクラス、列は予測したクラスに対応します)。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。Cost の行および列の数は、応答に含まれている一意なクラスの数です。

ドット表記を使用して Cost 行列を変更します。obj.Cost = costMatrix

Distance

距離計量を指定する文字列または関数ハンドル。許容される文字列は NSMethod パラメーターに依存します。これは、fitcknn で設定するものであり、ModelParameters のフィールドとして存在するものです。

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 です。別の指数を指定するには、'P' 名前と値のペアを使用します。
'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 を変更します。mdl.Distance = newDistance

NSMethodkdtree の場合、ドット表記を使用して、'cityblock''chebychev', 'euclidean' または 'minkowski' タイプの Distance のみを変更できます。

DistanceWeight

距離重み付け関数を指定する文字列または関数ハンドル。

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

ドット表記を使用して DistanceWeight を変更します。mdl.DistanceWeight = newDistanceWeight

DistParameter

距離計量の追加パラメーター。

距離計量パラメーター
'mahalanobis'正定共分散行列 C
'minkowski'ミンコフスキー距離指数。正のスカラー。
'seuclidean'X の列数と同じ長さをもつ、正のスカラー値のベクトル。

テーブル内あるもの以外の距離計量の値に対して DistParameter[] でなければなりません。

ドット表記を使用し、DistParameter を変更できます。mdl.DistParameter = newDistParameter。ただし、Distancemahalanobis または seuclidean である場合は、DistParameter を変更できません。

ExpandedPredictorNames

展開された予測子の名前。文字列のセル配列として格納されます。

モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames には展開された変数を表す名前が格納されます。そうでない場合、ExpandedPredictorNamesPredictorNames と同じです。

IncludeTies

predict に、距離値が K 番目に短い距離に等しいすべての近傍点が含まれるかどうかを示す論理値。IncludeTiestrue の場合、predict はすべての近傍点を含みます。それ以外の場合、predict は正確に K の近傍点を使用します ('BreakTies' を参照)。

ドット表記を使用して IncludeTies を変更します。mdl.IncludeTies = newIncludeTies

ModelParameters

mdl の学習に使用されるパラメーター。

Mu

長さが numel(PredictorNames) である、予測子平均の数値ベクトル。

mdl を、fitcknn を使用して学習させた際に標準化していない場合、Mu は空 ([]) です。

NumNeighbors

予測時に各点を分類するために X の最近傍点の数を指定する、正の整数。ドット表記を使用して NumNeighbors を変更します。mdl.NumNeighbors = newNumNeighbors

NumObservations

mdl の学習に使用される観測の数。NaN 値を含むデータ行は近似には含まれないため、この数は学習データの行数より小さい値になります。

PredictorNames

学習データ X に現れる順序で配列される、予測子変数の名前のセル配列。ドット表記を使って PredictorNames を変更します。mdl.PredictorNames = newPredictorNames

Prior

各クラスの事前確率の数値ベクトル。Prior の要素の順序は、ClassNames のクラスの順序に対応します。

ベクトル Prior を追加または変更するには、次のようにドット表記を使用します。obj.Prior = priorVector

ResponseName

応答変数 Y を記述する文字列。ドット表記を使用して ResponseName を変更します。mdl.ResponseName = newResponseName

Sigma

長さが numel(PredictorNames) である、予測子の標準偏差の数値ベクトル。

mdl を、fitcknn を使用して学習させた際に標準化していない場合、Sigma は空 ([]) です。

W

Y と同じ行数の、非負の重みの数値ベクトル。W の各エントリは、Y で該当する観測の相対的な重要性を示します。

X

標準化されていない予測子の値の数値行列。X の各列が 1 つの予測値 (変数) を表し、各行が 1 つの観測値を表します。

Y

数値ベクトル、カテゴリカル変数のベクトル、論理ベクトル、文字配列または文字列のセル配列。行数は X と同じです。

Y は渡された Y データと同じ型です。

メソッド

compareHoldout新しいデータを使用して 2 つのモデルの精度を比較
crossval交差検定済みの k 最近傍分類器
edgek 最近傍分類器のエッジ
lossk 最近傍分類器の損失
margink 最近傍分類器のマージン
predictk 最近傍分類の予測
resubEdge再代入による k 最近傍分類器のエッジ
resubLoss再代入による k 最近傍分類器の損失
resubMargin再代入による k 最近傍分類器のマージン
resubPredictk 最近傍分類器の再代入応答の予測

定義

予測

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

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

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

  3. Y の値の中で最小の予測誤判別コストをもつ分類ラベル Ynew を割り当てます。

詳細は、『predict』ドキュメンテーションの事後確率および予測コストを参照してください。

コピーのセマンティクス

値。コピー操作に対する値クラスの影響については、MATLAB® のドキュメンテーションの「オブジェクトのコピー」を参照してください。

すべて展開する

フィッシャーのアヤメのデータに対して 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に渡すと分類器に交差検定を実行できます。

関連する例

代替方法

knnsearch は、k 最近傍の点を検索します。rangesearch は、固定距離内のすべての点を検索します。クエリ データの分類 に示すように、これらの関数は分類に使用することができます。分類を実行する場合は、1 つの手順で分類を構成して残りの手順で分類ができるため、ClassificationKNN を使用するほうが便利です。また、ClassificationKNN には交差検定のオプションもあります。

ヒント

関数 compact は、学習データのプロパティと、その他の、新しい観測値のラベル予測には不要なプロパティを削除することにより、ほとんどの分類モデルのサイズを削減します。kNN 分類モデルではラベルを予測するためにすべての学習データが必要なので、ClassificationKNN モデルのサイズを小さくすることはできません。

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