классифицировать

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

Синтаксис

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>, NaN s, пустые символьные вектора, пустые строки и значения строки <missing> в group как пропускающий значения данных, и игнорирует соответствующие строки training. Вывод class указывает на группу, к которой каждая строка sample была присвоена и имеет тот же тип как group.

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

  • linear — Соответствует многомерной нормальной плотности к каждой группе, с объединенной оценкой ковариации. Это значение по умолчанию.

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

  • quadratic — Соответствует многомерной нормальной плотности оценками ковариации, расслоенными группой.

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

  • mahalanobis — Использование расстояния 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 не используется для дискриминации расстоянием Mahalanobis, за исключением вычисления коэффициента ошибок.

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

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

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

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

  • ввод Тип дискриминантной функции, от входа 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'.

Примеры

свернуть все

Для данных тренировки используйте измерения чашелистика Фишера для ирисовой диафрагмы 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')

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

[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}')

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

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

Ссылки

[1] Крзановский, W. J. Принципы многомерного анализа: перспектива пользователя. Нью-Йорк: Издательство Оксфордского университета, 1988.

[2] Seber, G. A. F. Многомерные наблюдения. Хобокен, NJ: John Wiley & Sons, Inc., 1984.

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