ドキュメンテーション

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

ClassificationKNN

説明

ClassificationKNN は、距離計量と最近傍の個数の両方を変更できる最近傍分類モデルです。ClassificationKNN 分類器には学習データが格納されるので、このモデルを使用して再代入予測を計算できます。または、このモデルと predict メソッドを使用して新しい観測値を分類できます。

作成

ClassificationKNN モデルの作成には fitcknn を使用します。

プロパティ

すべて展開する

KNN のプロパティ

複数のクラスで最小コストが同じである場合に predict が使用するタイブレーク アルゴリズム。次のいずれかを指定します。

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

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

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

既定では、k 最近傍の中で同じ個数の最近傍点を複数のクラスがもつ場合に、同順位が発生します。BreakTies は、IncludeTiesfalse である場合に適用されます。

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

距離計量。文字ベクトルまたは関数ハンドルを指定します。可能な値は NSMethod プロパティに応じて異なります。

NSMethod可能な距離計量
'exhaustive'ExhaustiveSearcher の任意の距離計量
'kdtree''cityblock''chebychev''euclidean'、または 'minkowski'

次の表は、ExhaustiveSearcher の距離計量の一覧です。

説明
'cityblock'市街地距離。
'chebychev'チェビシェフ距離 (最大座標差)。
'correlation'1 から、一連の値として扱われる観測間の標本線形相関係数を引きます。
'cosine'1 から、ベクトルとして扱われる観測間の夾角の余弦を引きます。
'euclidean'ユークリッド距離。
'hamming'異なる座標の比率を示すハミング距離。
'jaccard'1 から、ジャカード係数 (異なる非ゼロ座標の比率) を引いた値。
'mahalanobis'正定共分散行列 C を使用して計算される、マハラノビス距離。C の既定値は X の標本共分散行列であり、nancov(X) によって計算されます。C について異なる値を指定するには、ドット表記を使用して mdlDistParameter プロパティを設定します。
'minkowski'ミンコフスキー距離。既定の指数は 2 です。異なる指数を指定するには、ドット表記を使用して mdlDistParameter プロパティを設定します。
'seuclidean'標準化されたユークリッド距離。X と各クエリ点の間の各座標差分がスケーリングされます。つまり、スケール値 S で除算されます。S の既定値は X から計算される標準偏差で、S = nanstd(X) です。S について異なる値を指定するには、ドット表記を使用して mdlDistParameter プロパティを設定します。
'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(k,:) の間の距離です。

詳細は、距離計量を参照してください。

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

NSMethod'kdtree' である場合、ドット表記を使用して Distance を変更できる距離計量は、'cityblock''chebychev''euclidean' および 'minkowski' のみです。

データ型: char | function_handle

距離重み付け関数。次の表のいずれかの値を指定します。

説明
'equal'重み付けなし
'inverse'重みは 1/距離です
'squaredinverse'重みは 1/距離2 です
@fcnfcn は、非負の距離の行列を受け入れ、非負の距離の重みが含まれている同じサイズの行列を返す関数です。たとえば、'squaredinverse'@(d)d.^(–2) と同じです。

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

データ型: char | function_handle

距離計量のパラメーター。次の表に記載されている値のいずれかを指定します。

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

他の距離計量の場合、DistParameter の値は [] でなければなりません。

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

データ型: single | double

k 番目に小さい距離値の近傍をすべて predict に含めるかどうかを示す同順位使用フラグ。false または true を指定します。IncludeTiestrue である場合、すべての近傍が predict に含まれます。それ以外の場合、predict は正確に k 個の近傍を使用します (BreakTies プロパティを参照)。

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

データ型: logical

このプロパティは読み取り専用です。

最近傍探索法。'kdtree' または 'exhaustive' のいずれかを指定します。

  • 'kdtree'Kd 木を作成および使用して最近傍を探索します。

  • 'exhaustive' — 網羅的探索アルゴリズムを使用します。新しい点 xnew のクラスを予測するときに、X 内のすべての点から xnew までの距離を計算して最近傍を探索します。

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

予測時に各点の分類に使用する X 内の最近傍の個数。正の整数値を指定します。

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

データ型: single | double

他の分類のプロパティ

このプロパティは読み取り専用です。

カテゴリカル予測子のインデックス。正の整数のベクトルを指定します。CategoricalPredictors には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値を格納します。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: double

このプロパティは読み取り専用です。

重複を削除した学習データ Y 内のクラス名。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames のデータ型は Y と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。

データ型: カテゴリカル | char | logical | single | double | cell

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

既定では、Cost(i,j) = 1 (i ~= j の場合) および Cost(i,j) = 0 (i = j の場合) です。つまり、正しい分類のコストは 0、誤った分類のコストは 1 です。

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

データ型: single | double

このプロパティは読み取り専用です。

展開された予測子名。文字ベクトルの cell 配列を指定します。

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

データ型: cell

このプロパティは読み取り専用です。

ClassificationKNN モデルに学習をさせるために使用したパラメーター。構造体を指定します。

データ型: 構造体

このプロパティは読み取り専用です。

予測子の平均。長さ numel(PredictorNames) の数値ベクトルを指定します。

fitcknn を使用してモデルに学習をさせるときに mdl を標準化しなかった場合、Mu は空 ([]) になります。

データ型: single | double

このプロパティは読み取り専用です。

ClassificationKNN モデルに学習をさせるときに使用した観測値の個数。正の整数スカラーを指定します。NaN 値が含まれている行はあてはめに使用されないので、この数値は学習データの行数より小さくなる可能性があります。

データ型: double

このプロパティは読み取り専用です。

予測子変数の名前。文字ベクトルの cell 配列を指定します。変数名の順序は、学習データ X に現れる順序と同じです。

データ型: cell

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

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

データ型: single | double

このプロパティは読み取り専用です。

応答変数名。文字ベクトルを指定します。

データ型: char

このプロパティは読み取り専用です。

ClassificationKNN モデルのあてはめに使用した元のデータ X の行。logical ベクトルを指定します。すべての行を使用した場合、このプロパティは空になります。

データ型: logical

スコア変換。文字ベクトルまたは関数ハンドルのいずれかを指定します。

次の表は、使用可能な文字ベクトルをまとめています。

説明
'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
'symmetricismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定します。
'symmetriclogit'2/(1 + e–x) – 1

MATLAB® 関数またはユーザー定義関数の場合は、スコア変換用の関数ハンドルを使用します。関数ハンドルは、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。

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

データ型: char | function_handle

このプロパティは読み取り専用です。

予測子の標準偏差。長さ numel(PredictorNames) の数値ベクトルを指定します。

学習時に予測子変数を標準化しなかった場合、Sigma は空 ([]) になります。

データ型: single | double

このプロパティは読み取り専用です。

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

データ型: single | double

このプロパティは読み取り専用です。

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

データ型: single | double

このプロパティは読み取り専用です。

クラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y の各値は、X の対応する行について観測されたクラス ラベルです。

Y のデータ型は、モデルの学習に使用した Y のデータと同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。

データ型: single | double | logical | char | cell | カテゴリカル

ハイパーパラメーター最適化のプロパティ

このプロパティは読み取り専用です。

ハイパーパラメーターの交差検証最適化。ハイパーパラメーターおよび関連する値が含まれているテーブルまたは BayesianOptimization オブジェクトを指定します。fitcknn を使用してモデルを作成するときに名前と値のペアの引数 'OptimizeHyperparameters' が空以外であった場合、このプロパティは空以外になります。値は、モデル作成時の名前と値のペアの引数 'HyperparameterOptimizationOptions' の設定に依存します。

  • 'bayesopt' (既定) — BayesianOptimization クラスのオブジェクト

  • 'gridsearch' または 'randomsearch' — 使用したハイパーパラメーター、観測された目的関数の値(交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル

オブジェクト関数

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

すべて折りたたむ

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

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

load fisheriris
X = meas;
Y = species;

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

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


  Properties, Methods

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

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

Mdl.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl.Prior
ans = 1×3

    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];

Mdlpredict に渡すと、新しい測定値にラベルを付けることができます。また、crossval に渡すと、分類器を交差検証できます。

ヒント

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

代替機能

knnsearch は、点の k 最近傍を探索します。rangesearch は、固定距離内の点をすべて探索します。クエリ データの分類 に示すように、これらの関数は分類に使用することができます。分類を実行する場合は、あるステップで (fitcknn を使用して) 分類器に学習をさせ、別のステップで (predict を使用して) 分類を行うことができるので、ClassificationKNN モデルを使用する方が便利です。または、fitcknn を呼び出すときにいずれかの交差検証オプションを使用して、k 最近傍分類モデルに学習をさせることもできます。この場合、fitcknnClassificationPartitionedModel 交差検証済みモデル オブジェクトを返します。

拡張機能

R2012a で導入