predict

Спрогнозируйте метки, используя k-ближайшую соседнюю классификационную модель

Описание

label = predict(mdl,X) возвращает вектор предсказанных меток классов для данных предиктора в таблице или матрице X, на основе обученной k - ближайшей соседней классификационной модели mdl. См. Предсказанная метка класса.

пример

[label,score,cost] = predict(mdl,X) также возвращает:

  • Матрица классификационных оценок (score), указывающий вероятность того, что метка происходит от определенного класса. Для k-ближайшего соседа счетов являются апостериорными вероятностями. См. Апостериорная вероятность.

  • Матрица ожидаемых классификационных затрат (cost). Для каждого наблюдения в X, предсказанная метка класса соответствует минимальным ожидаемым классификационным затратам среди всех классов. См. «Ожидаемые затраты».

Примеры

свернуть все

Создайте k-ближайших соседей классификатор для данных радужной оболочки глаза Фишера, где k = 5. Оцените некоторые предсказания модели на новых данных.

Загрузите набор данных радужной оболочки глаза Фишера.

load fisheriris
X = meas;
Y = species;

Создайте классификатор для пяти ближайших соседей. Стандартизируйте некатегориальные данные предиктора.

mdl = fitcknn(X,Y,'NumNeighbors',5,'Standardize',1);

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

Xnew = [min(X);mean(X);max(X)];
[label,score,cost] = predict(mdl,Xnew)
label = 3x1 cell
    {'versicolor'}
    {'versicolor'}
    {'virginica' }

score = 3×3

    0.4000    0.6000         0
         0    1.0000         0
         0         0    1.0000

cost = 3×3

    0.6000    0.4000    1.0000
    1.0000         0    1.0000
    1.0000    1.0000         0

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

Входные параметры

свернуть все

k-ближайших соседей классификатор модели, заданный как ClassificationKNN объект.

Данные предиктора, которые будут классифицированы, заданные как числовая матрица или таблица.

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

  • Для числовой матрицы:

    • Переменные, составляющие столбцы X должен иметь такой же порядок, как и переменные предиктора, используемые для обучения mdl.

    • Если вы обучаете mdl использование таблицы (для примера, Tbl), затем X может быть числовой матрицей, если Tbl содержит все числовые переменные предиктора. k-ближайшая классификация соседей требует однородных предикторов. Поэтому обработать все числовые предикторы в Tbl как категориально во время обучения, установите 'CategoricalPredictors','all' когда вы обучаете, используя fitcknn. Если Tbl содержит неоднородные предикторы (для примера, числовых и категориальных типов данных) и X является числовой матрицей, тогда predict выдает ошибку.

  • Для таблицы:

    • predict не поддерживает многополюсные переменные и массивы ячеек, кроме массивов ячеек векторов символов.

    • Если вы обучаете mdl использование таблицы (для примера, Tbl), затем все переменные предиктора в X должны иметь те же имена переменных и типы данных, что и те, которые используются для обучения mdl (хранится в mdl.PredictorNames). Однако порядок столбцов X не должен соответствовать порядку столбцов Tbl. Оба Tbl и X может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict игнорирует их.

    • Если вы обучаете mdl используя числовую матрицу, затем имена предикторов в mdl.PredictorNames и соответствующие имена переменных предиктора в X должно быть то же самое. Чтобы задать имена предикторов во время обучения, смотрите PredictorNames Аргумент пары "имя-значение" из fitcknn. Все переменные предиктора в X должны быть числовыми векторами. X может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict игнорирует их.

Если вы задаете 'Standardize',true в fitcknn для обучения mdl, затем программное обеспечение стандартизирует столбцы X использование соответствующих средств в mdl.Mu и стандартные отклонения в mdl.Sigma.

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

Выходные аргументы

свернуть все

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

Предсказанные счета классов или апостериорные вероятности, возвращенные как числовая матрица размера n -by- K. n - количество наблюдений (строк) в X, и K количество классов (в mdl.ClassNames). score(i,j) - апостериорная вероятность того, что наблюдение i в X является классом j в mdl.ClassNames. См. Апостериорная вероятность.

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

Ожидаемые классификационные затраты, возвращенные как числовая матрица размера n -by- K. n - количество наблюдений (строк) в X, и K количество классов (в mdl.ClassNames). cost(i,j) - стоимость классификации строки i от X как класс j в mdl.ClassNames. См. «Ожидаемые затраты».

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

Алгоритмы

свернуть все

Предсказанная метка класса

predict классифицирует путем минимизации ожидаемых затрат на неправильную классификацию:

y^=argminy=1,...,Kj=1KP^(j|x)C(y|j),

где:

  • y^ - предсказанная классификация.

  • K - количество классов.

  • P^(j|x) - апостериорная вероятность j классов для x наблюдений.

  • C(y|j) - стоимость классификации наблюдения как y, когда его истинный класс j.

Апостериорная вероятность

Рассмотрим вектор (одну точку запроса) xnew и модель mdl.

  • k - количество ближайших соседей, используемых в предсказании, mdl.NumNeighbors.

  • nbd(mdl,xnew) задает k ближайших соседей к xnew в mdl.X.

  • Y(nbd) задает классификации точек в nbd(mdl,xnew)а именно mdl.Y(nbd).

  • W(nbd) задает веса точек в nbd(mdl,xnew).

  • prior задает априорные значения классов в mdl.Y.

Если модель содержит вектор априорных вероятностей, то веса наблюдений W нормированы по классам, чтобы суммировать априорные значения. Этот процесс может включать вычисление точки xnew, потому что веса могут зависеть от расстояния от xnew к точкам в mdl.X.

Апостериорная p вероятностей (j | xnewявляется

p(j|xnew)=inbdW(i)1Y(X(i))=jinbdW(i).

Вот, 1Y(X(i))=j является 1 когда   mdl.Y(i) = j, и 0 в противном случае.

Истинные затраты на неправильную классификацию

Две стоимости связаны с классификацией KNN: истинная стоимость неправильной классификации для каждого класса и ожидаемая стоимость неправильной классификации для каждого наблюдения.

Можно задать истинные затраты на неправильную классификацию по классам с помощью 'Cost' аргумент пары "имя-значение" при запуске fitcknn. Значение Cost(i,j) - стоимость классификации наблюдений в классы j если его класс true i. По умолчанию Cost(i,j) = 1 если i ~= j, и Cost(i,j) = 0 если i = j. Другими словами, стоимость 0 для правильной классификации и 1 для неправильной классификации.

Ожидаемая стоимость

Две стоимости связаны с классификацией KNN: истинная стоимость неправильной классификации для каждого класса и ожидаемая стоимость неправильной классификации для каждого наблюдения. Третий выход predict - ожидаемая стоимость неправильной классификации за наблюдение.

Предположим, у вас есть Nobs наблюдения, которые необходимо классифицировать с помощью обученного классификатора mdl, и у вас есть K классы. Наблюдения помещаются в матрицу Xnew с одним наблюдением за строкой. Команда

[label,score,cost] = predict(mdl,Xnew)

возвращает матрицу cost размера Nobs-by- K, среди других выходов. Каждая строка cost матрица содержит ожидаемые (средние) затраты на классификацию наблюдений в каждый из K классы. cost(n,j) является

i=1KP^(i|Xnew(n))C(j|i),

где

  • K - количество классов.

  • P^(i|X(n)) - апостериорная вероятность i классов для Xnew наблюдений (n).

  • C(j|i) - истинная стоимость неправильной классификации при классификации наблюдения как j, когда его истинный класс i.

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

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