ドキュメンテーション

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

fitcknn

k 最近傍分類器の近似

構文

Mdl = fitcknn(Tbl,ResponseVarName)
Mdl = fitcknn(Tbl,formula)
Mdl = fitcknn(Tbl,Y)
Mdl = fitcknn(X,Y)
Mdl = fitcknn(___,Name,Value)

説明

Mdl = fitcknn(Tbl,ResponseVarName) は、テーブル Tbl 内の入力変数 (予測子、特徴量または属性とも呼ばれます) 、および出力 (応答) Tbl.ResponseVarName に基づいて k 最近傍分類モデルを返します。

Mdl = fitcknn(Tbl,formula) は、テーブル Tbl 内の入力変数に基づいて k 最近傍分類モデルを返します。formula は応答および Tbl 内の予測子変数サブセットの説明モデルです。

Mdl = fitcknn(Tbl,Y) は、テーブル Tbl 内の予測子変数、および応答配列 Y に基づいて k 最近傍分類モデルを返します。

Mdl = fitcknn(X,Y) は、予測子データ X と応答 Y に基づいて k 最近傍分類モデルを返します。

Mdl = fitcknn(___,Name,Value) は、前の構文のいずれかを使用し、1 つ以上の名前と値のペアの引数で指定されたオプションを追加して、モデルの近似を行います。たとえば、タイブレーク アルゴリズム、距離計量、観測値の重みを指定できます。

すべて折りたたむ

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

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

load fisheriris
X = meas;
Y = species;

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

3 最近傍分類器をミンコフスキー距離を使用して学習させます。ミンコフスキー距離を使用するには、網羅的探索を使用しなければなりません。非カテゴリカル予測子データを標準化することをお勧めします。

Mdl = fitcknn(X,Y,'NumNeighbors',3,...
    'NSMethod','exhaustive','Distance','minkowski',...
    'Standardize',1);

MdlClassificationKNN 分類器です。

Mdl のプロパティをワークスペース ウィンドウの Mdl をダブルクリックして調べることができます。変数エディターが開きます。

カイ二乗距離を使用して k 最近傍分類器に学習をさせます。

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

load fisheriris
X = meas;    % Predictors
Y = species; % Response

j 次元の x 点と z 点のカイ二乗距離は次のようになります。

ここで、 は次元 j に関連付けられている重みです。

カイ二乗距離関数を指定します。距離関数は以下の手順を実行しなければなりません。

  • X の1 行、たとえば、x と行列 Z をとります。

  • xZ の各行と比較する。

  • 長さ のベクトル D を返す。Z の行数です。D の各要素は x に対応する観測と Z の各行に対応する観測との間の距離です。

chiSqrDist = @(x,Z,wt)sqrt((bsxfun(@minus,x,Z).^2)*wt);

この例では例示のために任意の重みを使用します。

3 最近傍分類器を学習させます。非カテゴリカル予測子データを標準化することをお勧めします。

k = 3;
w = [0.3; 0.3; 0.2; 0.2];
KNNMdl = fitcknn(X,Y,'Distance',@(x,Z)chiSqrDist(x,Z,w),...
    'NumNeighbors',k,'Standardize',1);

KNNMdlClassificationKNN分類器です。

10 分割交差検証を使用して KNN 分類器を交差検証します。分類誤差を調べます。

rng(1); % For reproducibility
CVKNNMdl = crossval(KNNMdl);
classError = kfoldLoss(CVKNNMdl)
classError = 0.0600

CVKNNMdlClassificationPartitionedModel分類器です。10 分割分類誤差は 4% です。

分類器を異なる加重スキームを使用するものと比較します。

w2 = [0.2; 0.2; 0.3; 0.3];
CVKNNMdl2 = fitcknn(X,Y,'Distance',@(x,Z)chiSqrDist(x,Z,w2),...
    'NumNeighbors',k,'KFold',10,'Standardize',1);
classError2 = kfoldLoss(CVKNNMdl2)
classError2 = 0.0400

2 番目の加重スキームから得られた分類器のほうが標本外パフォーマンスが優れています。

この例では、fitcknn を使用して自動的にハイパーパラメーターを最適化する方法を示します。この例では、フィッシャーのアヤメのデータを使用します。

データを読み込みます。

load fisheriris
X = meas;
Y = species;

自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めます。

再現性を得るために、乱数シードを設定し、'expected-improvement-plus' の獲得関数を使用します。

rng(1)
Mdl = fitcknn(X,Y,'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',...
    struct('AcquisitionFunctionName','expected-improvement-plus'))

|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | NumNeighbors |     Distance |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|    1 | Best   |    0.026667 |      1.0158 |    0.026667 |    0.026667 |           30 |       cosine |
|    2 | Accept |        0.04 |     0.39927 |    0.026667 |    0.027197 |            2 |    chebychev |
|    3 | Accept |     0.19333 |     0.18765 |    0.026667 |    0.030324 |            1 |      hamming |
|    4 | Accept |     0.33333 |     0.36547 |    0.026667 |    0.033313 |           31 |     spearman |
|    5 | Best   |        0.02 |     0.25285 |        0.02 |    0.020648 |            6 |       cosine |
|    6 | Accept |    0.073333 |     0.20157 |        0.02 |    0.023082 |            1 |  correlation |
|    7 | Accept |        0.06 |     0.15599 |        0.02 |    0.020875 |            2 |    cityblock |
|    8 | Accept |        0.04 |      0.1428 |        0.02 |    0.020622 |            1 |    euclidean |
|    9 | Accept |        0.24 |      1.0926 |        0.02 |    0.020562 |           74 |  mahalanobis |
|   10 | Accept |        0.04 |     0.24127 |        0.02 |    0.020649 |            1 |    minkowski |
|   11 | Accept |    0.053333 |     0.34142 |        0.02 |    0.020722 |            1 |   seuclidean |
|   12 | Accept |     0.19333 |     0.30933 |        0.02 |    0.020701 |            1 |      jaccard |
|   13 | Accept |        0.04 |     0.15495 |        0.02 |    0.029203 |            1 |       cosine |
|   14 | Accept |        0.04 |     0.48505 |        0.02 |    0.031888 |           75 |       cosine |
|   15 | Accept |        0.04 |     0.23479 |        0.02 |    0.020076 |            1 |       cosine |
|   16 | Accept |    0.093333 |     0.41927 |        0.02 |    0.020073 |           75 |    euclidean |
|   17 | Accept |    0.093333 |     0.43578 |        0.02 |     0.02007 |           75 |    minkowski |
|   18 | Accept |         0.1 |     0.25479 |        0.02 |    0.020061 |           75 |    chebychev |
|   19 | Accept |     0.15333 |     0.37246 |        0.02 |    0.020044 |           75 |   seuclidean |
|   20 | Accept |         0.1 |     0.19676 |        0.02 |    0.020044 |           75 |    cityblock |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | NumNeighbors |     Distance |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|   21 | Accept |    0.033333 |     0.25546 |        0.02 |    0.020046 |           75 |  correlation |
|   22 | Accept |    0.033333 |     0.24401 |        0.02 |     0.02656 |            9 |       cosine |
|   23 | Accept |    0.033333 |     0.13001 |        0.02 |     0.02854 |            9 |       cosine |
|   24 | Accept |        0.02 |     0.27867 |        0.02 |    0.028607 |            1 |    chebychev |
|   25 | Accept |        0.02 |      0.1302 |        0.02 |    0.022264 |            1 |    chebychev |
|   26 | Accept |        0.02 |     0.14608 |        0.02 |    0.021439 |            1 |    chebychev |
|   27 | Accept |        0.02 |     0.33121 |        0.02 |    0.020999 |            1 |    chebychev |
|   28 | Accept |     0.66667 |     0.15383 |        0.02 |    0.020008 |           75 |      hamming |
|   29 | Accept |        0.04 |     0.17944 |        0.02 |    0.020008 |           12 |  correlation |
|   30 | Best   |    0.013333 |     0.23457 |    0.013333 |    0.013351 |            6 |    euclidean |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 102.5273 seconds.
Total objective function evaluation time: 9.3433

Best observed feasible point:
    NumNeighbors    Distance 
    ____________    _________

         6          euclidean

Observed objective function value = 0.013333
Estimated objective function value = 0.013351
Function evaluation time = 0.23457

Best estimated feasible point (according to models):
    NumNeighbors    Distance 
    ____________    _________

         6          euclidean

Estimated objective function value = 0.013351
Estimated function evaluation time = 0.26113
Mdl = 
  ClassificationKNN
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'setosa'  'versicolor'  'virginica'}
                       ScoreTransform: 'none'
                      NumObservations: 150
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                             Distance: 'euclidean'
                         NumNeighbors: 6


  Properties, Methods

入力引数

すべて折りたたむ

モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

Tbl に応答変数が含まれている場合に Tbl 内の他の変数をすべて予測子として使用するには、ResponseVarName を使用して応答変数を指定します。

Tbl に応答変数が含まれている場合に Tbl 内の他の変数の一部のみを予測子として使用するには、formula を使用して式を指定します。

Tbl に応答変数が含まれていない場合は、Y を使用して応答変数を指定します。応答変数の長さと Tbl の行数は等しくなければなりません。

データ型: テーブル

応答変数の名前。Tbl 内の変数の名前で指定します。

ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 YTbl.Y として格納されている場合、'Y' として指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は Y を含めてすべて予測子として扱われます。

応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。

名前と値のペアの引数 ClassNames を使用してクラスの順序を指定することをお勧めします。

データ型: char | string

予測子変数のサブセットおよび応答の説明モデル。'Y~X1+X2+X3' という形式の文字ベクトルまたは string スカラーを指定します。この式では、Y は応答変数を、X1X2 および X3 は予測子変数を表します。変数は、Tbl (Tbl.Properties.VariableNames) に含まれている変数の名前でなければなりません。

モデルに学習をさせるための予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。

データ型: char | string

クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y の各行は、X の対応する行の分類を表します。

Y 内の NaN'' (空の文字ベクトル)、"" (空の string)、<missing>、および <undefined> 値は欠損値と見なされます。このため、欠損応答がある観測値は学習に使用されません。

データ型: categorical | char | string | logical | single | double | cell

予測子データ。数値行列を指定します。

各行は 1 つの観測値 (インスタンスや例とも呼ばれます) に、各列は 1 つの予測子変数 (特徴量とも呼ばれます) に対応します。

Y の長さと X の行数は等しくなければなりません。

予測子の名前を X に表示される順序で指定するには、PredictorNames 名前と値のペアの引数を使用します。

データ型: double | single

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で閉じなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: 'NumNeighbors',3,'NSMethod','exhaustive','Distance','minkowski' は最近傍検索法とミンコフスキー距離を使用して 3 最近傍の分類器を指定します。

メモ

交差検証の名前と値のペアの引数を名前と値のペアの引数 'OptimizeHyperparameters' と同時に使用することはできません。'OptimizeHyperparameters' の場合の交差検証は、名前と値のペアの引数 'HyperparameterOptimizationOptions' を使用することのみによって変更できます。

モデル パラメーター

すべて折りたたむ

複数のクラスで最小コストが同じである場合に predict メソッドで使用されるタイブレーク アルゴリズム。'BreakTies' と以下のいずれかで構成されるコンマ区切りのペアとして指定します。

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

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

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

既定では、同順位は K 最近傍の中で同じ数の最近傍点を複数のクラスがもつときに発生します。

例: 'BreakTies','nearest'

kd ツリーの葉ノード内のデータ点の最大数。'BucketSize' と正の整数値で構成されるコンマ区切りのペアとして指定します。この引数は、NSMethod'kdtree' の場合にのみ意味があります。

例: 'BucketSize',40

データ型: single | double

カテゴリカル予測子フラグ。'CategoricalPredictors' と以下のいずれかで構成される、コンマ区切りペアとして指定します。

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

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

CategoricalPredictors'all' に設定した場合、既定の設定の Distance'hamming' です。

例: 'CategoricalPredictors','all'

学習に使用するクラスの名前。'ClassNames' と categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。ClassNames のデータ型は Y と同じでなければなりません。

ClassNames が文字配列の場合、各要素は配列の 1 つの "行" に対応しなければなりません。

ClassNames の使用目的は次のとおりです。

  • 学習時のクラスの順序を指定する。

  • クラスの順序に対応する入力または出力引数の次元の順序を指定する。たとえば、Cost の次元の順序や predict によって返される分類スコアの列の順序を指定するために ClassNames を使用します。

  • 学習用にクラスのサブセットを選択する。たとえば、Y に含まれているすべての異なるクラス名の集合が {'a','b','c'} であるとします。クラス 'a' および 'c' のみの観測値を使用してモデルに学習をさせるには、'ClassNames',{'a','c'} を指定します。

ClassNames の既定値は、Y に含まれているすべての異なるクラス名の集合です。

例: 'ClassNames',{'b','g'}

データ型: categorical | char | string | logical | single | double | cell

点の誤分類のコスト。'Cost' と以下のいずれかで構成されるコンマ区切りペアとして指定されます。

  • 正方行列。Cost(i,j) は真のクラスが i である場合に 1 つの点をクラス j に分類するためのコストです (行は真のクラス、列は予測したクラスに対応します)。Cost の対応する行および列についてクラスの順序を指定するには、名前と値のペアの引数 ClassNames をさらに指定します。

  • 2 つのフィールドをもつ S を構成します。2 つのフィールドは、Y と同じ型のグループ名を表す変数が格納されている S.ClassNames と、コスト行列が格納されている S.ClassificationCosts です。

既定値は、i~=j の場合は Cost(i,j)=1i=j の場合は Cost(i,j)=0 です。

データ型: single | double | 構造体

共分散行列。'Cov' と、マハラノビス距離の計算時の共分散行列を表すスカラー値の正定行列で構成される、コンマ区切りのペアとして指定します。この引数は、'Distance''mahalanobis' の場合にのみ有効です。

'Standardize' および 'Scale' または 'Cov' のいずれかを同時に指定できません。

データ型: single | double

同順位使用フラグ。'IncludeTies' と、距離の値が K 番目に小さい距離と等しい近傍点をすべて predict に含めるかどうかを表す論理値で構成される、コンマ区切りのペアとして指定します。IncludeTiestrue の場合、predict はすべての近傍点を含みます。それ以外の場合、predict は正確に K の近傍点を使用します。

例: 'IncludeTies',true

データ型: logical

最近傍検索法。'NSMethod''exhaustive' または 'kdtree' で構成されるコンマ区切りのペアとして指定します。

  • 'kdtree'kd 木を作成および使用して最近傍を探索します。'kdtree' は距離計量が次のいずれかである場合に有効です。

    • 'euclidean'

    • 'cityblock'

    • 'minkowski'

    • 'chebychev'

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

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

例: 'NSMethod','exhaustive'

予測子変数名。'PredictorNames' と一意な名前の string 配列または一意な文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。'PredictorNames' の機能は、学習データの提供方法によって決まります。

  • XY を指定した場合、'PredictorNames' を使用して X の名前で予測子変数を指定できます。

    • PredictorNames 内の名前の順序は、X の列の順序に一致しなければなりません。つまり、PredictorNames{1}X(:,1) の名前、PredictorNames{2}X(:,2) の名前であり、他も同様です。また、size(X,2)numel(PredictorNames) は等しくなければなりません。

    • 既定では PredictorNames{'x1','x2',...} です。

  • Tbl が与えられた場合、'PredictorNames' を使用して学習に使用する予測子変数を選択できます。つまり、fitcknnPredictorNames の予測子変数と応答変数のみを学習で使用します。

    • PredictorNamesTbl.Properties.VariableNames のサブセットでなければならず、応答変数の名前を含めることはできません。

    • 既定では、すべての予測子変数の名前が PredictorNames に格納されます。

    • 'PredictorNames'formula のいずれか一方のみを使用して学習用の予測子を指定することをお勧めします。

例: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

データ型: string | cell

各クラスの事前確率。'Prior' と次の表の値から構成されるコンマ区切りのペアとして指定します。

説明
'empirical'クラスの事前確率は、Y のクラスの相対的頻度です。
'uniform'クラスの事前確率はいずれも 1/K (K はクラス数) となります。
数値ベクトル各要素はクラスの事前確率です。Mdl.ClassNames に従って要素を並べ替えるか、ClassNames 名前と値のペアの引数を使用して順序を指定します。要素は合計が 1 になるように正規化されます。
構造体

構造体 S には 2 つのフィールドがあります。

  • S.ClassNames: Y と同じ型の変数のクラス名が格納されます。

  • S.ClassProbs: 対応する事前確率のベクトルが格納されます。要素は合計が 1 になるように正規化されます。

WeightsPrior の両方に値を設定した場合は、重みは再正規化され、それぞれのクラスの事前確率の値に加算されます。

例: 'Prior','uniform'

データ型: char | string | single | double | 構造体

応答変数名。'ResponseName' と文字ベクトルまたは string スカラーから構成されるコンマ区切りのペアとして指定します。

  • Y を指定した場合、'ResponseName' を使用して応答変数の名前を指定できます。

  • ResponseVarName または formula を指定した場合、'ResponseName' を使用することはできません。

例: 'ResponseName','response'

データ型: char | string

距離スケール。'Scale' と、X の列数と同じ長さの非負のスカラー値を含むベクトルで構成される、コンマ区切りのペアとして指定します。X とクエリ点の間の各座標差分は、Scale の対応する要素でスケーリングされます。この引数は、'Distance''seuclidean' の場合にのみ有効です。

'Standardize' および 'Scale' または 'Cov' のいずれかを同時に指定できません。

データ型: single | double

スコア変換。'ScoreTransform' と文字ベクトル、string スカラー、または関数ハンドルから構成されるコンマ区切りのペアとして指定します。

次の表は、使用可能な文字ベクトルおよび 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','logit'

データ型: char | string | 関数ハンドル

観測値の重み。'Weights' と、正の値の数値ベクトルまたは Tbl 内の変数の名前から構成されるコンマ区切りのペアとして指定します。X または Tbl の各行に含まれている観測値は、Weights の対応する値で重み付けされます。Weights のサイズは、X または Tbl の行数と等しくなければなりません。

入力データをテーブル Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトル WTbl.W として格納されている場合、'W' として指定します。それ以外の場合、モデルに学習をさせるときに、Tbl の列は W を含めてすべて予測子または応答として扱われます。

合計が各クラスの事前確率の値と等しくなるように Weights が正規化されます。

既定の設定では、Weightsones(n,1) です。nX または Tbl の観測値数です。

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

交差検証

すべて折りたたむ

交差検証フラグ。'Crossval''on' または 'off' から構成されるコンマ区切りのペアとして指定します。

'on' を指定した場合、10 分割の交差検証が実施されます。

この交差検証の設定をオーバーライドするには、名前と値のペアの引数 CVPartitionHoldoutKFoldLeaveout のいずれかを使用します。交差検証済みモデルを作成するために使用できる交差検証の名前と値のペアの引数は、一度に 1 つだけです。

または、後で Mdlcrossval に渡して交差検証を実行します。

例: 'CrossVal','on'

交差検証分割。'CVPartition'cvpartition により作成された cvpartition 分割オブジェクトで構成されるコンマ区切りのペアとして指定します。分割オブジェクトは、交差検証のタイプと、学習セットおよび検証セットのインデックス付けを指定します。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、'CVPartition''Holdout''KFold''Leaveout' の 4 つのうちのいずれかのみです。

例: cvp = cvpartition(500,'KFold',5) を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、'CVPartition',cvp を使用して交差検証済みモデルを指定できます。

ホールドアウト検定に使用されるデータの比率。'Holdout' と範囲 (0,1) のスカラー値から構成されるコンマ区切りのペアとして指定します。'Holdout',p を指定した場合、以下の手順が実行されます。

  1. p*100% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。

  2. コンパクトな学習済みモデルを交差検証済みモデルの Trained プロパティに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'Holdout',0.1

データ型: double | single

交差検証済みモデルで使用する分割数。'KFold' と 1 より大きい正の整数から構成されるコンマ区切りのペアとして指定します。'KFold',k を指定した場合、以下の手順が実行されます。

  1. データを無作為に k 個のセットに分割する。

  2. 各セットについて、そのセットを検定データとして確保し、他の k - 1 個のセットを使用してモデルに学習をさせる。

  3. k 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている k 行 1 列の cell ベクトルのセルに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'KFold',5

データ型: single | double

Leave-one-out 法の交差検証のフラグ。'Leaveout''on' または 'off' で構成されるコンマ区切りのペアとして指定します。'Leaveout','on' を指定した場合、n 個の観測値 (n は、モデルの NumObservations プロパティで指定される、欠損観測値を除外した観測値の個数) のそれぞれについて以下の手順が実行されます。

  1. その観測値を検証データとして確保し、他の n - 1 個の観測値を使用してモデルに学習をさせる。

  2. n 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている n 行 1 列の cell ベクトルのセルに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'Leaveout','on'

ハイパーパラメーターの最適化

すべて折りたたむ

距離計量。'Distance' と有効な距離計量名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。使用できる距離計量名は、近傍探索法の選択 (NSMethod を参照) によって決まります。

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 です。別の指数を指定するには、'Exponent' 名前と値のペアの引数を使用します。
'seuclidean'標準化されたユークリッド距離。X と各クエリ点の間の各座標差分がスケーリングされます。つまり、スケール値 S で除算されます。S の既定値は X から計算される標準偏差で、S = 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(k,:) の間の距離です。

CategoricalPredictors'all' に指定した場合、既定の距離計量は 'hamming' となります。それ以外の場合は、既定の距離計量は 'euclidean' です。

定義については距離計量を参照してください。

例: 'Distance','minkowski'

データ型: char | string | 関数ハンドル

距離重み付け関数。'DistanceWeight' と関数ハンドルまたは次の表のいずれかの値から構成されるコンマ区切りのペアとして指定します。

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

例: 'DistanceWeight','inverse'

データ型: char | string | 関数ハンドル

ミンコフスキー距離指数。'Exponent' と正のスカラー値で構成されるコンマ区切りのペアとして指定します。この引数は、'Distance''minkowski' の場合にのみ有効です。

例: 'Exponent',3

データ型: single | double

予測時に各点を分類するために検出する X の最近傍の数。'NumNeighbors' と正の整数値で構成されるコンマ区切りのペアとして指定します。

例: 'NumNeighbors',3

データ型: single | double

予測子を標準化するためのフラグ。'Standardize' と、true (1) または false (0) のいずれかで構成される、コンマ区切りのペアとして指定します。

'Standardize',true を設定すると、予測子データ (X) の各列のセンタリングとスケーリングを、それぞれ列の平均値と標準偏差を使用して行います。

すべての予測子がカテゴリカルの場合、カテゴリカル予測子は標準化されずエラーがスローされます。

'Standardize',1 および 'Scale' または 'Cov' のいずれかを同時に指定できません。

予測子データの標準化をお勧めします。

例: 'Standardize',true

データ型: logical

ハイパーパラメーターの最適化

すべて折りたたむ

最適化するパラメーター。'OptimizeHyperparameters' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

  • 'none' — 最適化を行いません。

  • 'auto'{'Distance','NumNeighbors'} を使用します。

  • 'all' — すべての使用可能パラメーターを最適化します。

  • 使用可能パラメーター名の string 配列または cell 配列。

  • optimizableVariable オブジェクトのベクトル。通常は hyperparameters の出力です。

最適化では、パラメーターを変化させることにより、fitcknn の交差検証損失 (誤差) を最小化しようとします。(各種の状況における) 交差検証損失の詳細については、分類損失を参照してください。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値のペア HyperparameterOptimizationOptions を使用します。

メモ

'OptimizeHyperparameters' の値は、他の名前と値のペアの引数を使用して設定した値より優先されます。たとえば、'OptimizeHyperparameters''auto' に設定すると、'auto' の値が適用されます。

fitcknn では、以下のパラメーターを使用できます。

  • Distancefitcknn は、'cityblock''chebychev''correlation''cosine''euclidean''hamming''jaccard''mahalanobis''minkowski''seuclidean' および 'spearman' で探索します。

  • DistanceWeightfitcknn は、'equal''inverse' および 'squaredinverse' で探索します。

  • Exponentfitcknn は、既定では範囲 [0.5,3] で、正の実数値を探索します。

  • NumNeighborsfitcknn は、既定では範囲 [1, max(2,round(NumObservations/2))] の対数スケールで、正の整数値を探索します。

  • Standardizefitcknn は、値 'true' および 'false' で探索します。

既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable オブジェクトのベクトルを渡します。例えば、

load fisheriris
params = hyperparameters('fitcknn',meas,species);
params(1).Range = [1,20];

OptimizeHyperparameters の値として params を渡します。

既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、回帰の場合は log(1 + 交差検証損失)、分類の場合は誤分類率です。反復表示を制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'Verbose フィールドを設定します。プロットを制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'ShowPlots フィールドを設定します。

例については、あてはめた KNN 分類器の最適化を参照してください。

例: 'auto'

最適化のオプション。'HyperparameterOptimizationOptions' と構造体から構成されるコンマ区切りのペアとして指定します。この引数を指定すると、名前と値のペアの引数 OptimizeHyperparameters の効果が変化します。この構造体のフィールドは、すべてオプションです。

フィールド名既定の設定
Optimizer
  • 'bayesopt' — ベイズ最適化を使用。内部的には bayesopt が呼び出されます。

  • 'gridsearch' — 次元ごとに NumGridDivisions の値があるグリッド探索を使用。

  • 'randomsearch'MaxObjectiveEvaluations 個の点で無作為に探索。

'gridsearch' では、グリッドからの一様な非復元抽出により、無作為な順序で探索します。最適化後、sortrows(Mdl.HyperparameterOptimizationResults) コマンドを使用してグリッド順のテーブルを取得できます。

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

詳細については、bayesopt の名前と値のペアの引数 AcquisitionFunctionName または獲得関数のタイプを参照してください。

'expected-improvement-per-second-plus'
MaxObjectiveEvaluations目的関数評価の最大数。'bayesopt' または 'randomsearch' の場合は 30'gridsearch' の場合はグリッド全体
MaxTime

制限時間。正の実数を指定します。制限時間の単位は、tictoc によって測定される秒です。MaxTime は関数評価を中断させないため、実行時間が MaxTime を超える可能性があります。

Inf
NumGridDivisions'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。10
ShowPlotsプロットを表示するかどうかを示す論理値。true の場合、最良の目的関数の値が反復回数に対してプロットされます。1 つまたは 2 つの最適化パラメーターがあり、Optimizer'bayesopt' である場合、ShowPlots はパラメーターに対する目的関数のモデルのプロットも行います。true
SaveIntermediateResultsOptimizer'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。false
Verbose

コマンド ラインへの表示。

  • 0 — 反復表示なし

  • 1 — 反復表示あり

  • 2 — 追加情報付きで反復表示あり

詳細については、bayesopt の名前と値のペアの引数 Verbose を参照してください。

1
UseParallelベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。詳細については、並列ベイズ最適化を参照してください。false
Repartition

反復ごとに交差検証を再分割するかどうかを示す論理値。false の場合、オプティマイザーは単一の分割を最適化に使用します。

分割ノイズが考慮されるので、通常は true にすると最も確実な結果が得られます。ただし、true で良好な結果を得るには、2 倍以上の関数評価が必要になります。

false
以下の 3 つのフィールド名は 1 つだけ使用できます。
CVPartitioncvpartition によって作成される cvpartition オブジェクト。交差検証フィールドが指定されていない場合 'Kfold',5
Holdoutホールドアウトの比率を表す範囲 (0,1) のスカラー。
Kfold1 より大きい整数。

例: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

データ型: 構造体

出力引数

すべて折りたたむ

学習済みの k 最近傍分類モデル。ClassificationKNN モデル オブジェクトまたは ClassificationPartitionedModel 交差検証済みモデル オブジェクトとして返されます。

名前と値のペアの引数 KFoldHoldoutCrossValCVPartition のいずれかを設定した場合、MdlClassificationPartitionedModel 交差検証済みモデル オブジェクトになります。それ以外の場合、MdlClassificationKNN モデル オブジェクトになります。

Mdl のプロパティを参照するには、ドット表記を使用します。たとえば、コマンド ウィンドウで距離計量を表示するには、Mdl.Distance を入力します。

詳細

すべて折りたたむ

予測

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

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

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

  3. Y の値の中で事後確率が最も大きい ynew 分類ラベルを割り当てます。

詳細は、『predict』ドキュメンテーションの事後確率を参照してください。

ヒント

モデルに学習をさせた後で、新しいデータについてラベルを予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。

アルゴリズム

  • NaNs または <undefined> は観測値の欠損を示します。以下はデータセットまたは重みに欠損した観測がある場合の fitcknn の動作を説明します。

    • Y の任意の値または重みに欠損がある場合、fitcknn はこれらの値を Y から削除し、重みおよび対応する X の行をデータから削除します。重みは再度正規化され、合計は 1 になります。

    • 予測子 ('Standardize',1) または標準化されたユークリッド距離 ('Distance','seuclidean') に、スケーリングなしの標準化を指定する場合、fitcknn は平均と標準偏差を計算する前に、欠損した観測値を各予測子から削除します。つまり、nanmean および nanstd が各予測子で実行されます。

    • 共分散行列を使用せずにマハラノビス距離 ('Distance','mahalanbois') を指定する場合、fitcknn によって少なくとも 1 つの欠損値を含む X の行が削除されます。つまり、予測子行列 Xnancov が実行されます。

  • 'Standardize',1 を設定すると仮定します。

    • Prior または Weights も指定する場合、観測値の重みが考慮されます。具体的には、予測子 j の加重平均は次のようになります。

      x¯j=Bjwkxjk

      また、加重標準偏差は次のようになります。

      sj=Bjwk(xjkx¯j),

      ここで Bj は、xjk と wk が欠損していないインデックス k の集合です。

    • 'Distance','mahalanobis' または 'Distance','seuclidean' も設定する場合、Scale または Cov は指定できません。代わりに、次の処理が実行されます。

      1. 各予測子の平均と標準偏差を計算する

      2. ステップ 1 の結果を使用してデータを標準化する

      3. distance パラメーターの値をそれぞれの既定値を使用して計算する。

  • Scale および Prior または Weights のいずれかを指定する場合、観測された距離は加重標準偏差でスケーリングされます。

  • Cov および Prior または Weights のいずれかを指定する場合、加重共分散行列が距離に適用されます。つまり、次のようになります。

    Cov=Bwj(Bwj)2Bwj2Bwj(xjx¯)(xjx¯),

    ここで B は、観測値 xj に欠損値がなく wj が欠損していないインデックス j の集合です。

代替方法

fitcknn はマルチクラス KNN 分類器を学習させることができます。また、fitcecoc を使用して、マルチクラス学習問題を一連の KNN バイナリ学習器に縮小できます。

拡張機能

R2014a で導入