ClassificationKNN
k 最近傍分類
説明
ClassificationKNN
は、距離計量と最近傍の個数の両方を変更できる最近傍分類モデルです。ClassificationKNN
分類器には学習データが格納されるので、このモデルを使用して再代入予測を計算できます。または、このモデルと predict
オブジェクト関数を使用して新しい観測値を分類できます。
作成
ClassificationKNN
モデルの作成には fitcknn
を使用します。
プロパティ
KNN のプロパティ
複数のクラスで最小コストが同じである場合に predict
が使用するタイブレーク アルゴリズム。次のいずれかを指定します。
"smallest"
— 同順位グループの中で最小インデックスを使用します。"nearest"
— 同順位グループの中で最近傍のあるクラスを使用します。"random"
— 同順位グループの中でランダムなタイブレーカーを使用します。
既定では、k 最近傍の中で同じ個数の最近傍点を複数のクラスがもつ場合に、同順位が発生します。BreakTies
は、IncludeTies
が false
である場合に適用されます。
BreakTies
を変更するには、ドット表記 mdl.BreakTies = newBreakTies
を使用します。
R2025a 以降
グラム行列に割り当てられるキャッシュのサイズ (メガバイト単位)。"maximal"
または正のスカラーとして指定します。CacheSize
を使用できるのは、Distance
の値が fast
で始まる場合のみです。
CacheSize
の値が "maximal"
の場合、n
行 m
列のサイズのグラム行列に十分なメモリを割り当てるよう予測時に試行されます。ここで、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" | ユークリッド距離。 |
| 予測子の数が 10 個以上の場合に時間の短縮になる代替アルゴリズムを使用して計算されるユークリッド距離。このアルゴリズムは高速ですが、場合によっては精度が低下することがあります。fast から始まるアルゴリズムでは、スパース データはサポートされません。詳細については、高速ユークリッド距離アルゴリズムを参照してください。 |
| 予測子の数が 10 個以上の場合に時間の短縮になる代替アルゴリズムを使用して計算される標準化されたユークリッド距離。このアルゴリズムは高速ですが、場合によっては精度が低下することがあります。fast から始まるアルゴリズムでは、スパース データはサポートされません。詳細については、高速ユークリッド距離アルゴリズムを参照してください。 |
"hamming" | 異なる座標のパーセンテージとなるハミング距離。 |
"jaccard" | 1 から、ジャカード係数 (異なる非ゼロ座標の比率) を引いた値。 |
"mahalanobis" | 正定値共分散行列 C を使用して計算されるマハラノビス距離 (DistParameter を参照)。 |
"minkowski" | 指定した指数を使用して計算されるミンコフスキー距離 (DistParameter を参照)。 |
"seuclidean" | 標準化されたユークリッド距離。X と各クエリ点の間の各座標差がスケーリングされます。つまり、スケール値 S で除算されます (DistParameter を参照)。 |
"spearman" | 1 から、観測値間の標本スピアマンの順位相関 (値の系列として扱われる) を引いた値。 |
@ | 距離関数ハンドル。 function D2 = distfun(ZI,ZJ) % calculation of distance ...
|
Distance
を変更するには、ドット表記 mdl.Distance = newDistance
を使用します。
NSMethod
が "kdtree"
である場合、ドット表記を使用して Distance
を変更できる距離計量は、"cityblock"
、"chebychev"
、"euclidean"
および "minkowski"
のみです。
詳細は、距離計量を参照してください。
データ型: char
| string
| function_handle
距離重み付け関数。次の表のいずれかの値を指定します。
値 | 説明 |
---|---|
"equal" | 重み付けなし |
"inverse" | 重みは 1/distanceです |
"squaredinverse" | 重みは 1/distance2です |
@ | fcn は、非負の距離の行列を受け入れ、非負の距離の重みが含まれている同じサイズの行列を返す関数です。たとえば、"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
を指定します。IncludeTies
が true
である場合、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
には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNames
は PredictorNames
と同じです。
データ型: 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 + 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
| categorical
ハイパーパラメーター最適化のプロパティ
この プロパティ は読み取り専用です。
ハイパーパラメーターの交差検証最適化。BayesianOptimization
オブジェクト、またはハイパーパラメーターと関連する値の table として返されます。fitcknn
を使用してモデルを作成するときに名前と値の引数 OptimizeHyperparameters
が空以外であった場合、このプロパティは空以外になります。値は、モデル作成時の名前と値の引数 HyperparameterOptimizationOptions
の設定に依存します。
"bayesopt"
(既定) —BayesianOptimization
クラスのオブジェクト"gridsearch"
または"randomsearch"
— 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納された table
オブジェクト関数
compareHoldout | 新しいデータを使用して 2 つの分類モデルの精度を比較 |
crossval | 機械学習モデルの交差検証 |
edge | k 最近傍分類器のエッジ |
gather | Gather properties of Statistics and Machine Learning Toolbox object from GPU |
lime | Local Interpretable Model-agnostic Explanations (LIME) |
loss | k 最近傍分類器の損失 |
margin | k 最近傍分類器のマージン |
partialDependence | 部分依存の計算 |
plotPartialDependence | 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成 |
predict | k 最近傍分類モデルの使用によるラベルの予測 |
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];
Mdl
を predict
に渡すと、新しい測定値にラベルを付けることができます。また、crossval
に渡すと、分類器を交差検証できます。
ヒント
関数
compact
は、学習データのプロパティと、新しい観測値のラベルの予測には不要な他のプロパティを削除することにより、ほとんどの分類モデルのサイズを削減します。k 最近棒分類モデルではラベルの予測にすべての学習データが必要なので、ClassificationKNN
モデルのサイズを小さくすることはできません。
代替機能
knnsearch
は、点の k 最近傍を探索します。rangesearch
は、固定距離内の点をすべて探索します。クエリ データの分類 に示すように、これらの関数は分類に使用することができます。分類を実行する場合は、あるステップで (fitcknn
を使用して) 分類器に学習をさせ、別のステップで (predict
を使用して) 分類を行うことができるので、ClassificationKNN
モデルを使用する方が便利です。または、fitcknn
を呼び出すときにいずれかの交差検証オプションを使用して、k 最近傍分類モデルに学習をさせることもできます。この場合、fitcknn
は ClassificationPartitionedModel
交差検証済みモデル オブジェクトを返します。
拡張機能
使用上の注意および制限:
関数
predict
はコード生成をサポートします。fitcknn
を使用して k 最近傍分類モデルに学習をさせる場合、以下の制限が適用されます。名前と値の引数
Distance
の値を"fasteuclidean"
、"fastseuclidean"
、またはカスタム距離関数にすることはできません。名前と値の引数
DistanceWeight
の値をカスタム距離重み関数にすることはできますが、無名関数にすることはできません。名前と値の引数
ScoreTransform
の値を無名関数にすることはできません。
詳細は、コード生成の紹介を参照してください。
使用上の注意および制限:
次のオブジェクト関数は GPU 配列を完全にサポートしています。
次のオブジェクト関数は GPU 配列のサポートに制限があります。
次の少なくとも 1 つに該当する場合、オブジェクト関数は GPU で実行されます。
モデルが GPU 配列を使用して当てはめられている。
オブジェクト関数に渡す予測子データが GPU 配列である。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2012a で導入MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)