fitcknn

Подгонка k - ближайший соседний классификатор

Описание

Mdl = fitcknn(Tbl,ResponseVarName) возвращает k - ближайшую соседнюю модель классификации на основе входных переменных (также известных как предикторы, функции или атрибуты) в таблице Tbl и выход (ответ) Tbl.ResponseVarName.

Mdl = fitcknn(Tbl,formula) возвращает k - ближайшую соседнюю модель классификации на основе входных переменных в таблице Tbl. formula является объяснительной моделью отклика и подмножеством переменных предиктора в Tbl.

Mdl = fitcknn(Tbl,Y) возвращает k - ближайшую соседнюю модель классификации на основе переменных предиктора в таблице Tbl и Y массива откликов.

пример

Mdl = fitcknn(X,Y) возвращает k - ближайшую соседнюю модель классификации на основе данных предиктора X и ответные Y.

пример

Mdl = fitcknn(___,Name,Value) подходит для модели с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение", с использованием любого из предыдущих синтаксисов. Для примера можно задать алгоритм разрыва связей, метрику расстояния или веса наблюдений.

Примеры

свернуть все

Обучите k-ближайших соседей для данных радужной оболочки глаза Фишера, где k, количество ближайших соседей в предикторах, равняется 5.

Загрузите данные радужки Фишера.

load fisheriris
X = meas;
Y = species;

X является числовой матрицей, которая содержит четыре измерения лепестков для 150 ирисов. Y - массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.

Обучите классификатор 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
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl.Prior
ans = 1×3

    0.3333    0.3333    0.3333

Mdl.Prior содержит класс априорных вероятностей, которые можно задать используя 'Prior' аргумент пары "имя-значение" в fitcknn. Порядок предшествующих вероятностей класса соответствует порядку классов в Mdl.ClassNames. По умолчанию предыдущие вероятности являются соответствующими относительными частотами классов в данных.

Можно также сбросить предыдущие вероятности после обучения. Для примера установите предыдущие вероятности 0,5, 0,2 и 0,3 соответственно.

Mdl.Prior = [0.5 0.2 0.3];

Можно пройти Mdl на predict для маркировки новых измерений или crossval для перекрестной проверки классификатора.

Загрузите набор данных радужки Фишера.

load fisheriris
X = meas;
Y = species;

X является числовой матрицей, которая содержит четыре измерения лепестков для 150 ирисов. Y - массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.

Обучите классификатор 3 ближайших соседей с помощью метрики Минковского. Чтобы использовать метрику Минковского, необходимо использовать исчерпывающий искатель. Это хорошая практика, чтобы стандартизировать некатегориальные данные предиктора.

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

Mdl является ClassificationKNN классификатор.

Можно изучить свойства Mdl двойным кликом мыши Mdl в окне Рабочая область. Откроется Редактор переменных.

Обучите k-ближайших соседей с помощью расстояния хи-квадрат.

Загрузите набор данных радужки Фишера.

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

Расстояние хи-квадрат между j-мерными точками x и z равняется

χ(x,z)=j=1Jwj(xj-zj)2,

где wj - вес, сопоставленный с размерностью j.

Задайте функцию хи-квадрат расстояния. Функция расстояния должна:

  • Взять одну строку X, например, x, и матрица Z.

  • Сравнение x в каждую строку Z.

  • Верните вектор D длины nz, где nz количество строк 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);

KNNMdl является ClassificationKNN классификатор.

Перекрестная проверка классификатора KNN с помощью 10-кратной перекрестной валидации по умолчанию. Исследуйте ошибку классификации.

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

CVKNNMdl является ClassificationPartitionedModel классификатор. 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

Вторая схема взвешивания приводит к классификатору, который имеет лучшую выходную эффективность.

В этом примере показано, как автоматически оптимизировать гиперпараметры с помощью fitcknn. В примере используются данные радужной оболочки глаза Фишера.

Загрузите данные.

load fisheriris
X = meas;
Y = species;

Найдите гиперпараметры, которые минимизируют пятикратные потери при перекрестной проверке с помощью автоматической оптимизации гипероптимизации параметров управления.

Для воспроизводимости установите случайный seed и используйте '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 |      0.6428 |    0.026667 |    0.026667 |           30 |       cosine |
|    2 | Accept |        0.04 |     0.36853 |    0.026667 |    0.027197 |            2 |    chebychev |
|    3 | Accept |     0.19333 |     0.25639 |    0.026667 |    0.030324 |            1 |      hamming |
|    4 | Accept |     0.33333 |     0.13515 |    0.026667 |    0.033313 |           31 |     spearman |
|    5 | Best   |        0.02 |     0.19498 |        0.02 |    0.020648 |            6 |       cosine |
|    6 | Accept |    0.073333 |     0.19048 |        0.02 |    0.023082 |            1 |  correlation |
|    7 | Accept |        0.06 |     0.13125 |        0.02 |    0.020875 |            2 |    cityblock |
|    8 | Accept |        0.04 |     0.13324 |        0.02 |    0.020622 |            1 |    euclidean |
|    9 | Accept |        0.24 |     0.20257 |        0.02 |    0.020562 |           74 |  mahalanobis |
|   10 | Accept |        0.04 |     0.17154 |        0.02 |    0.020649 |            1 |    minkowski |
|   11 | Accept |    0.053333 |      0.1662 |        0.02 |    0.020722 |            1 |   seuclidean |
|   12 | Accept |     0.19333 |     0.17064 |        0.02 |    0.020701 |            1 |      jaccard |
|   13 | Accept |        0.04 |     0.13066 |        0.02 |    0.029203 |            1 |       cosine |
|   14 | Accept |        0.04 |     0.10179 |        0.02 |    0.031888 |           75 |       cosine |
|   15 | Accept |        0.04 |     0.11376 |        0.02 |    0.020076 |            1 |       cosine |
|   16 | Accept |    0.093333 |     0.10774 |        0.02 |    0.020073 |           75 |    euclidean |
|   17 | Accept |    0.093333 |     0.10886 |        0.02 |     0.02007 |           75 |    minkowski |
|   18 | Accept |         0.1 |     0.12311 |        0.02 |    0.020061 |           75 |    chebychev |
|   19 | Accept |     0.15333 |    0.098451 |        0.02 |    0.020044 |           75 |   seuclidean |
|   20 | Accept |         0.1 |     0.10811 |        0.02 |    0.020044 |           75 |    cityblock |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | NumNeighbors |     Distance |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|   21 | Accept |    0.033333 |     0.10088 |        0.02 |    0.020046 |           75 |  correlation |
|   22 | Accept |    0.033333 |     0.12637 |        0.02 |     0.02656 |            9 |       cosine |
|   23 | Accept |    0.033333 |      0.1007 |        0.02 |     0.02854 |            9 |       cosine |
|   24 | Accept |        0.02 |     0.12525 |        0.02 |    0.028607 |            1 |    chebychev |
|   25 | Accept |        0.02 |     0.14092 |        0.02 |    0.022264 |            1 |    chebychev |
|   26 | Accept |        0.02 |     0.12321 |        0.02 |    0.021439 |            1 |    chebychev |
|   27 | Accept |        0.02 |     0.10411 |        0.02 |    0.020999 |            1 |    chebychev |
|   28 | Accept |     0.66667 |    0.090856 |        0.02 |    0.020008 |           75 |      hamming |
|   29 | Accept |        0.04 |    0.091034 |        0.02 |    0.020008 |           12 |  correlation |
|   30 | Best   |    0.013333 |     0.10883 |    0.013333 |    0.013351 |            6 |    euclidean |

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

Figure contains an axes. The axes with title Objective function model contains 5 objects of type line, surface, contour. These objects represent Observed points, Model mean, Next point, Model minimum feasible.

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

Best observed feasible point:
    NumNeighbors    Distance 
    ____________    _________

         6          euclidean

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

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

         6          euclidean

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


  Properties, Methods

Входные параметры

свернуть все

Выборочные данные, используемых для обучения модели, заданная как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора. Опционально Tbl может содержать один дополнительный столбец для переменной отклика. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не разрешены.

  • Если Tbl содержит переменную отклика, и необходимо использовать все оставшиеся переменные в Tbl в качестве предикторов, затем задайте переменную отклика при помощи ResponseVarName.

  • Если Tbl содержит переменную отклика, и необходимо использовать только подмножество остальных переменных в Tbl в качестве предикторов задайте формулу при помощи formula.

  • Если Tbl не содержит переменную отклика, затем задает переменную отклика при помощи Y. Длина переменной отклика и количество строк в Tbl должно быть равным.

Типы данных: table

Имя переменной отклика, заданное как имя переменной в Tbl.

Вы должны задать ResponseVarName как вектор символов или строковый скаляр. Для примера, если переменная отклика Y хранится как Tbl.Y, затем укажите его следующим 'Y'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Y, как предикторы при обучении модели.

Переменная отклика должна быть категориальными символьными или строковыми массивами; логический или числовой вектор; или массив ячеек из векторов символов. Если Y является символьным массивом, тогда каждый элемент переменной отклика должен соответствовать одной строке массива.

Хорошей практикой является определение порядка классов при помощи ClassNames аргумент имя-значение.

Типы данных: char | string

Объяснительная модель переменной отклика и подмножества переменных предиктора, заданная в виде вектора символов или строкового скаляра в форме 'Y~x1+x2+x3'. В этой форме Y представляет переменную отклика, и x1, x2, и x3 представляют переменные предиктора.

Чтобы задать подмножество переменных в Tbl в качестве предикторов для настройки модели используйте формулу. Если вы задаете формулу, то программное обеспечение не использует никаких переменных в Tbl которые не появляются в formula.

Имена переменных в формуле должны быть обоими именами переменных в Tbl (Tbl.Properties.VariableNames) и действительный MATLAB® идентификаторы. Можно проверить имена переменных в Tbl при помощи isvarname функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName функция.

Типы данных: char | string

Метки класса, заданные как категориальные символьные или строковые массивы, логический или числовой вектор или массив ячеек из векторов символов. Каждая строка Y представляет классификацию соответствующей строки X.

Программное обеспечение рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Y чтобы быть отсутствующими значениями. Следовательно, программное обеспечение не обучается, используя наблюдения с отсутствующим ответом.

Типы данных: categorical | char | string | logical | single | double | cell

Данные предиктора, заданные как числовая матрица.

Каждая строка соответствует одному наблюдению (также известному как образец или пример), и каждый столбец соответствует одной переменной предиктора (также известной как функция).

Длина Y и количество строк X должно быть равным.

Чтобы задать имена предикторов в порядке их внешнего вида в X, используйте PredictorNames аргумент пары "имя-значение".

Типы данных: double | single

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'NumNeighbors',3,'NSMethod','exhaustive','Distance','minkowski' задает классификатор для трех ближайших соседей, используя метод поиска ближайшего соседа и метрику Минковского.

Примечание

Вы не можете использовать какой-либо аргумент пары "имя-значение" перекрестной проверки наряду с 'OptimizeHyperparameters' аргумент пары "имя-значение". Можно изменить перекрестную валидацию для 'OptimizeHyperparameters' только при помощи 'HyperparameterOptimizationOptions' аргумент пары "имя-значение".

Параметры модели

свернуть все

Алгоритм разрыва связей, используемый predict метод, если несколько классов имеют одинаковую наименьшую стоимость, заданную как разделенная разделенными запятой парами, состоящая из 'BreakTies' и одно из следующих:

  • 'smallest' - Используйте наименьший индекс среди связанных групп.

  • 'nearest' - Используйте класс с ближайшим соседом среди связанных групп.

  • 'random' - Используйте случайный tiebreaker среди связанных групп.

По умолчанию связи возникают, когда несколько классов имеют одинаковое количество ближайших точек среди K ближайшие соседи.

Пример: 'BreakTies','nearest'

Максимальное количество точек данных в конечном узле kd-дерева, заданное как разделенная разделенными запятой парами, состоящая из 'BucketSize' и положительное целое значение. Этот аргумент значим только тогда, когда NSMethod является 'kdtree'.

Пример: 'BucketSize',40

Типы данных: single | double

Категориальный флаг предиктора, заданный как разделенная разделенными запятой парами, состоящая из 'CategoricalPredictors' и одно из следующих:

  • 'all' - Все предикторы категоричны.

  • [] - Никакие предикторы не являются категориальными.

Данные предиктора для fitcknn должны быть либо непрерывными, либо категориальными.

  • Если данные предиктора находятся в таблице (Tbl), fitcknn принимает, что переменная категориальна, если это логический вектор, категориальный вектор, символьный массив, строковые массивы или массив ячеек из векторов символов. Если Tbl включает как непрерывные, так и категориальные значения, тогда необходимо задать значение 'CategoricalPredictors' так что fitcknn может определить, как обработать все предикторы как непрерывные или категориальные переменные.

  • Если данные предиктора являются матрицей (X), fitcknn принимает, что все предикторы непрерывны. Чтобы идентифицировать все предикторы в X как категориальные, задайте 'CategoricalPredictors' как 'all'.

Когда вы задаете CategoricalPredictors на 'all', значение по умолчанию Distance является 'hamming'.

Пример: 'CategoricalPredictors','all'

Имена классов, используемых для обучения, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов. ClassNames должен иметь тот совпадающий тип данных, что и переменная отклика в Tbl или Y.

Если ClassNames является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.

Использование ClassNames кому:

  • Задайте порядок классов во время обучения.

  • Задайте порядок любой размерности входного или выходного аргумента, которая соответствует порядку классов. Для примера используйте ClassNames для определения порядка размерностей Cost или порядок столбцов классификационных оценок, возвращаемых predict.

  • Выберите подмножество классов для обучения. Например, предположим, что набор всех различных имен классов в Y является {'a','b','c'}. Чтобы обучить модель с помощью наблюдений из классов 'a' и 'c' только, задайте 'ClassNames',{'a','c'}.

Значение по умолчанию для ClassNames - набор всех различных имен классов в переменной отклика в Tbl или Y.

Пример: 'ClassNames',{'b','g'}

Типы данных: categorical | char | string | logical | single | double | cell

Стоимость неправильной классификации точки, заданная как разделенная разделенными запятой парами, состоящая из 'Cost' и одно из следующих:

  • Квадратная матрица, где Cost(i,j) - стоимость классификации точки в класс j если его класс true i (т.е. строки соответствуют истинному классу, а столбцы - предсказанному классу). Чтобы задать порядок классов для соответствующих строк и столбцов Cost, дополнительно задайте ClassNames аргумент пары "имя-значение".

  • Структурные S имеющий два поля: S.ClassNames содержащие имена групп как переменные того же типа, что и Y, и S.ClassificationCosts содержащая матрицу затрат.

Значение по умолчанию является Cost(i,j)=1 если i~=j, и Cost(i,j)=0 если i=j.

Типы данных: single | double | struct

Ковариационная матрица, заданная как разделенная разделенными запятой парами, состоящая из 'Cov' и положительная определенная матрица скалярных значений, представляющих ковариационную матрицу при вычислении расстояния Махаланобиса. Этот аргумент действителен только при 'Distance' является 'mahalanobis'.

Вы не можете одновременно задать 'Standardize' и любой из 'Scale' или 'Cov'.

Типы данных: single | double

Метрика расстояния, заданная как разделенная разделенными запятой парами, состоящая из 'Distance' и допустимое имя метрики расстояния или указатель на функцию. Допустимые имена метрики расстояния зависят от вашего выбора метода neighbor-searcher (см NSMethod).

NSMethodИмена метрических расстояний
exhaustiveЛюбая метрика расстояния ExhaustiveSearcher
kdtree'cityblock', 'chebychev', 'euclidean', или 'minkowski'

Эта таблица включает действительные метрики расстояния ExhaustiveSearcher.

Имена метрических расстоянийОписание
'cityblock'Расстояние между блоками.
'chebychev'Расстояние Чебычева (максимальное различие координат).
'correlation'Один минус выборка линейной корреляции между наблюдениями (рассматривается как последовательности значений).
'cosine'Один минус косинус включенного угла между наблюдениями (обрабатывается как векторы).
'euclidean'Евклидово расстояние.
'hamming'Расстояние Хемминга, процент разных координат.
'jaccard'Один минус коэффициент Жаккара, процент ненулевых координат, которые различаются.
'mahalanobis'Расстояние Махаланобиса, вычисленное с помощью положительной определенной ковариационной матрицы C. Значение по умолчанию C - выборочная ковариационная матрица X, в расчете на cov(X,'omitrows'). Чтобы задать другое значение для C, используйте 'Cov' аргумент пары "имя-значение".
'minkowski'Расстояние Минковского. Экспонента по умолчанию 2. Чтобы задать другую экспоненту, используйте 'Exponent' аргумент пары "имя-значение".
'seuclidean'Стандартизированное евклидово расстояние. Каждое различие координат между X и точка запроса масштабируется, что означает деление на значение шкалы S. Значение по умолчанию S - стандартное отклонение, вычисленное из X,   S = std(X,'omitnan'). Чтобы задать другое значение для S, используйте Scale аргумент пары "имя-значение".
'spearman'Один минус выборки корреляции ранга Спирмана между наблюдениями (рассматриваются как последовательности значений).
distfun

Указатель на функцию расстояния. distfun имеет форму

function D2 = distfun(ZI,ZJ)
% calculation of  distance
...
где

  • ZI является 1-by- N вектор, содержащий одну строку X или Y.

  • ZJ является M2-by- N матрица, содержащая несколько строк X или Y.

  • D2 является M2-by- 1 вектор расстояний, и D2(k) - расстояние между наблюдениями ZI и ZJ(k,:).

Если вы задаете CategoricalPredictors как 'all', тогда метрика расстояния по умолчанию 'hamming'. В противном случае метрика расстояния по умолчанию является 'euclidean'.

Определения см. в разделе Метрики расстояния.

Пример: 'Distance','minkowski'

Типы данных: char | string | function_handle

Функция взвешивания расстояния, заданная как разделенная разделенными запятой парами, состоящая из 'DistanceWeight' и указатель на функцию или одно из значений в этой таблице.

ЗначениеОписание
'equal'Без взвешивания
'inverse'Вес 1/расстояние
'squaredinverse'Вес 1/расстояние2
fcnfcn является функцией, которая принимает матрицу неотрицательных расстояний и возвращает матрицу того же размера, содержащую неотрицательные веса расстояний. Для примера, 'squaredinverse' эквивалентно @(d)d.^(-2).

Пример: 'DistanceWeight','inverse'

Типы данных: char | string | function_handle

Показатель расстояния Минковского, заданный как разделенная разделенными запятой парами, состоящая из 'Exponent' и положительная скалярная величина значение. Этот аргумент действителен только при 'Distance' является 'minkowski'.

Пример: 'Exponent',3

Типы данных: single | double

Флаг включения галстука, заданный как разделенная разделенными запятой парами, состоящая из 'IncludeTies' и логическое значение, указывающее, predict ли включает все соседи, значения расстояния которых равны Kсамое маленькое расстояние. Если IncludeTies является true, predict включает всех этих соседей. В противном случае predict использует точно K соседи.

Пример: 'IncludeTies',true

Типы данных: logical

Метод поиска по ближайшему соседу, заданный как разделенная разделенными запятой парами, состоящая из 'NSMethod' и 'kdtree' или 'exhaustive'.

  • 'kdtree' - Создает и использует kd-дерево для поиска ближайших соседей. 'kdtree' действителен, когда метрика расстояния является одной из следующих:

    • 'euclidean'

    • 'cityblock'

    • 'minkowski'

    • 'chebychev'

  • 'exhaustive' - Использует алгоритм исчерпывающего поиска. При предсказании класса новой точки xnewпрограмма вычисляет значения расстояния от всех точек в X на xnew найти ближайших соседей.

Значение по умолчанию является 'kdtree' когда X имеет 10 или меньше столбцов, X не является разреженным или gpuArray, и метрика расстояния является 'kdtree' тип; в противном случае 'exhaustive'.

Пример: 'NSMethod','exhaustive'

Количество ближайших соседей в X поиск для классификации каждой точки при прогнозировании, заданный как разделенная разделенными запятой парами, состоящая из 'NumNeighbors' и положительное целое значение.

Пример: 'NumNeighbors',3

Типы данных: single | double

Имена переменных предиктора, заданные как строковые массивы уникальных имен или массив ячеек из уникальных векторов символов. Функциональность PredictorNames зависит от способа предоставления обучающих данных.

  • Если вы поставляете X и Y, тогда можно использовать PredictorNames для назначения имен переменным предиктора в X.

    • Порядок имен в PredictorNames должен соответствовать порядку столбцов X. То есть PredictorNames{1} - имя X(:,1), PredictorNames{2} - имя X(:,2)и так далее. Кроме того, size(X,2) и numel(PredictorNames) должно быть равным.

    • По умолчанию PredictorNames является {'x1','x2',...}.

  • Если вы поставляете Tbl, тогда можно использовать PredictorNames выбрать, какие переменные предиктора использовать в обучении. То есть, fitcknn использует только переменные предиктора в PredictorNames и переменной отклика во время обучения.

    • PredictorNames должен быть подмножеством Tbl.Properties.VariableNames и не может включать имя переменной отклика.

    • По умолчанию PredictorNames содержит имена всех переменных предиктора.

    • Хорошей практикой является определение предикторов для обучения с использованием любой из 'PredictorNames' или formula, но не то и другое.

Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

Типы данных: string | cell

Предыдущие вероятности для каждого класса, заданные как разделенная разделенными запятой парами, состоящая из 'Prior' и значение в этой таблице.

ЗначениеОписание
'empirical'Предшествующие вероятности классов являются относительными частотами классов в Y.
'uniform'Все предыдущие вероятности классов равны 1/ K, где K - количество классов.
числовой векторКаждый элемент является классом предыдущей вероятности. Упорядочивайте элементы согласно Mdl.ClassNames или укажите порядок с помощью ClassNames аргумент пары "имя-значение". Программное обеспечение нормализует элементы так, что они суммируются с 1.
структура

Структурный S с двумя полями:

  • S.ClassNames содержит имена классов как переменная того же типа, что и Y.

  • S.ClassProbs содержит вектор соответствующих априорных вероятностей. Программное обеспечение нормализует элементы так, что они суммируются с 1.

Если вы задаете значения для обоих Weights и Priorвеса перенормированы, чтобы суммировать значение предшествующей вероятности в соответствующем классе.

Пример: 'Prior','uniform'

Типы данных: char | string | single | double | struct

Имя переменной отклика, заданное как вектор символов или строковый скаляр.

  • Если вы поставляете Y, тогда можно использовать 'ResponseName' чтобы задать имя для переменной отклика.

  • Если вы поставляете ResponseVarName или formula, тогда вы не можете использовать 'ResponseName'.

Пример: 'ResponseName','response'

Типы данных: char | string

Шкала расстояния, заданная как разделенная разделенными запятой парами, состоящая из 'Scale' и вектор, содержащий неотрицательные скалярные значения с длиной, равной количеству столбцов в X. Каждое различие координат между X и точка запроса масштабируется соответствующим элементом Scale. Этот аргумент действителен только при 'Distance' является 'seuclidean'.

Вы не можете одновременно задать 'Standardize' и любой из 'Scale' или 'Cov'.

Типы данных: single | double

Преобразование счета, заданное как вектор символов, строковый скаляр или указатель на функцию.

В этой таблице результирующие векторы символов и строковые скаляры.

ЗначениеОписание
'doublelogit'1/(1 + e–2x)
'invlogit'журнал (x/( 1 - x))
'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
'logit'1/(1 + ex)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2 x – 1
'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
'symmetriclogit'2/(1 + ex) – 1

Для функции MATLAB или функции, которую вы задаете, используйте указатель на функцию для преобразования счета. Указатель на функцию должен принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).

Пример: 'ScoreTransform','logit'

Типы данных: char | string | function_handle

Флаг для стандартизации предикторов, заданный как разделенная разделенными запятой парами, состоящая из 'Standardize' и true (1) или false (0).

Если вы задаете 'Standardize',true, затем программное обеспечение центрирует и масштабирует каждый столбец данных предиктора (X) средним значением столбца и стандартным отклонением, соответственно.

Программа не стандартизирует категориальные предикторы и выдает ошибку, если все предикторы категоричны.

Вы не можете одновременно задать 'Standardize',1 и любой из 'Scale' или 'Cov'.

Это хорошая практика, чтобы стандартизировать данные предиктора.

Пример: 'Standardize',true

Типы данных: logical

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и числовой вектор положительных значений или имени переменной в Tbl. Программа взвешивает наблюдения в каждой строке X или Tbl с соответствующим значением в Weights. Размер Weights должно равняться количеству строк X или Tbl.

Если вы задаете входные данные как таблицу Tbl, затем Weights может быть именем переменной в Tbl который содержит числовой вектор. В этом случае необходимо задать Weights как вектор символов или строковый скаляр. Для примера, если вектор весов W хранится как Tbl.W, затем укажите его следующим 'W'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая W, как предикторы или реакция при обучении модели.

Программное обеспечение нормализует Weights суммировать до значения предшествующей вероятности в соответствующем классе.

По умолчанию Weights это таковые (n,1), где n количество наблюдений в X или Tbl.

Типы данных: double | single | char | string

Опции перекрестной валидации

свернуть все

Флаг перекрестной проверки, заданный как разделенная разделенными запятой парами, состоящая из 'Crossval' и 'on' или 'off'.

Если вы задаете 'on'затем программное обеспечение реализует 10-кратную перекрестную валидацию.

Чтобы переопределить этот параметр перекрестной проверки, используйте один из следующих аргументов пары "имя-значение": CVPartition, Holdout, KFold, или Leaveout. Чтобы создать перекрестно проверенную модель, можно использовать один аргумент пары "имя-значение" перекрестной валидации только за раз.

Кроме того, перекрестная проверка Mdl позже используя crossval способ.

Пример: 'Crossval','on'

Раздел перекрестной проверки, заданный как cvpartition объект раздела, созданный cvpartition. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5). Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp.

Доля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p, затем программное обеспечение завершает следующие шаги:

  1. Случайный выбор и резервирование p*100% данных в качестве данных валидации и train модели с использованием остальных данных.

  2. Сохраните компактную, обученную модель в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Holdout',0.1

Типы данных: double | single

Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k, затем программное обеспечение завершает следующие шаги:

  1. Случайным образом разделите данные на k наборы.

  2. Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k - 1 комплект.

  3. Сохраните k компактные, обученные модели в k-by-1 вектор камеры в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'KFold',5

Типы данных: single | double

Выходной флаг перекрестной проверки, заданный как 'on' или 'off'. Если вы задаете 'Leaveout','on', затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations свойство модели), программное обеспечение завершает следующие шаги:

  1. Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.

  2. Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Leaveout','on'

Опции оптимизации гипероптимизации параметров управления

свернуть все

Оптимизируемые параметры, заданные как разделенная разделенными запятой парами, состоящая из 'OptimizeHyperparameters' и одно из следующих:

  • 'none' - Не оптимизировать.

  • 'auto' - Использовать {'Distance','NumNeighbors'}.

  • 'all' - Оптимизируйте все подходящие параметры.

  • Строковые массивы или массив ячеек с допустимыми именами параметров.

  • Вектор 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'.

Установите параметры nondefault путем передачи вектора optimizableVariable объекты, которые имеют значения nondefault. Для примера,

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

Передайте params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является журнал ( 1 + потери перекрестной валидации) для регрессии и коэффициент неправильной классификации для классификации. Чтобы управлять итеративным отображением, установите Verbose поле 'HyperparameterOptimizationOptions' аргумент пары "имя-значение". Чтобы управлять графиками, установите ShowPlots поле 'HyperparameterOptimizationOptions' аргумент пары "имя-значение".

Для получения примера смотрите Оптимизацию Установленного Классификатора 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'

Функции сбора данных, имена которых включают per-second не дают воспроизводимых результатов, потому что оптимизация зависит от времени выполнения целевой функции. Функции сбора данных, имена которых включают plus изменять свое поведение при чрезмерной эксплуатации области. Для получения дополнительной информации см. Типы функций приобретения.

'expected-improvement-per-second-plus'
MaxObjectiveEvaluationsМаксимальное количество вычислений целевой функции.30 для 'bayesopt' или 'randomsearch', и вся сетка для 'gridsearch'
MaxTime

Временной предел, заданный как положительный действительный. Предел времени в секундах, что измеряется tic и toc. Время выполнения может превысить MaxTime потому что MaxTime не прерывает вычисления функции.

Inf
NumGridDivisionsДля 'gridsearch', количество значений в каждой размерности. Значение может быть вектором положительных целых чисел, дающих количество значений для каждой размерности, или скаляром, который применяется ко всем размерностям. Это поле игнорируется для категориальных переменных.10
ShowPlotsЛогическое значение, указывающее, показывать ли графики. Если true, это поле строит график наилучшего значения целевой функции относительно числа итерации. Если существует один или два параметра оптимизации и если Optimizer является 'bayesopt', затем ShowPlots также строит график модели целевой функции относительно параметров.true
SaveIntermediateResultsЛогическое значение, указывающее, сохранять ли результаты при Optimizer является 'bayesopt'. Если true, это поле перезаписывает переменную рабочей области с именем 'BayesoptResults' при каждой итерации. Переменная является BayesianOptimization объект.false
Verbose

Отображение в командной строке.

  • 0 - Нет итерационного отображения

  • 1 - Итеративное отображение

  • 2 - Итеративное отображение с дополнительной информацией

Для получения дополнительной информации смотрите bayesopt Verbose аргумент пары "имя-значение".

1
UseParallelЛогическое значение, указывающее, запускать ли байесовскую оптимизацию параллельно, что требует Parallel Computing Toolbox™. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно приводит к воспроизводимым результатам. Для получения дополнительной информации см. «Параллельная байесовская оптимизация».false
Repartition

Логическое значение, указывающее, следует ли повторять перекрестную валидацию при каждой итерации. Если falseОптимизатор использует один раздел для оптимизации.

true обычно дает наиболее устойчивые результаты, потому что эта настройка учитывает шум разбиения. Однако для хороших результатов true требует, по крайней мере, в два раза больше вычислений функции.

false
Используйте не более одного из следующих трех имен полей.
CVPartitionA cvpartition объект, созданный cvpartition.'Kfold',5 если вы не задаете какое-либо поле перекрестной проверки
HoldoutСкаляр в области значений (0,1) представляющий фракцию удержания.
KfoldЦелое число, больше 1.

Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

Типы данных: struct

Выходные аргументы

свернуть все

Обученная k - ближайшая соседняя модель классификации, возвращенная как ClassificationKNN объект модели или ClassificationPartitionedModel перекрестно проверенный объект модели.

Если вы задаете любой из аргументов пары "имя-значение" KFold, Holdout, CrossVal, или CVPartition, затем Mdl является ClassificationPartitionedModel перекрестно проверенный объект модели. В противном случае Mdl является ClassificationKNN объект модели.

Ссылка на свойства Mdl, используйте запись через точку. Для примера, чтобы отобразить метрику расстояния в Командном окне, введите Mdl.Distance.

Подробнее о

свернуть все

Предсказание

ClassificationKNN предсказывает классификацию точки xnew использование процедуры, эквивалентной этому:

  1. Найдите NumNeighbors Точки в набор обучающих данных X которые наиболее близки к xnew.

  2. Найдите NumNeighbors значения отклика Y к этим ближайшим точкам.

  3. Присвойте классификационную метку ynew который имеет самую большую апостериорную вероятность среди значений в Y.

Для получения дополнительной информации смотрите Апостериорная вероятность в predict документация.

Совет

После обучения модели можно сгенерировать код C/C + +, который предсказывает метки для новых данных. Для генерации кода C/C + + требуется MATLAB Coder™. Для получения дополнительной информации смотрите Введение в генерацию кода .

Алгоритмы

  • NaNs или <undefined>s указывает на отсутствующие наблюдения. Следующее описывает поведение fitcknn когда набор данных или веса содержат отсутствующие наблюдения.

    • Если какое-либо значение Y или какой-либо вес отсутствует, тогда fitcknn удаляет эти значения из Y, веса и соответствующие строки X из данных. Программа перенормирует веса до суммы 1.

    • Если вы задаете, чтобы стандартизировать предикторы ('Standardize',1) или стандартизированное евклидово расстояние ('Distance','seuclidean') без шкалы, затем fitcknn удаляет отсутствующие наблюдения из отдельных предикторов перед вычислением среднего и стандартного отклонений. Другими словами, программное обеспечение реализует mean и std с 'omitnan' опция на каждом предикторе.

    • Если вы задаете расстояние Махаланобиса ('Distance','mahalanbois') без своей ковариационной матрицы, затем fitcknn удаляет строки X которые содержат по крайней мере одно отсутствующее значение. Другими словами, программное обеспечение реализует cov с 'omitrows' опция на матрице предикторов X.

  • Предположим, что вы 'Standardize',1.

    • Если вы также задаете Prior или Weightsзатем программное обеспечение учитывает веса наблюдений. В частности, взвешенное среднее значение j предиктора является

      x¯j=Bjwkxjk

      и взвешенное стандартное отклонение

      sj=Bjwk(xjkx¯j),

      где Bj - набор индексов k для которых xjk и wk не отсутствуют.

    • Если вы также задаете 'Distance','mahalanobis' или 'Distance','seuclidean', тогда вы не можете задать Scale или Cov. Вместо этого программное обеспечение:

      1. Вычисляет средства и стандартные отклонения каждого предиктора

      2. Стандартизирует данные с помощью результатов шага 1

      3. Вычисляет значения параметров расстояния с помощью соответствующих значений по умолчанию.

  • Если вы задаете Scale и любой из Prior или Weightsзатем программное обеспечение масштабирует наблюдаемые расстояния на взвешенные стандартные отклонения.

  • Если вы задаете Cov и любой из Prior или Weightsзатем программное обеспечение применяет взвешенную ковариационную матрицу к расстояниям. Другими словами,

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

    где B - набор индексов j для которых xj наблюдения не имеет отсутствующих значений и wj не отсутствует.

Альтернативы

Хотя fitcknn можно обучить многоклассовый классификатор KNN, можно уменьшить многоклассовую задачу обучения до ряда двоичных учащихся KNN с помощью fitcecoc.

Расширенные возможности

Введенный в R2014a