ClassificationKNN
k 最近傍分類
説明
ClassificationKNN
は、距離計量と最近傍の個数の両方を変更できる最近傍分類モデルです。ClassificationKNN
分類器には学習データが格納されるので、このモデルを使用して再代入予測を計算できます。または、このモデルと predict
メソッドを使用して新しい観測値を分類できます。
作成
ClassificationKNN
モデルの作成には fitcknn
を使用します。
プロパティ
KNN のプロパティ
BreakTies
— タイブレーク アルゴリズム
'smallest'
(既定値) | 'nearest'
| 'random'
複数のクラスで最小コストが同じである場合に predict
が使用するタイブレーク アルゴリズム。次のいずれかを指定します。
'smallest'
— 同順位グループの中で最小インデックスを使用します。'nearest'
— 同順位グループの中で最近傍のあるクラスを使用します。'random'
— 同順位グループの中でランダムなタイブレーカーを使用します。
既定では、k 最近傍の中で同じ個数の最近傍点を複数のクラスがもつ場合に、同順位が発生します。BreakTies
は、IncludeTies
が false
である場合に適用されます。
ドット表記を使用して BreakTies
を変更します。mdl.BreakTies = newBreakTies
。
Distance
— 距離計量
'cityblock'
| 'chebychev'
| 'correlation'
| 'cosine'
| 'euclidean'
| 'hamming'
| 関数ハンドル | ...
距離計量。'Distance'
と有効な距離計量名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。使用できる距離計量名は、近傍探索法の選択 (NSMethod
を参照) によって決まります。
NSMethod | 距離計量名 |
---|---|
exhaustive | ExhaustiveSearcher の任意の距離計量 |
kdtree | 'cityblock' 、'chebychev' 、'euclidean' 、または 'minkowski' |
このテーブルには、ExhaustiveSearcher
の有効な距離計量が含まれます。
距離計量名 | 説明 |
---|---|
'cityblock' | 市街地距離。 |
'chebychev' | チェビシェフ距離 (最大座標差)。 |
'correlation' | 1 から、一連の値として扱われる観測間の標本線形相関係数を引きます。 |
'cosine' | 1 から、ベクトルとして扱われる観測間の夾角の余弦を引きます。 |
'euclidean' | ユークリッド距離。 |
'hamming' | 異なる座標のパーセンテージとなるハミング距離。 |
'jaccard' | 1 から、ジャカード係数 (異なる非ゼロ座標の比率) を引いた値。 |
'mahalanobis' | 正定値共分散行列 C を使用して計算される、マハラノビス距離。C の既定値は X の標本共分散行列であり、cov(X,'omitrows') によって計算されます。C に別の値を指定するには、'Cov' 名前と値のペアの引数を使用します。 |
'minkowski' | ミンコフスキー距離。既定の指数は 2 です。別の指数を指定するには、'Exponent' 名前と値のペアの引数を使用します。 |
'seuclidean' | 標準化されたユークリッド距離。X と各クエリ点の間の各座標差分がスケーリングされます。つまり、スケール値 S で除算されます。S の既定値は X から計算される標準偏差で、S = std(X,'omitnan') です。S に別の値を指定するには、Scale 名前と値のペアの引数を使用します。 |
'spearman' | 1 から、観測値間の標本スピアマンの順位相関 (値の系列として扱われる) を引いた値。 |
@ | 距離関数ハンドル。 function D2 = distfun(ZI,ZJ) % calculation of distance ...
|
CategoricalPredictors
を 'all'
に指定した場合、既定の距離計量は 'hamming'
となります。それ以外の場合は、既定の距離計量は 'euclidean'
です。
ドット表記を使用して Distance
を変更します。mdl.Distance = newDistance
。
NSMethod
が 'kdtree'
である場合、ドット表記を使用して Distance
を変更できる距離計量は、'cityblock'
、'chebychev'
、'euclidean'
および 'minkowski'
のみです。
定義については距離計量を参照してください。
例: 'Distance','minkowski'
データ型: char
| string
| function_handle
DistanceWeight
— 距離重み付け関数
'equal'
| 'inverse'
| 'squaredinverse'
| 関数ハンドル
距離重み付け関数。次の表のいずれかの値を指定します。
値 | 説明 |
---|---|
'equal' | 重み付けなし |
'inverse' | 重みは 1/distanceです |
'squaredinverse' | 重みは 1/distance2です |
@ | fcn は、非負の距離の行列を受け入れ、非負の距離の重みが含まれている同じサイズの行列を返す関数です。たとえば、'squaredinverse' は @(d)d.^(–2) と同じです。 |
ドット表記を使用して DistanceWeight
を変更します。mdl.DistanceWeight = newDistanceWeight
。
データ型: char
| function_handle
DistParameter
— 距離計量のパラメーター
正定値共分散行列 | 正のスカラー | 正のスケール値のベクトル
距離計量のパラメーター。次の表に記載されている値のいずれかを指定します。
距離計量 | パラメーター |
---|---|
'mahalanobis' | 正定値共分散行列 C |
'minkowski' | ミンコフスキー距離指数。正のスカラー |
'seuclidean' | X の列数と同じ長さをもつ正のスケール値のベクトル |
他の距離計量の場合、DistParameter
の値は []
でなければなりません。
ドット表記を使用し、DistParameter
を変更できます。mdl.DistParameter = newDistParameter
。ただし、Distance
が 'mahalanobis'
または 'seuclidean'
である場合は、DistParameter
を変更できません。
データ型: single
| double
IncludeTies
— 同順位使用フラグ
false
(既定値) | true
k 番目に小さい距離値の近傍をすべて predict
に含めるかどうかを示す同順位使用フラグ。false
または true
を指定します。IncludeTies
が true
である場合、すべての近傍が predict
に含まれます。それ以外の場合、predict
は正確に k 個の近傍を使用します (BreakTies
プロパティを参照)。
ドット表記を使用して IncludeTies
を変更します。mdl.IncludeTies = newIncludeTies
。
データ型: logical
NSMethod
— 最近傍探索法
'kdtree'
| 'exhaustive'
この プロパティ は読み取り専用です。
最近傍探索法。'kdtree'
または 'exhaustive'
のいずれかを指定します。
'kdtree'
— Kd 木を作成および使用して最近傍を探索します。'exhaustive'
— 網羅的探索アルゴリズムを使用します。新しい点xnew
のクラスを予測するときに、X
内のすべての点からxnew
までの距離を計算して最近傍を探索します。
X
の列数が 10
以下で、X
がスパースではなく、距離計量が 'kdtree'
タイプである場合、既定値は 'kdtree'
です。それ以外の場合、既定値は 'exhaustive'
です。
NumNeighbors
— 最近傍の個数
正の整数値
予測時に各点の分類に使用する X
内の最近傍の個数。正の整数値を指定します。
ドット表記を使用して NumNeighbors
を変更します。mdl.NumNeighbors = newNumNeighbors
。
データ型: single
| double
他の分類のプロパティ
CategoricalPredictors
— カテゴリカル予測子のインデックス
[]
| 正の整数のベクトル
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
データ型: double
ClassNames
— 学習データ Y
内のクラス名
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
重複を削除した学習データ Y
内のクラス名。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames
のデータ型は Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
データ型: categorical
| char
| logical
| single
| double
| cell
Cost
— 誤分類のコスト
正方行列
点の誤分類コスト。正方行列を指定します。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
ExpandedPredictorNames
— 展開された予測子名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
展開された予測子名。文字ベクトルの cell 配列を指定します。
モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames
には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNames
は PredictorNames
と同じです。
データ型: cell
ModelParameters
— ClassificationKNN
の学習に使用したパラメーター
オブジェクト
この プロパティ は読み取り専用です。
ClassificationKNN
モデルに学習をさせるために使用したパラメーター。オブジェクトを指定します。
Mu
— 予測子の平均
数値ベクトル
この プロパティ は読み取り専用です。
予測子の平均。長さ numel(PredictorNames)
の数値ベクトルを指定します。
fitcknn
を使用してモデルに学習をさせるときに mdl
を標準化しなかった場合、Mu
は空 ([]
) になります。
データ型: single
| double
NumObservations
— 観測値の数
正の整数スカラー
この プロパティ は読み取り専用です。
ClassificationKNN
モデルに学習をさせるときに使用した観測値の個数。正の整数スカラーを指定します。NaN
値が含まれている行は当てはめに使用されないので、この数値は学習データの行数より小さくなる可能性があります。
データ型: double
PredictorNames
— 予測子変数名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
予測子変数の名前。文字ベクトルの cell 配列を指定します。変数名の順序は、学習データ X
に現れる順序と同じです。
データ型: cell
Prior
— 各クラスの事前確率
数値ベクトル
各クラスの事前確率。数値ベクトルを指定します。Prior
の要素の順序は、ClassNames
のクラスの順序に対応します。
ベクトル Prior
を追加または変更するには、次のようにドット表記を使用します。mdl.Prior = priorVector
データ型: single
| double
ResponseName
— 応答変数名
文字ベクトル
この プロパティ は読み取り専用です。
応答変数名。文字ベクトルを指定します。
データ型: char
RowsUsed
— 当てはめに使用した行
[]
| logical ベクトル
この プロパティ は読み取り専用です。
ClassificationKNN
モデルの当てはめに使用した元の学習データの行。logical ベクトルを指定します。すべての行を使用した場合、このプロパティは空になります。
データ型: logical
ScoreTransform
— スコア変換
'none'
(既定値) | 'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| 関数ハンドル | ...
スコア変換。文字ベクトルまたは関数ハンドルのいずれかを指定します。
次の表は、使用可能な文字ベクトルをまとめています。
値 | 説明 |
---|---|
"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
Sigma
— 予測子の標準偏差
数値ベクトル
この プロパティ は読み取り専用です。
予測子の標準偏差。長さ numel(PredictorNames)
の数値ベクトルを指定します。
学習時に予測子変数を標準化しなかった場合、Sigma
は空 ([]
) になります。
データ型: single
| double
W
— 観測値の重み
非負値のベクトル。
この プロパティ は読み取り専用です。
観測値の重み。Y
と同じ行数をもつ非負値のベクトルを指定します。W
の各エントリは、Y
で該当する観測の相対的な重要性を示します。
データ型: single
| double
X
— 標準化されていない予測子データ
数値行列
この プロパティ は読み取り専用です。
標準化されていない予測子データ。数値行列を指定します。X
の各列が 1 つの予測値 (変数) を表し、各行が 1 つの観測値を表します。
データ型: single
| double
Y
— クラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
クラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y
の各値は、X
の対応する行について観測されたクラス ラベルです。
Y
のデータ型は、モデルの学習に使用した Y
のデータと同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
データ型: single
| double
| logical
| char
| cell
| categorical
ハイパーパラメーター最適化のプロパティ
HyperparameterOptimizationResults
— ハイパーパラメーターの交差検証最適化
BayesianOptimization
オブジェクト | テーブル
この プロパティ は読み取り専用です。
ハイパーパラメーターの交差検証最適化。ハイパーパラメーターおよび関連する値が含まれているテーブルまたは BayesianOptimization
オブジェクトを指定します。fitcknn
を使用してモデルを作成するときに名前と値のペアの引数 'OptimizeHyperparameters'
が空以外であった場合、このプロパティは空以外になります。値は、モデル作成時の名前と値のペアの引数 'HyperparameterOptimizationOptions'
の設定に依存します。
'bayesopt'
(既定) —BayesianOptimization
クラスのオブジェクト'gridsearch'
または'randomsearch'
— 使用したハイパーパラメーター、観測された目的関数の値(交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル
オブジェクト関数
compareHoldout | 新しいデータを使用して 2 つの分類モデルの精度を比較 |
crossval | 機械学習モデルの交差検証 |
edge | k 最近傍分類器のエッジ |
gather | GPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集 |
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 最近傍分類器に学習をさせます。ここで、予測子の最近傍の個数 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
Mdl
は学習させた ClassificationKNN
分類器であり、一部のプロパティはコマンド ウィンドウに表示されます。
ドット表記を使用して Mdl
プロパティにアクセスします。
Mdl.ClassNames
ans = 3x1 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
交差検証済みモデル オブジェクトを返します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
関数
predict
はコード生成をサポートします。fitcknn
を使用して k 最近傍分類モデルに学習をさせる場合、以下の制限が適用されます。名前と値のペアの引数
'Distance'
の値をカスタム距離関数にすることはできません。名前と値のペアの引数
'DistanceWeight'
の値をカスタム距離重み関数にすることはできますが、無名関数は指定できません。名前と値のペアの引数
'ScoreTransform'
の値を無名関数にすることはできません。
詳細は、コード生成の紹介を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
次のオブジェクト関数は GPU 配列を完全にサポートしています。
次のオブジェクト関数は GPU 配列のサポートに制限があります。
オブジェクト関数は次のいずれかに該当する場合に GPU で実行されます。
モデルが GPU 配列を使用して当てはめられている。
オブジェクト関数に渡す予測子データが GPU 配列である。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2012a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)