exponenta event banner

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 в окне Рабочая область (Workspace). Откроется редактор переменных.

Обучите 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;

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

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

По умолчанию связи возникают, когда несколько классов имеют одинаковое количество ближайших точек среди 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 если его истинный класс 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' и допустимое имя метрики расстояния или дескриптор функции. Имена допустимых метрик расстояния зависят от выбора метода поиска соседей (см. 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около-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/дистанцие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'log (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

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

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

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

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

По умолчанию Weights является ones(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.

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

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

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

  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-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', '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];

Проход params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение отображается в командной строке, а графики отображаются в соответствии с количеством гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является log ( 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Логическое значение, указывающее, выполнять ли байесовскую оптимизацию параллельно, что требует 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 + + требуется Coder™ MATLAB. Дополнительные сведения см. в разделе Введение в создание кода .

Алгоритмы

  • 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 (xjk x vetj),

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

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

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

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

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

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

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

    Cov = Bwj (∑Bwj) 2−  Bwj2Bwj (xj−x¯) (xj−x¯),

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

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

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

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

Представлен в R2014a