ClassificationKNN

k - ближайшая соседняя классификация

Описание

ClassificationKNN - модель классификации по ближайшему соседу, в которой можно изменить как метрику расстояния, так и количество ближайших соседей. Потому что ClassificationKNN классификатор хранит обучающие данные, можно использовать модель для вычисления предсказаний реституции. Кроме того, используйте модель для классификации новых наблюдений с помощью predict способ.

Создание

Создайте ClassificationKNN модель с использованием fitcknn.

Свойства

расширить все

Свойства KNN

Алгоритм разрыва связей, используемый predict если несколько классов имеют наименьшую стоимость, заданную как один из следующих:

  • 'smallest' - Используйте наименьший индекс среди связанных групп.

  • 'nearest' - Используйте класс с ближайшим соседом среди связанных групп.

  • 'random' - Используйте случайный tiebreaker среди связанных групп.

По умолчанию связи возникают, когда несколько классов имеют одинаковое количество ближайших точек среди k ближайших соседей. BreakTies применяется, когда IncludeTies является false.

Изменение BreakTies использование записи через точку: mdl.BreakTies = newBreakTies.

Метрика расстояния, заданная как вектор символов или указатель на функцию. Допустимые значения зависят от 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, установите DistParameter свойство mdl использование записи через точку.
'minkowski'Расстояние Минковского. Экспонента по умолчанию 2. Чтобы задать другую экспоненту, задайте DistParameter свойство mdl использование записи через точку.
'seuclidean'Стандартизированное евклидово расстояние. Каждое различие координат между X и точка запроса масштабируется, что означает деление на значение шкалы S. Значение по умолчанию S - стандартное отклонение, вычисленное из X,   S = std(X,'omitnan'). Чтобы задать другое значение для S, установите DistParameter свойство mdl использование записи через точку.
'spearman'Один минус выборки корреляции ранга Спирмана между наблюдениями (рассматриваются как последовательности значений).
distfun

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

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

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

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

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

Для получения дополнительной информации см. «Метрики расстояния».

Изменение Distance использование записи через точку: mdl.Distance = newDistance.

Если NSMethod является 'kdtree'Для изменения можно использовать запись через точку Distance только для метрик 'cityblock', 'chebychev', 'euclidean', и 'minkowski'.

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

Функция взвешивания расстояния, заданная в качестве одного из значений в этой таблице.

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

Изменение DistanceWeight использование записи через точку: mdl.DistanceWeight = newDistanceWeight.

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

Параметр для метрики расстояния, заданный как одно из значений, описанных в этой таблице.

Метрика расстоянияПараметр
'mahalanobis'Положительно определенная ковариационная матрица C
'minkowski'Показатель расстояния Минковского, положительной скалярной величины
'seuclidean'Вектор положительных значений шкалы с длиной, равной количеству столбцов X

Для любой другой метрики расстояния значение DistParameter должен быть [].

Можно изменить DistParameter использование записи через точку: mdl.DistParameter = newDistParameter. Однако, если Distance является 'mahalanobis' или 'seuclidean', тогда вы не можете изменить DistParameter.

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

Флаг включения галстука, указывающий, predict ли включает все соседи, значения расстояния которых равны k-му наименьшему расстоянию, заданному как false или true. Если IncludeTies является true, predict включает всех этих соседей. В противном случае, predict использует в точности k соседей (см. BreakTies свойство).

Изменение IncludeTies использование записи через точку: mdl.IncludeTies = newIncludeTies.

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

Это свойство доступно только для чтения.

Метод поиска по ближайшему соседу, заданный как 'kdtree' или 'exhaustive'.

  • 'kdtree' - Создает и использует Kd-дерево для поиска ближайших соседей.

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

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

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

Изменение NumNeighbors использование записи через точку: mdl.NumNeighbors = newNumNeighbors.

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

Другие классификационные свойства

Это свойство доступно только для чтения.

Категориальные индексы предиктора, заданные как вектор положительных целых чисел. CategoricalPredictors содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пустое ([]).

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

Это свойство доступно только для чтения.

Имена классов в обучающих данных Y с удаленными дубликатами, заданными как категориальный или символьный массив, логический или числовой вектор или массив ячеек векторов символов. ClassNames имеет тот совпадающий тип данных что и Y. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)

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

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

По умолчанию Cost(i,j) = 1 если i ~= j, и Cost(i,j) = 0 если i = j. Другими словами, стоимость 0 для правильной классификации и 1 для неправильной классификации.

Изменение Cost матрица с использованием записи через точку: mdl.Cost = costMatrix.

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

Это свойство доступно только для чтения.

Расширенные имена предикторов, заданные как массив ячеек из векторов символов.

Если модель использует кодировку для категориальных переменных, то ExpandedPredictorNames включает имена, которые описывают расширенные переменные. В противном случае ExpandedPredictorNames то же, что и PredictorNames.

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

Это свойство доступно только для чтения.

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

Это свойство доступно только для чтения.

Предиктор означает, заданный как числовой вектор длины numel(PredictorNames).

Если вы не стандартизируете mdl при обучении модели используя fitcknn, затем Mu пуст ([]).

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

Это свойство доступно только для чтения.

Количество наблюдений, используемых при обучении ClassificationKNN модель, заданная как положительный целочисленный скаляр. Это число может быть меньше, чем количество строк в обучающих данных, поскольку строки, содержащие NaN значения не являются частью подгонки.

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

Это свойство доступно только для чтения.

Имена переменных предиктора, заданные как массив ячеек из векторов символов. Имена переменных находятся в том же порядке, в котором они появляются в обучающих данных X.

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

Предыдущие вероятности для каждого класса, заданные как числовой вектор. Порядок элементов в Prior соответствует порядку классов в ClassNames.

Добавление или изменение Prior вектор с использованием записи через точку: mdl.Prior = priorVector.

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

Это свойство доступно только для чтения.

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

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

Это свойство доступно только для чтения.

Строки исходных обучающих данных, используемых при подборе кривой ClassificationKNN модель, заданная как логический вектор. Это свойство пустое, если используются все строки.

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

Преобразование счета, заданное как вектор символов или указатель на функцию.

В этой таблице представлены доступные векторы символов.

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

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

Изменение ScoreTransform использование записи через точку: mdl.ScoreTransform = newScoreTransform.

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

Это свойство доступно только для чтения.

Стандартные отклонения предиктора, заданные как числовой вектор длины numel(PredictorNames).

Если вы не стандартизируете переменные предиктора во время обучения, то Sigma пуст ([]).

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

Это свойство доступно только для чтения.

Веса наблюдений, заданные как вектор неотрицательных значений с одинаковым числом строк, как Y. Каждая запись в W определяет относительную важность соответствующего наблюдения в Y.

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

Это свойство доступно только для чтения.

Нестандартные данные предиктора, заданные как числовая матрица. Каждый столбец X представляет один предиктор (переменную), и каждая строка представляет одно наблюдение.

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

Это свойство доступно только для чтения.

Метки класса, заданные как категориальный или символьный массив, логический или числовой вектор или массив ячеек из векторов символов. Каждое значение в Y - наблюдаемая метка класса для соответствующей строки в X.

Y имеет тот совпадающий тип данных, что и данные в Y используется для настройки модели. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)

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

Свойства оптимизации гипероптимизации параметров управления

Это свойство доступно только для чтения.

Оптимизация гиперпараметров перекрестной валидации, заданная как BayesianOptimization объект или таблица гиперпараметров и связанных значений. Это свойство непусто, когда 'OptimizeHyperparameters' аргумент пары "имя-значение" не пуст, когда вы создаете модель используя fitcknn. Значение зависит от настройки 'HyperparameterOptimizationOptions' аргумент пары "имя-значение" при создании модели:

  • 'bayesopt' (по умолчанию) - Объект класса BayesianOptimization

  • 'gridsearch' или 'randomsearch' - Таблица используемых гиперпараметров, наблюдаемых значений целевой функции (потери перекрестной валидации) и ранг наблюдений от самого низкого (лучшего) до самого высокого (худшего)

Функции объекта

compareHoldoutСравните точности двух классификационных моделей с помощью новых данных
crossvalПерекрестная валидация модели машинного обучения
edgeРебро k - ближайший соседний классификатор
gatherСбор свойств модели машинного обучения с графический процессор
limeЛокальные интерпретируемые модели-агностические объяснения (LIME)
lossПотеря k - ближайшего соседа классификатора
marginЗапас k-ближайшего соседа классификатора
partialDependenceВычисление частичной зависимости
plotPartialDependenceСоздайте график частичной зависимости (PDP) и отдельные графики условного ожидания (ICE)
predictСпрогнозируйте метки, используя k-ближайшую соседнюю классификационную модель
resubEdgeРебро классификации реституции
resubLossПотери по классификации реституции
resubMarginКлассификационный запас для реституции
resubPredictКлассификация обучающих данных с помощью обученного классификатора
shapleyЗначения Shapley
testckfoldСравните точности двух классификационных моделей путем повторной перекрестной валидации

Примеры

свернуть все

Обучите 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 для перекрестной проверки классификатора.

Совет

  • compact функция уменьшает размер большинства классификационных моделей путем удаления свойств обучающих данных и любых других свойств, которые не требуются для предсказания меток новых наблюдений. Поскольку k-ближайшие соседние классификационные модели требуют всех обучающих данных для предсказания меток, вы не можете уменьшить размер ClassificationKNN модель.

Альтернативная функциональность

knnsearch находит k - ближайшие соседи точек .rangesearch находит все точки на фиксированном расстоянии. Можно использовать эти функции для классификации, как показано на Classify Query Data. Если вы хотите выполнить классификацию, то использование ClassificationKNN модели могут быть более удобными, потому что вы можете обучить классификатор в один шаг (используя fitcknn) и классифицировать в другие шаги (используя predict). Кроме того, можно обучить k - ближайшую соседнюю модель классификации с помощью одной из опций перекрестной валидации в вызове fitcknn. В этом случае, fitcknn возвращает ClassificationPartitionedModel перекрестно проверенный объект модели.

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

.
Введенный в R2012a