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 array
    {'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 в окне Workspace. Это открывает Редактора переменных.

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

Загрузите ирисовый набор данных Фишера.

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

Расстояние хи-квадрата между j-dimensional точками 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 |      1.0856 |    0.026667 |    0.026667 |           30 |       cosine |
|    2 | Accept |        0.04 |     0.37829 |    0.026667 |    0.027197 |            2 |    chebychev |
|    3 | Accept |     0.19333 |     0.16628 |    0.026667 |    0.030324 |            1 |      hamming |
|    4 | Accept |     0.33333 |     0.24914 |    0.026667 |    0.033313 |           31 |     spearman |
|    5 | Best   |        0.02 |     0.24626 |        0.02 |    0.020648 |            6 |       cosine |
|    6 | Accept |    0.073333 |     0.11348 |        0.02 |    0.023082 |            1 |  correlation |
|    7 | Accept |        0.06 |     0.10371 |        0.02 |    0.020875 |            2 |    cityblock |
|    8 | Accept |        0.04 |     0.09824 |        0.02 |    0.020622 |            1 |    euclidean |
|    9 | Accept |        0.24 |     0.16255 |        0.02 |    0.020562 |           74 |  mahalanobis |
|   10 | Accept |        0.04 |     0.11495 |        0.02 |    0.020649 |            1 |    minkowski |
|   11 | Accept |    0.053333 |     0.14085 |        0.02 |    0.020722 |            1 |   seuclidean |
|   12 | Accept |     0.19333 |    0.095791 |        0.02 |    0.020701 |            1 |      jaccard |
|   13 | Accept |        0.04 |      0.1028 |        0.02 |    0.029203 |            1 |       cosine |
|   14 | Accept |        0.04 |     0.10623 |        0.02 |    0.031888 |           75 |       cosine |
|   15 | Accept |        0.04 |     0.10067 |        0.02 |    0.020076 |            1 |       cosine |
|   16 | Accept |    0.093333 |     0.10411 |        0.02 |    0.020073 |           75 |    euclidean |
|   17 | Accept |    0.093333 |     0.10371 |        0.02 |     0.02007 |           75 |    minkowski |
|   18 | Accept |         0.1 |     0.13618 |        0.02 |    0.020061 |           75 |    chebychev |
|   19 | Accept |     0.15333 |     0.10557 |        0.02 |    0.020044 |           75 |   seuclidean |
|   20 | Accept |         0.1 |     0.11482 |        0.02 |    0.020044 |           75 |    cityblock |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | NumNeighbors |     Distance |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|   21 | Accept |    0.033333 |    0.098264 |        0.02 |    0.020046 |           75 |  correlation |
|   22 | Accept |    0.033333 |     0.10091 |        0.02 |     0.02656 |            9 |       cosine |
|   23 | Accept |    0.033333 |      0.1074 |        0.02 |     0.02854 |            9 |       cosine |
|   24 | Accept |        0.02 |     0.10515 |        0.02 |    0.028607 |            1 |    chebychev |
|   25 | Accept |        0.02 |    0.097571 |        0.02 |    0.022264 |            1 |    chebychev |
|   26 | Accept |        0.02 |     0.10845 |        0.02 |    0.021439 |            1 |    chebychev |
|   27 | Accept |        0.02 |     0.11598 |        0.02 |    0.020999 |            1 |    chebychev |
|   28 | Accept |     0.66667 |    0.095625 |        0.02 |    0.020008 |           75 |      hamming |
|   29 | Accept |        0.04 |    0.094964 |        0.02 |    0.020008 |           12 |  correlation |
|   30 | Best   |    0.013333 |     0.10833 |    0.013333 |    0.013351 |            6 |    euclidean |

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

Best observed feasible point:
    NumNeighbors    Distance 
    ____________    _________

         6          euclidean

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

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

         6          euclidean

Estimated objective function value = 0.013351
Estimated function evaluation time = 0.13092
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 представляет переменную отклика и X1x2 , и X3 представляйте переменные предикторы.

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

Имена переменных в формуле должны быть оба именами переменных в Tbl (Tbl.Properties.VariableNames) и допустимые идентификаторы MATLAB®.

Можно проверить имена переменных в Tbl при помощи isvarname функция. Следующий код возвращает логический 1 TRUE) для каждой переменной, которая имеет допустимое имя переменной.

cellfun(@isvarname,Tbl.Properties.VariableNames)
Если имена переменных в Tbl не допустимы, затем преобразуют их при помощи matlab.lang.makeValidName функция.
Tbl.Properties.VariableNames = matlab.lang.makeValidName(Tbl.Properties.VariableNames);

Типы данных: 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' — Используйте случайное дополнительное время среди связанных групп.

По умолчанию связи происходят, когда несколько классов имеют то же количество самых близких точек среди 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' и категориальное, символ, или массив строк, логический или числовой вектор или массив ячеек из символьных векторов. ClassNames должен иметь совпадающий тип данных как Y.

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

Используйте ClassNames к:

  • Закажите классы во время обучения.

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

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

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

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

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

Стоимость misclassification точки, заданной как разделенная запятой пара, состоящая из 'Cost' и одно из следующего:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для определений смотрите Метрики Расстояния.

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

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

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

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

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

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

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

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

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

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

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

Типы данных: логический

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

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

    • 'euclidean'

    • 'cityblock'

    • 'minkowski'

    • 'chebychev'

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

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

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

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

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

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

Имена переменного предиктора, заданные как разделенная запятой пара, состоящая из 'PredictorNames' и массив строк уникальных имен или массив ячеек уникальных векторов символов. Функциональность '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

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

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

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

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

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

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

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

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

Выиграйте преобразование, заданное как разделенная запятой пара, состоящая из 'ScoreTransform' и вектор символов, представьте в виде строки скаляр или указатель на функцию.

Эта таблица суммирует доступные векторы символов и скаляры строки.

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

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

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

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

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

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

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

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

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

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

Типы данных: логический

Веса наблюдения, заданные как разделенная запятой пара, состоящая из '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. Объект раздела задает тип перекрестной проверки и индексации для наборов обучения и валидации.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. Сохраните n компактные, обученные модели в ячейках n-by-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'Корреляция, '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];

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

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

Для примера смотрите, Оптимизируют Подходящий Классификатор KNN.

Пример: 'auto'

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

Имя поляЗначенияЗначение по умолчанию
Optimizer
  • 'bayesopt' — Используйте Байесовую оптимизацию. Внутренне, эта установка вызывает bayesopt.

  • 'gridsearch' — Используйте поиск сетки с NumGridDivisions значения на размерность.

  • 'randomsearch' — Поиск наугад среди MaxObjectiveEvaluations 'points'.

'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
Используйте не больше, чем одни из следующих трех имен полей.
CVPartitioncvpartition объект, как создано 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 удаляет недостающие наблюдения из отдельных предикторов прежде, чем вычислить среднее и стандартное отклонение. Другими словами, программное обеспечение реализует nanmean и nanstd на каждом предикторе.

    • Если вы задаете расстояние Mahalanobis ('Distance','mahalanbois') без его ковариационной матрицы, затем fitcknn удаляет строки X это содержит по крайней мере одно отсутствующее значение. Другими словами, программное обеспечение реализует nancov на матрице предиктора 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