classify

Дискриминантный анализ

Синтаксис

class = classify(sample,training,group)
class = classify(sample,training,group,'type')
class = classify(sample,training,group,'type',prior)
[class,err] = classify(...)
[class,err,POSTERIOR] = classify(...)
[class,err,POSTERIOR,logp] = classify(...)
[class,err,POSTERIOR,logp,coeff] = classify(...)

Описание

class = classify(sample,training,group) классифицирует каждую строку данных в sample в одну из групп в training. sample и training должны быть матрицами с одинаковым числом столбцов. group является сгруппированной переменной для training. Его уникальные значения определяют группы; каждый элемент определяет группу, которой соответствует соответствующая строка training принадлежит. group может быть категориальной переменной, числовым вектором, символьным массивом, строковыми массивами или массивом ячеек векторов символов. training и group должно иметь одинаковое число строк. classify лечит <undefined> значения, NaNs, пустые символьные векторы, пустые строки и <missing> строковые значения в group как отсутствующие значения данных и игнорирует соответствующие строки training. Область выхода class указывает группу, в которую входит каждая строка sample был назначен и имеет тот же тип, что и group.

class = classify(sample,training,group,'type') позволяет вам задать тип дискриминантной функции. Задайте type внутри одинарные кавычки. type является одним из:

  • linear - Подходит к многомерной нормальной плотности для каждой группы с объединенной оценкой ковариации. Это значение по умолчанию.

  • diaglinear - Подобно linear, но с диагональной ковариацией матрицы (наивные классификаторы Байеса).

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

  • diagquadratic - Подобно quadratic, но с диагональной ковариацией матрицы (наивные классификаторы Байеса).

  • mahalanobis - Использует расстояния Махаланобиса со стратифицированными ковариационными оценками.

class = classify(sample,training,group,'type',prior) позволяет вам задать предыдущие вероятности для групп. prior является одним из:

  • Числовой вектор той же длины, что и количество уникальных значений в group (или количество уровней, определенных для group, если group категориальна). Если group является числовым или категориальным, порядок prior должны соответствовать упорядоченным значениям в group. В противном случае порядок prior должен соответствовать порядку первого вхождения значений в group.

  • Структура 1 на 1 с полями:

    • prob - Числовой вектор.

    • group - Того же типа, что и group, содержащая уникальные значения, указывающие группы, к которым относятся элементы prob соответствуют.

    Как структура, prior может содержать группы, которые не появляются в group. Это может быть полезно, если training является подмножеством большого набора обучающих данных. classify игнорирует все группы, которые появляются в структуре, но не в group массив.

  • Вектор символов или строковый скаляр 'empirical', что указывает на то, что групповые предыдущие вероятности должны быть оценены из относительных частот группы в training.

prior по умолчанию задается числовой вектор с равными вероятностями, т.е. равномерное распределение. prior не используется для различения расстояния Махаланобиса, за исключением вычисления частоты ошибок.

[class,err] = classify(...) также возвращает оценку err ставки ошибки неправильной классификации на основе training данные. classify возвращает кажущуюся частоту ошибок, т.е. процент наблюдений в training которые неправильно классифицируются, взвешиваются предыдущими вероятностями для групп.

[class,err,POSTERIOR] = classify(...) также возвращает матрицу POSTERIOR из оценок апостериорных вероятностей, что j-я обучающая группа была источником i-го выборочного наблюдения, т.е. Pr (group j | obs i). POSTERIOR не рассчитывается на дискриминацию махаланобиса.

[class,err,POSTERIOR,logp] = classify(...) также возвращает вектор logp содержащие оценки логарифмов безусловной прогнозирующей плотности вероятностей выборочных наблюдений, p (obs i) = p (obs i | group j) Pr (group j) по всем группам. logp не рассчитывается на дискриминацию махаланобиса.

[class,err,POSTERIOR,logp,coeff] = classify(...) также возвращает массив структур coeff содержит коэффициенты граничных кривых между парами групп. Каждый элемент coeff(I,J) содержит информацию для сравнения групповых I для группирования J в следующих полях:

  • type - Тип дискриминантной функции, от type вход.

  • name1 - Имя первой группы.

  • name2 - Имя второй группы.

  • const - Постоянный член краевого уравнения (K)

  • linear - Линейные коэффициенты граничного уравнения (L)

  • quadratic - Квадратичная матрица коэффициентов граничного уравнения (Q)

Для linear и diaglinear типы, quadratic поле отсутствует, а строка x от sample массив классифицируется в групповые I а не групповые J если 0 < K+x*L. Для других типов x классифицируется в групповые I если 0 < K+x*L+x*Q*x'.

Примеры

свернуть все

Для обучающих данных используйте измерения сепаля Фишера для iris versicolor и virginica:

load fisheriris
SL = meas(51:end,1);
SW = meas(51:end,2);
group = species(51:end);
h1 = gscatter(SL,SW,group,'rb','v^',[],'off');
set(h1,'LineWidth',2)
legend('Fisher versicolor','Fisher virginica',...
       'Location','NW')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Fisher versicolor, Fisher virginica.

Классифицируйте сетку измерений в той же шкале:

[X,Y] = meshgrid(linspace(4.5,8),linspace(2,4));
X = X(:); Y = Y(:);
[C,err,P,logp,coeff] = classify([X Y],[SL SW],...
                                group,'Quadratic');

Визуализация классификации:

hold on;
gscatter(X,Y,C,'rb','.',1,'off');
K = coeff(1,2).const;
L = coeff(1,2).linear; 
Q = coeff(1,2).quadratic;
% Function to compute K + L*v + v'*Q*v for multiple vectors
% v=[x;y]. Accepts x and y as scalars or column vectors.
f = @(x,y) K + L(1)*x + L(2)*y + Q(1,1)*x.*x + (Q(1,2)+Q(2,1))*x.*y + Q(2,2)*y.*y;
h2 = fimplicit(f,[4.5 8 2 4]);
set(h2,'Color','m','LineWidth',2,'DisplayName','Decision Boundary')
axis([4.5 8 2 4])
xlabel('Sepal Length')
ylabel('Sepal Width')
title('{\bf Classification with Fisher Training Data}')

Figure contains an axes. The axes with title {\bf Classification with Fisher Training Data} contains 5 objects of type line, implicitfunctionline. These objects represent Fisher versicolor, Fisher virginica, Decision Boundary.

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

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

Ссылки

[1] Кржановски, У. Дж. Принципы многомерного анализа: перспектива пользователя. Нью-Йорк: Oxford University Press, 1988.

[2] Себер, Г. А. Ф. Многомерные наблюдения. Hoboken, NJ: John Wiley & Sons, Inc., 1984.

Представлено до R2006a