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


Обучите k-ближайший классификатор соседей, используя расстояние хи-квадрат.
Загрузите набор данных радужки Фишера.
load fisheriris X = meas; % Predictors Y = species; % Response
Расстояние хи-квадрат между j-мерными точками x и z равно
xj-zj) 2,
где - вес, связанный с размерностью 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;Найдите гиперпараметры, которые минимизируют пятикратные потери при перекрестной проверке, используя автоматическую оптимизацию гиперпараметров.
Для воспроизводимости задайте случайное начальное число и используйте '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' - Использовать случайный тайбрейкер среди связанных групп.
По умолчанию связи возникают, когда несколько классов имеют одинаковое количество ближайших точек среди 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 если его истинный класс 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' и допустимое имя метрики расстояния или дескриптор функции. Имена допустимых метрик расстояния зависят от выбора метода поиска соседей (см. 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' | 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' - Флаг для стандартизации предикторов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 является ones(, где 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.
Пример: Предположим, что вы создаете случайный раздел для пятикратной перекрестной проверки 500 наблюдений с помощью cvp = cvpartition(500,'KFold',5). Затем можно указать модель с перекрестной проверкой с помощью 'CVPartition',cvp.
'Holdout' - Доля данных для проверки отсутствияДоля данных, используемых для проверки удержания, заданная как скалярное значение в диапазоне (0,1). При указании 'Holdout',pзатем программное обеспечение выполняет следующие действия:
Случайный выбор и резервирование p*100% данных в качестве данных проверки и обучение модели с использованием остальных данных.
Храните компактную обучаемую модель в 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-by-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'.
Установка параметров, не используемых по умолчанию, путем передачи вектора optimizableVariable объекты, не имеющие значений по умолчанию. Например,
load fisheriris params = hyperparameters('fitcknn',meas,species); params(1).Range = [1,20];
Проход params как значение OptimizeHyperparameters.
По умолчанию итеративное отображение отображается в командной строке, а графики отображаются в соответствии с количеством гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является log ( 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 | Логическое значение, указывающее, выполнять ли байесовскую оптимизацию параллельно, что требует 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 + + требуется 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 равно
и взвешенное стандартное отклонение
vetj),
где Bj - набор индексов k, для которых xjk и wk не отсутствуют.
Если вы также установили 'Distance','mahalanobis' или 'Distance','seuclidean', то вы не можете указать Scale или Cov. Вместо этого программное обеспечение:
Вычисляет средние и стандартные отклонения каждого предиктора
Стандартизация данных с использованием результатов шага 1
Вычисляет значения параметров расстояния с использованием соответствующих значений по умолчанию.
При указании Scale и любой из Prior или Weightsзатем программа масштабирует наблюдаемые расстояния по взвешенным стандартным отклонениям.
При указании Cov и любой из Prior или Weights, то программное обеспечение применяет матрицу взвешенной ковариации к расстояниям. Другими словами,
(xj−x¯),
где B - набор индексов j, для которых наблюдение xj не имеет отсутствующих значений и wj не отсутствует.
Хотя fitcknn может обучить мультиклассный классификатор KNN, можно уменьшить проблему мультиклассного обучения до серии двоичных учеников KNN, используя fitcecoc.
Чтобы выполнить параллельную оптимизацию гиперпараметров, используйте 'HyperparameterOptimizationOptions', struct('UseParallel',true) аргумент name-value в вызове этой функции.
Дополнительные сведения об оптимизации параллельных гиперпараметров см. в разделе Параллельная байесовская оптимизация.
Общие сведения о параллельных вычислениях см. в разделе Запуск функций MATLAB с автоматической параллельной поддержкой (панель инструментов параллельных вычислений).
Примечания и ограничения по использованию:
По умолчанию fitcknn использует исчерпывающий алгоритм поиска ближайшего соседа для gpuArray входные аргументы.
Нельзя указать аргумент имя-значение 'NSMethod' как 'kdtree'.
Нельзя указать аргумент имя-значение 'Distance' как дескриптор функции.
fitcknn возвращает классификационную модель, снабженную входными аргументами массива GPU, только в следующих случаях:
Входной аргумент X является gpuArray.
Входной аргумент Tbl содержит gpuArray элементы.
Дополнительные сведения см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
ClassificationKNN | ClassificationPartitionedModel | fitcecoc | fitcensemble | predict | templateKNN
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.