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