メインコンテンツ

ClassificationKNN

説明

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

作成

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

プロパティ

すべて展開する

KNN のプロパティ

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

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

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

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

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

BreakTies を変更するには、ドット表記 mdl.BreakTies = newBreakTies を使用します。

R2025a 以降

グラム行列に割り当てられるキャッシュのサイズ (メガバイト単位)。"maximal" または正のスカラーとして指定します。CacheSize を使用できるのは、Distance の値が fast で始まる場合のみです。

CacheSize の値が "maximal" の場合、nm 列のサイズのグラム行列に十分なメモリを割り当てるよう予測時に試行されます。ここで、n は学習予測子データ X の行数、m はテスト予測子データの行数です。キャッシュ サイズは、グラム行列に対して十分な大きさである必要はありませんが、少なくとも n 行 1 列のベクトルを保持する十分な大きさでなければなりません。そうでない場合、ユークリッド距離の計算に通常のアルゴリズムが使用されます。

Distance の値が fast で始まる場合に、CacheSize の値が大きすぎるか "maximal" であると、利用可能なメモリを超えるグラム行列の割り当てが試行されることがあります。この場合はエラーが発行されます。

CacheSize を変更するには、ドット表記 mdl.CacheSize = 1e4 を使用します。

データ型: single | double | char | string

距離計量。有効な距離計量の名前または関数ハンドルとして指定します。使用できる距離計量の名前は、近傍探索法 (NSMethod を参照) によって異なります。

NSMethod の値距離計量名
"exhaustive"ExhaustiveSearcher の任意の距離計量
"kdtree""cityblock""chebychev""euclidean"、または "minkowski"

この table には、ExhaustiveSearcher の有効な距離計量が含まれます。

距離計量名説明
"cityblock"市街地距離。
"chebychev"チェビシェフ距離 (最大座標差)。
"correlation"1 から、一連の値として扱われる観測間の標本線形相関係数を引きます。
"cosine"1 から、ベクトルとして扱われる観測間の夾角の余弦を引きます。
"euclidean"ユークリッド距離。

"fasteuclidean" (R2025a 以降)

予測子の数が 10 個以上の場合に時間の短縮になる代替アルゴリズムを使用して計算されるユークリッド距離。このアルゴリズムは高速ですが、場合によっては精度が低下することがあります。fast から始まるアルゴリズムでは、スパース データはサポートされません。詳細については、高速ユークリッド距離アルゴリズムを参照してください。

"fastseuclidean" (R2025a 以降)

予測子の数が 10 個以上の場合に時間の短縮になる代替アルゴリズムを使用して計算される標準化されたユークリッド距離。このアルゴリズムは高速ですが、場合によっては精度が低下することがあります。fast から始まるアルゴリズムでは、スパース データはサポートされません。詳細については、高速ユークリッド距離アルゴリズムを参照してください。
"hamming"異なる座標のパーセンテージとなるハミング距離。
"jaccard"1 から、ジャカード係数 (異なる非ゼロ座標の比率) を引いた値。
"mahalanobis"正定値共分散行列 C を使用して計算されるマハラノビス距離 (DistParameter を参照)。
"minkowski"指定した指数を使用して計算されるミンコフスキー距離 (DistParameter を参照)。
"seuclidean"標準化されたユークリッド距離。X と各クエリ点の間の各座標差がスケーリングされます。つまり、スケール値 S で除算されます (DistParameter を参照)。
"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 | string | function_handle

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

説明
"equal"重み付けなし
"inverse"重みは 1/distanceです
"squaredinverse"重みは 1/distance2です
@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 内の最近傍の個数。正の整数値を指定します。

NumNeighbors を変更するには、ドット表記 mdl.NumNeighbors = newNumNeighbors を使用します。

データ型: single | double

他の分類のプロパティ

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

カテゴリカル予測子のインデックス。正の整数のベクトルとして返されます。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: double

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

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

データ型: categorical | 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 を使用してモデルに学習させるときに予測子変数を標準化していない場合、Mu は空 ([]) になります。

データ型: single | double

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

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

データ型: double

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

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

データ型: cell

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

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

データ型: single | double

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

応答変数名。文字ベクトルとして返されます。

データ型: char

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

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

データ型: logical

スコア変換。文字ベクトル、string スカラー、または関数ハンドルとして指定します。

次の表は、組み込みのスコア変換をまとめたものです。

説明
"doublelogit"1/(1 + e–2x)
"invlogit"log(x / (1 – x))
"ismax"最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する
"logit"1/(1 + ex)
"none" または "identity"x (変換なし)
"sign"x < 0 のとき –1
x = 0 のとき 0
x > 0 のとき 1
"symmetric"2x – 1
"symmetricismax"最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する
"symmetriclogit"2/(1 + ex) – 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 | categorical

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

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

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

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

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

オブジェクト関数

compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
crossval機械学習モデルの交差検証
edgek 最近傍分類器のエッジ
gatherGather properties of Statistics and Machine Learning Toolbox object from GPU
limeLocal Interpretable Model-agnostic Explanations (LIME)
lossk 最近傍分類器の損失
margink 最近傍分類器のマージン
partialDependence部分依存の計算
plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
predictk 最近傍分類モデルの使用によるラベルの予測
resubEdge再代入分類エッジ
resubLoss再代入分類損失
resubMargin再代入分類マージン
resubPredict学習済み分類器を使用した学習データの分類
shapleyシャープレイ値
testckfold交差検証の反復により 2 つの分類モデルの精度を比較

すべて折りたたむ

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

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

load fisheriris
X = meas;
Y = species;

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

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

Mdl = fitcknn(X,Y,NumNeighbors=5,Standardize=true)
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 = 3×1 cell
    {'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 で導入

すべて展開する