Подгонка k - ближайший соседний классификатор
возвращает k - ближайшую соседнюю модель классификации на основе входных переменных (также известных как предикторы, функции или атрибуты) в таблице Mdl = fitcknn(Tbl,ResponseVarName)Tbl и выход (ответ) Tbl.ResponseVarName.
подходит для модели с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение", с использованием любого из предыдущих синтаксисов. Для примера можно задать алгоритм разрыва связей, метрику расстояния или веса наблюдений.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 равняется
где - вес, сопоставленный с размерностью j.
Задайте функцию хи-квадрат расстояния. Функция расстояния должна:
Взять одну строку X, например, x, и матрица Z.
Сравнение x в каждую строку Z.
Верните вектор D длины , где количество строк Z. Каждый элемент D - расстояние между наблюдением, соответствующим x и наблюдения, соответствующие каждой строке Z.
chiSqrDist = @(x,Z,wt)sqrt((bsxfun(@minus,x,Z).^2)*wt);
Этот пример использует произвольные веса для рисунка.
Обучите классификатор с 3 ближайшими соседями. Это хорошая практика, чтобы стандартизировать некатегориальные данные предиктора.
k = 3; w = [0.3; 0.3; 0.2; 0.2]; KNNMdl = fitcknn(X,Y,'Distance',@(x,Z)chiSqrDist(x,Z,w),... 'NumNeighbors',k,'Standardize',1);
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 |


__________________________________________________________
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 содержит переменную отклика, и необходимо использовать все оставшиеся переменные в Tbl в качестве предикторов, затем задайте переменную отклика при помощи ResponseVarName.
Если Tbl содержит переменную отклика, и необходимо использовать только подмножество остальных переменных в Tbl в качестве предикторов задайте формулу при помощи formula.
Если Tbl не содержит переменную отклика, затем задает переменную отклика при помощи Y. Длина переменной отклика и количество строк в Tbl должно быть равным.
Типы данных: table
ResponseVarName - Имя переменной откликаTblИмя переменной отклика, заданное как имя переменной в Tbl.
Вы должны задать ResponseVarName как вектор символов или строковый скаляр. Для примера, если переменная отклика Y хранится как Tbl.Y, затем укажите его следующим 'Y'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Y, как предикторы при обучении модели.
Переменная отклика должна быть категориальными символьными или строковыми массивами; логический или числовой вектор; или массив ячеек из векторов символов. Если Y является символьным массивом, тогда каждый элемент переменной отклика должен соответствовать одной строке массива.
Хорошей практикой является определение порядка классов при помощи ClassNames аргумент имя-значение.
Типы данных: char | string
formula - Объяснительная модель переменной отклика и подмножества переменных предиктораОбъяснительная модель переменной отклика и подмножества переменных предиктора, заданная в виде вектора символов или строкового скаляра в форме 'Y~x1+x2+x3'. В этой форме Y представляет переменную отклика, и x1, x2, и x3 представляют переменные предиктора.
Чтобы задать подмножество переменных в Tbl в качестве предикторов для настройки модели используйте формулу. Если вы задаете формулу, то программное обеспечение не использует никаких переменных в Tbl которые не появляются в formula.
Имена переменных в формуле должны быть обоими именами переменных в Tbl (Tbl.Properties.VariableNames) и действительный MATLAB® идентификаторы. Можно проверить имена переменных в Tbl при помощи isvarname функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName функция.
Типы данных: char | string
Y - Метки классовМетки класса, заданные как категориальные символьные или строковые массивы, логический или числовой вектор или массив ячеек из векторов символов. Каждая строка Y представляет классификацию соответствующей строки X.
Программное обеспечение рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Y чтобы быть отсутствующими значениями. Следовательно, программное обеспечение не обучается, используя наблюдения с отсутствующим ответом.
Типы данных: categorical | char | string | logical | single | double | cell
X - Данные предиктораДанные предиктора, заданные как числовая матрица.
Каждая строка соответствует одному наблюдению (также известному как образец или пример), и каждый столбец соответствует одной переменной предиктора (также известной как функция).
Длина Y и количество строк X должно быть равным.
Чтобы задать имена предикторов в порядке их внешнего вида в X, используйте PredictorNames аргумент пары "имя-значение".
Типы данных: double | single
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
'NumNeighbors',3,'NSMethod','exhaustive','Distance','minkowski' задает классификатор для трех ближайших соседей, используя метод поиска ближайшего соседа и метрику Минковского.Примечание
Вы не можете использовать какой-либо аргумент пары "имя-значение" перекрестной проверки наряду с 'OptimizeHyperparameters' аргумент пары "имя-значение". Можно изменить перекрестную валидацию для 'OptimizeHyperparameters' только при помощи 'HyperparameterOptimizationOptions' аргумент пары "имя-значение".
'BreakTies' - Алгоритм разрыва связей'smallest' (по умолчанию) | 'nearest' | 'random'Алгоритм разрыва связей, используемый predict метод, если несколько классов имеют одинаковую наименьшую стоимость, заданную как разделенная разделенными запятой парами, состоящая из 'BreakTies' и одно из следующих:
'smallest' - Используйте наименьший индекс среди связанных групп.
'nearest' - Используйте класс с ближайшим соседом среди связанных групп.
'random' - Используйте случайный tiebreaker среди связанных групп.
По умолчанию связи возникают, когда несколько классов имеют одинаковое количество ближайших точек среди K ближайшие соседи.
Пример: 'BreakTies','nearest'
'BucketSize' - Максимальное количество точек данных в узле50 (по умолчанию) | положительное целое значениеМаксимальное количество точек данных в конечном узле kd-дерева, заданное как разделенная разделенными запятой парами, состоящая из 'BucketSize' и положительное целое значение. Этот аргумент значим только тогда, когда NSMethod является 'kdtree'.
Пример: 'BucketSize',40
Типы данных: single | double
'CategoricalPredictors' - Категориальный флаг предиктора[] | 'all'Категориальный флаг предиктора, заданный как разделенная разделенными запятой парами, состоящая из 'CategoricalPredictors' и одно из следующих:
'all' - Все предикторы категоричны.
[] - Никакие предикторы не являются категориальными.
Данные предиктора для fitcknn должны быть либо непрерывными, либо категориальными.
Если данные предиктора находятся в таблице (Tbl), fitcknn принимает, что переменная категориальна, если это логический вектор, категориальный вектор, символьный массив, строковые массивы или массив ячеек из векторов символов. Если Tbl включает как непрерывные, так и категориальные значения, тогда необходимо задать значение 'CategoricalPredictors' так что fitcknn может определить, как обработать все предикторы как непрерывные или категориальные переменные.
Если данные предиктора являются матрицей (X), fitcknn принимает, что все предикторы непрерывны. Чтобы идентифицировать все предикторы в X как категориальные, задайте 'CategoricalPredictors' как 'all'.
Когда вы задаете CategoricalPredictors на 'all', значение по умолчанию Distance является 'hamming'.
Пример: 'CategoricalPredictors','all'
'ClassNames' - Имена классов, используемых для обученияИмена классов, используемых для обучения, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов. 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' и одно из следующих:
Квадратная матрица, где 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' - Ковариационная матрицаcov(X,'omitrows') (по умолчанию) | положительно определенную матрицу скалярных значенийКовариационная матрица, заданная как разделенная разделенными запятой парами, состоящая из 'Cov' и положительная определенная матрица скалярных значений, представляющих ковариационную матрицу при вычислении расстояния Махаланобиса. Этот аргумент действителен только при 'Distance' является 'mahalanobis'.
Вы не можете одновременно задать 'Standardize' и любой из 'Scale' или 'Cov'.
Типы данных: single | double
'Distance' - Метрика расстояния'cityblock' | 'chebychev' | 'correlation' | 'cosine' | 'euclidean' | 'hamming' | указатель на функцию |...Метрика расстояния, заданная как разделенная разделенными запятой парами, состоящая из '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' | Один минус выборки корреляции ранга Спирмана между наблюдениями (рассматриваются как последовательности значений). |
|
Указатель на функцию расстояния. function D2 = distfun(ZI,ZJ) % calculation of distance ...
|
Если вы задаете CategoricalPredictors как 'all', тогда метрика расстояния по умолчанию 'hamming'. В противном случае метрика расстояния по умолчанию является 'euclidean'.
Определения см. в разделе Метрики расстояния.
Пример: 'Distance','minkowski'
Типы данных: char | string | function_handle
'DistanceWeight' - Функция взвешивания расстояний'equal' (по умолчанию) | 'inverse' | 'squaredinverse' | указатель на функциюФункция взвешивания расстояния, заданная как разделенная разделенными запятой парами, состоящая из 'DistanceWeight' и указатель на функцию или одно из значений в этой таблице.
| Значение | Описание |
|---|---|
'equal' | Без взвешивания |
'inverse' | Вес 1/расстояние |
'squaredinverse' | Вес 1/расстояние2 |
| fcn является функцией, которая принимает матрицу неотрицательных расстояний и возвращает матрицу того же размера, содержащую неотрицательные веса расстояний. Для примера, 'squaredinverse' эквивалентно @(d)d.^(-2). |
Пример: 'DistanceWeight','inverse'
Типы данных: char | string | function_handle
'Exponent' - показатель расстояния Минковского2 (по умолчанию) | положительное скалярное значениеПоказатель расстояния Минковского, заданный как разделенная разделенными запятой парами, состоящая из 'Exponent' и положительная скалярная величина значение. Этот аргумент действителен только при 'Distance' является 'minkowski'.
Пример: 'Exponent',3
Типы данных: single | double
'IncludeTies' - Флаг включения галстукаfalse (по умолчанию) | trueФлаг включения галстука, заданный как разделенная разделенными запятой парами, состоящая из 'IncludeTies' и логическое значение, указывающее, predict ли включает все соседи, значения расстояния которых равны Kсамое маленькое расстояние. Если IncludeTies является true, predict включает всех этих соседей. В противном случае predict использует точно K соседи.
Пример: 'IncludeTies',true
Типы данных: logical
'NSMethod' - Метод поиска по ближайшему соседу'kdtree' | 'exhaustive'Метод поиска по ближайшему соседу, заданный как разделенная разделенными запятой парами, состоящая из 'NSMethod' и 'kdtree' или 'exhaustive'.
'kdtree' - Создает и использует kd-дерево для поиска ближайших соседей. 'kdtree' действителен, когда метрика расстояния является одной из следующих:
'euclidean'
'cityblock'
'minkowski'
'chebychev'
'exhaustive' - Использует алгоритм исчерпывающего поиска. При предсказании класса новой точки xnewпрограмма вычисляет значения расстояния от всех точек в X на xnew найти ближайших соседей.
Значение по умолчанию является 'kdtree' когда X имеет 10 или меньше столбцов, X не является разреженным или gpuArray, и метрика расстояния является 'kdtree' тип; в противном случае 'exhaustive'.
Пример: 'NSMethod','exhaustive'
'NumNeighbors' - Количество ближайших соседей для поиска1 (по умолчанию) | положительное целое значениеКоличество ближайших соседей в 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' (по умолчанию) | 'uniform' | вектор скалярных значений | структурыПредыдущие вероятности для каждого класса, заданные как разделенная разделенными запятой парами, состоящая из 'Prior' и значение в этой таблице.
| Значение | Описание |
|---|---|
'empirical' | Предшествующие вероятности классов являются относительными частотами классов в Y. |
'uniform' | Все предыдущие вероятности классов равны 1/ K, где K - количество классов. |
| числовой вектор | Каждый элемент является классом предыдущей вероятности. Упорядочивайте элементы согласно Mdl.ClassNames или укажите порядок с помощью ClassNames аргумент пары "имя-значение". Программное обеспечение нормализует элементы так, что они суммируются с 1. |
| структура | Структурный
|
Если вы задаете значения для обоих Weights и Priorвеса перенормированы, чтобы суммировать значение предшествующей вероятности в соответствующем классе.
Пример: 'Prior','uniform'
Типы данных: char | string | single | double | struct
'ResponseName' - Имя переменной отклика'Y' (по умолчанию) | символьный вектор | строковый скалярИмя переменной отклика, заданное как вектор символов или строковый скаляр.
Если вы поставляете Y, тогда можно использовать 'ResponseName' чтобы задать имя для переменной отклика.
Если вы поставляете ResponseVarName или formula, тогда вы не можете использовать 'ResponseName'.
Пример: 'ResponseName','response'
Типы данных: char | string
'Scale' - Шкала расстоянияstd(X,'omitnan') (по умолчанию) | вектор неотрицательных скалярных значенийШкала расстояния, заданная как разделенная разделенными запятой парами, состоящая из 'Scale' и вектор, содержащий неотрицательные скалярные значения с длиной, равной количеству столбцов в X. Каждое различие координат между X и точка запроса масштабируется соответствующим элементом Scale. Этот аргумент действителен только при 'Distance' является 'seuclidean'.
Вы не можете одновременно задать 'Standardize' и любой из 'Scale' или 'Cov'.
Типы данных: single | double
'ScoreTransform' - Преобразование счета'none' (по умолчанию) | 'doublelogit' | 'invlogit' | 'ismax' | 'logit' | указатель на функцию |...Преобразование счета, заданное как вектор символов, строковый скаляр или указатель на функцию.
В этой таблице результирующие векторы символов и строковые скаляры.
| Значение | Описание |
|---|---|
'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' | 2 x – 1 |
'symmetricismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1 |
'symmetriclogit' | 2/(1 + e–x) – 1 |
Для функции MATLAB или функции, которую вы задаете, используйте указатель на функцию для преобразования счета. Указатель на функцию должен принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).
Пример: 'ScoreTransform','logit'
Типы данных: char | string | function_handle
'Standardize' - Флаг для стандартизации предикторовfalse (по умолчанию) | trueФлаг для стандартизации предикторов, заданный как разделенная разделенными запятой парами, состоящая из 'Standardize' и true (1) или false (0).
Если вы задаете 'Standardize',true, затем программное обеспечение центрирует и масштабирует каждый столбец данных предиктора (X) средним значением столбца и стандартным отклонением, соответственно.
Программа не стандартизирует категориальные предикторы и выдает ошибку, если все предикторы категоричны.
Вы не можете одновременно задать 'Standardize',1 и любой из 'Scale' или 'Cov'.
Это хорошая практика, чтобы стандартизировать данные предиктора.
Пример: 'Standardize',true
Типы данных: logical
'Weights' - Веса наблюденийTblВеса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из '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' - флаг перекрестной валидации'off' (по умолчанию) | 'on'Флаг перекрестной проверки, заданный как разделенная разделенными запятой парами, состоящая из 'Crossval' и 'on' или 'off'.
Если вы задаете 'on'затем программное обеспечение реализует 10-кратную перекрестную валидацию.
Чтобы переопределить этот параметр перекрестной проверки, используйте один из следующих аргументов пары "имя-значение": CVPartition, Holdout, KFold, или Leaveout. Чтобы создать перекрестно проверенную модель, можно использовать один аргумент пары "имя-значение" перекрестной валидации только за раз.
Кроме того, перекрестная проверка Mdl позже используя crossval способ.
Пример: 'Crossval','on'
'CVPartition' - Раздел перекрестной проверки[] (по умолчанию) | cvpartition Объект разделаРаздел перекрестной проверки, заданный как cvpartition объект раздела, созданный cvpartition. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.
Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5). Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp.
'Holdout' - Доля данных для валидации отключенияДоля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p, затем программное обеспечение завершает следующие шаги:
Случайный выбор и резервирование p*100% данных в качестве данных валидации и train модели с использованием остальных данных.
Сохраните компактную, обученную модель в Trained свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.
Пример: 'Holdout',0.1
Типы данных: double | single
'KFold' - Количество складок10 (по умолчанию) | положительное целое значение, больше 1Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k, затем программное обеспечение завершает следующие шаги:
Случайным образом разделите данные на k наборы.
Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k - 1 комплект.
Сохраните k компактные, обученные модели в k-by-1 вектор камеры в Trained свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.
Пример: 'KFold',5
Типы данных: single | double
'Leaveout' - Оставьте один из флагов перекрестной проверки'off' (по умолчанию) | 'on'Выходной флаг перекрестной проверки, заданный как 'on' или 'off'. Если вы задаете 'Leaveout','on', затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations свойство модели), программное обеспечение завершает следующие шаги:
Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.
Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.
Пример: 'Leaveout','on'
'OptimizeHyperparameters' - Параметры для оптимизации'none' (по умолчанию) | 'auto' | 'all' | строковые массивы или массив ячеек из допустимых имен параметров | вектор optimizableVariable объектыОптимизируемые параметры, заданные как разделенная разделенными запятой парами, состоящая из 'OptimizeHyperparameters' и одно из следующих:
'none' - Не оптимизировать.
'auto' - Использовать {'Distance','NumNeighbors'}.
'all' - Оптимизируйте все подходящие параметры.
Строковые массивы или массив ячеек с допустимыми именами параметров.
Вектор optimizableVariable объекты, как правило, выходные данные hyperparameters.
Оптимизация пытается минимизировать потери перекрестной валидации (ошибка) для fitcknn путем изменения параметров. Для получения информации о потерях при перекрестной проверке (хотя и в другом контексте), смотрите Классификационные потери. Чтобы контролировать тип перекрестной валидации и другие аспекты оптимизации, используйте HyperparameterOptimizationOptions Пара "имя-значение".
Примечание
'OptimizeHyperparameters' значения переопределяют все значения, которые вы устанавливаете, используя другие аргументы пары "имя-значение". Для примера установка 'OptimizeHyperparameters' на 'auto' вызывает 'auto' значения для применения.
Подходящие параметры для fitcknn являются:
Distance — fitcknn поиск среди 'cityblock', 'chebychev', 'correlation', 'cosine', 'euclidean', 'hamming', 'jaccard', 'mahalanobis', 'minkowski', 'seuclidean', и 'spearman'.
DistanceWeight — fitcknn поиск среди 'equal', 'inverse', и 'squaredinverse'.
Exponent — fitcknn поиск среди положительных вещественных значений, по умолчанию в области значений [0.5,3].
NumNeighbors — fitcknn поиск среди положительных целочисленных значений, по умолчанию логарифмический в области значений [1, max(2,round(NumObservations/2))].
Standardize — fitcknn ищет среди значений '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' - Опции для оптимизацииОпции оптимизации, заданные как разделенная разделенными запятой парами, состоящая из 'HyperparameterOptimizationOptions' и структуру. Этот аргумент изменяет эффект OptimizeHyperparameters аргумент пары "имя-значение". Все поля в структуре являются необязательными.
| Имя поля | Значения | Дефолт |
|---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
Функции сбора данных, имена которых включают | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | Максимальное количество вычислений целевой функции. | 30 для 'bayesopt' или 'randomsearch', и вся сетка для 'gridsearch' |
MaxTime | Временной предел, заданный как положительный действительный. Предел времени в секундах, что измеряется | Inf |
NumGridDivisions | Для 'gridsearch', количество значений в каждой размерности. Значение может быть вектором положительных целых чисел, дающих количество значений для каждой размерности, или скаляром, который применяется ко всем размерностям. Это поле игнорируется для категориальных переменных. | 10 |
ShowPlots | Логическое значение, указывающее, показывать ли графики. Если true, это поле строит график наилучшего значения целевой функции относительно числа итерации. Если существует один или два параметра оптимизации и если Optimizer является 'bayesopt', затем ShowPlots также строит график модели целевой функции относительно параметров. | true |
SaveIntermediateResults | Логическое значение, указывающее, сохранять ли результаты при Optimizer является 'bayesopt'. Если true, это поле перезаписывает переменную рабочей области с именем 'BayesoptResults' при каждой итерации. Переменная является BayesianOptimization объект. | false |
Verbose | Отображение в командной строке.
Для получения дополнительной информации смотрите | 1 |
UseParallel | Логическое значение, указывающее, запускать ли байесовскую оптимизацию параллельно, что требует Parallel Computing Toolbox™. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно приводит к воспроизводимым результатам. Для получения дополнительной информации см. «Параллельная байесовская оптимизация». | false |
Repartition | Логическое значение, указывающее, следует ли повторять перекрестную валидацию при каждой итерации. Если
| false |
| Используйте не более одного из следующих трех имен полей. | ||
CVPartition | A cvpartition объект, созданный cvpartition. | 'Kfold',5 если вы не задаете какое-либо поле перекрестной проверки |
Holdout | Скаляр в области значений (0,1) представляющий фракцию удержания. | |
Kfold | Целое число, больше 1. | |
Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
Типы данных: struct
Mdl - Обученная k - ближайшая соседняя классификационная модельClassificationKNN объект модели | ClassificationPartitionedModel перекрестно проверенный объект моделиОбученная k - ближайшая соседняя модель классификации, возвращенная как ClassificationKNN объект модели или ClassificationPartitionedModel перекрестно проверенный объект модели.
Если вы задаете любой из аргументов пары "имя-значение" KFold, Holdout, CrossVal, или CVPartition, затем Mdl является ClassificationPartitionedModel перекрестно проверенный объект модели. В противном случае Mdl является ClassificationKNN объект модели.
Ссылка на свойства Mdl, используйте запись через точку. Для примера, чтобы отобразить метрику расстояния в Командном окне, введите Mdl.Distance.
ClassificationKNN предсказывает классификацию точки xnew использование процедуры, эквивалентной этому:
Найдите NumNeighbors Точки в набор обучающих данных X которые наиболее близки к xnew.
Найдите NumNeighbors значения отклика Y к этим ближайшим точкам.
Присвойте классификационную метку 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 предиктора является
и взвешенное стандартное отклонение
где Bj - набор индексов k для которых xjk и wk не отсутствуют.
Если вы также задаете 'Distance','mahalanobis' или 'Distance','seuclidean', тогда вы не можете задать Scale или Cov. Вместо этого программное обеспечение:
Вычисляет средства и стандартные отклонения каждого предиктора
Стандартизирует данные с помощью результатов шага 1
Вычисляет значения параметров расстояния с помощью соответствующих значений по умолчанию.
Если вы задаете Scale и любой из Prior или Weightsзатем программное обеспечение масштабирует наблюдаемые расстояния на взвешенные стандартные отклонения.
Если вы задаете Cov и любой из Prior или Weightsзатем программное обеспечение применяет взвешенную ковариационную матрицу к расстояниям. Другими словами,
где B - набор индексов j для которых xj наблюдения не имеет отсутствующих значений и wj не отсутствует.
Хотя fitcknn можно обучить многоклассовый классификатор KNN, можно уменьшить многоклассовую задачу обучения до ряда двоичных учащихся KNN с помощью fitcecoc.
Чтобы выполнить параллельную оптимизацию гипероптимизации параметров управления, используйте 'HyperparameterOptimizationOptions', struct('UseParallel',true) аргумент имя-значение в вызове этой функции.
Для получения дополнительной информации об оптимизации параллельной гипероптимизации параметров управления смотрите Parallel Bayesian Optimization.
Общие сведения о параллельных вычислениях см. в разделе Запуск функций MATLAB с поддержкой автоматических параллелей (Parallel Computing Toolbox).
Указания и ограничения по применению:
По умолчанию, fitcknn использует исчерпывающий алгоритм поиска по ближайшему соседу для gpuArray входные параметры.
Вы не можете задать имя-значение аргумента 'NSMethod' как 'kdtree'.
Вы не можете задать имя-значение аргумента 'Distance' как указатель на функцию.
fitcknn возвращает классификационную модель, оснащенную входными параметрами массива GPU только в этих случаях:
Входной параметр X является gpuArray.
Входной параметр Tbl содержит gpuArray элементы.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
ClassificationKNN | ClassificationPartitionedModel | fitcecoc | fitcensemble | predict | templateKNN
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.