classify

Классифицируйте наблюдения с помощью дискриминантного анализа

    Описание

    пример

    Примечание

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

    class = classify(sample,training,group) классифицирует каждую строку данных в sample в одну из групп, к который данные в training принадлежит. Группы для training заданы group. Функция возвращает class, который содержит присвоенные группы для каждой строки sample.

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

    пример

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

    Примеры

    свернуть все

    Загрузите fisheriris набор данных. Создайте group как массив ячеек из символьных векторов, который содержит ирисовые разновидности.

    load fisheriris
    group = species;

    meas матрица содержит четыре лепестковых измерения для 150 ирисовых диафрагм. Случайным образом наблюдения раздела в набор обучающих данных (trainingData) и демонстрационный набор (sampleData) со стратификацией, с помощью информации о группе в group. Задайте 40%-ю выборку затяжки для sampleData.

    rng('default') % For reproducibility
    cv = cvpartition(group,'HoldOut',0.40);
    trainInds = training(cv);
    sampleInds = test(cv);
    trainingData = meas(trainInds,:);
    sampleData = meas(sampleInds,:);

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

    class = classify(sampleData,trainingData,group(trainInds));
    cm = confusionchart(group(sampleInds),class);

    Figure contains an object of type ConfusionMatrixChart.

    classify функция неправильно классифицирует одну ирисовую диафрагму versicolor как virginica в наборе выборочных данных.

    Классифицируйте точки данных на сетку измерений (выборочные данные) при помощи квадратичного дискриминантного анализа. Затем визуализируйте выборочные данные, обучающие данные и контур решения.

    Загрузите fisheriris набор данных. Создайте group как массив ячеек из символьных векторов, который содержит ирисовые разновидности.

    load fisheriris
    group = species(51:end);

    Постройте длину чашелистика (SL) и ширина (SW) измерения для ирисовой диафрагмы versicolor и virginica разновидностей.

    SL = meas(51:end,1);
    SW = meas(51:end,2);
    h1 = gscatter(SL,SW,group,'rb','v^',[],'off');
    h1(1).LineWidth = 2;
    h1(2).LineWidth = 2;
    legend('Fisher versicolor','Fisher virginica','Location','NW')
    xlabel('Sepal Length')
    ylabel('Sepal Width')

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

    Создание демонстрационных данных как числовая матрица, которая содержит сетку измерений. Создайте trainingData как числовая матрица, которая содержит измерения длины и ширины чашелистика для ирисовой диафрагмы versicolor и virginica разновидностей.

    [X,Y] = meshgrid(linspace(4.5,8),linspace(2,4));
    X = X(:); Y = Y(:);
    sampleData = [X Y];
    trainingData = [SL SW];

    Классифицируйте sampleData использование квадратичного дискриминантного анализа.

    [C,err,posterior,logp,coeff] = classify(sampleData,trainingData,group,'quadratic');

    Получите коэффициенты KL, и M для квадратичного контура между этими двумя классами.

    K = coeff(1,2).const;
    L = coeff(1,2).linear; 
    Q = coeff(1,2).quadratic;

    Кривая, которая разделяет эти два класса, задана этим уравнением:

    K+[x1x2]L+[x1x2]Q[x1x2]=0

    Визуализируйте дискриминантную классификацию.

    hold on
    h2 = gscatter(X,Y,C,'rb','.',1,'off');
    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;
    h3 = fimplicit(f,[4.5 8 2 4]);
    h3.Color = 'm';
    h3.LineWidth = 2;
    h3.DisplayName = 'Decision Boundary';
    hold off
    axis tight
    xlabel('Sepal Length')
    ylabel('Sepal Width')
    title('Classification with Fisher Training Data')

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

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

    Загрузите fisheriris набор данных. Создайте group как массив ячеек из символьных векторов, который содержит ирисовые разновидности. Создайте PL и PW как числовые векторы, которые содержат лепестковые измерения длины и ширины, соответственно.

    load fisheriris
    group = species;
    PL = meas(:,3);
    PW = meas(:,4);

    Постройте длину чашелистика (PL) и ширина (PW) измерения для ирисовой диафрагмы setosa, versicolor, и virginica разновидности.

    h1 = gscatter(PL,PW,species,'krb','ov^',[],'off');
    legend('Setosa','Versicolor','Virginica','Location','best')
    xlabel('Petal Length')
    ylabel('Petal Width')

    Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Setosa, Versicolor, Virginica.

    Случайным образом наблюдения раздела в набор обучающих данных (trainingData) и демонстрационный набор (sampleData) со стратификацией, с помощью информации о группе в group. Задайте 10%-ю выборку затяжки для sampleData.

    rng('default') % For reproducibility
    cv = cvpartition(group,'HoldOut',0.10);
    trainInds = training(cv);
    sampleInds = test(cv);
    trainingData = [PL(trainInds) PW(trainInds)];
    sampleData = [PL(sampleInds) PW(sampleInds)];

    Классифицируйте sampleData использование линейного дискриминантного анализа.

    [class,err,posterior,logp,coeff] = classify(sampleData,trainingData,group(trainInds));

    Получите коэффициенты K и L для линейного контура между вторыми и третьими классами.

    K = coeff(2,3).const;  
    L = coeff(2,3).linear;

    Линия, которая разделяет вторые и третьи классы, задана уравнением K+[x1x2]L=0. Постройте границу между вторыми и третьими классами.

    f = @(x1,x2) K + L(1)*x1 + L(2)*x2;
    hold on
    h2 = fimplicit(f,[.9 7.1 0 2.5]);
    h2.Color = 'r';
    h2.DisplayName = 'Boundary between Versicolor & Virginica';

    Figure contains an axes object. The axes object contains 4 objects of type line, implicitfunctionline. These objects represent Setosa, Versicolor, Virginica, Boundary between Versicolor & Virginica.

    Получите коэффициенты K и L для линейного контура между первыми и вторыми классами.

    K = coeff(1,2).const;
    L = coeff(1,2).linear;

    Постройте график, который разделяет первые и вторые классы.

    f = @(x1,x2) K + L(1)*x1 + L(2)*x2;
    h3 = fimplicit(f,[.9 7.1 0 2.5]);
    hold off
    h3.Color = 'k';
    h3.DisplayName = 'Boundary between Versicolor & Setosa';
    axis tight
    title('Linear Classification with Fisher Training Data')

    Figure contains an axes object. The axes object with title Linear Classification with Fisher Training Data contains 5 objects of type line, implicitfunctionline. These objects represent Setosa, Versicolor, Virginica, Boundary between Versicolor & Virginica, Boundary between Versicolor & Setosa.

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

    свернуть все

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

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

    Обучающие данные в виде числовой матрицы. Каждый столбец training представляет одну переменную, и каждая строка представляет одно учебное наблюдение. training должен иметь одинаковое число столбцов как sample, и одинаковое число строк как group.

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

    Названия группы в виде категориального массива, символьного массива, массива строк, числового вектора или массива ячеек из символьных векторов. Каждый элемент в group задает группу к который соответствующая строка training принадлежит. group должен иметь одинаковое число строк как training.

    NaN, <undefined>, пустой символьный вектор (''), пустая строка (""), и <missing> значения в group укажите на отсутствующие значения. classify удаляет целые строки training данные, соответствующие недостающему названию группы.

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

    Дискриминантный тип в виде одного из значений в следующей таблице.

    ЗначениеОписание
    'linear'Соответствует многомерной нормальной плотности к каждой группе, с объединенной оценкой ковариации. Эта опция использует отношения правдоподобия, чтобы присвоить демонстрационные наблюдения группам.
    'quadratic'Соответствует многомерной нормальной плотности оценками ковариации, расслоенными группой. Эта опция использует отношения правдоподобия, чтобы присвоить демонстрационные наблюдения группам.
    'diagLinear'Подобно 'linear', но с диагональной оценкой ковариационной матрицы. Эта диагональная опция является определенным примером наивного классификатора Байеса, потому что она принимает, что переменные условно независимы, учитывая метку группы.
    'diagQuadratic'Подобно 'quadratic', но с диагональной оценкой ковариационной матрицы. Эта диагональная опция является определенным примером наивного классификатора Байеса, потому что она принимает, что переменные условно независимы, учитывая метку группы.
    'mahalanobis'Использование расстояния Mahalanobis со стратифицированными оценками ковариации.

    Априорные вероятности для каждой группы в виде одного из значений в следующей таблице. По умолчанию все априорные вероятности равны 1/K, где K является количеством групп.

    ЗначениеОписание
    числовой векторКаждым элементом является априорная вероятность группы. Закажите элементы согласно group. classify нормирует элементы так, чтобы они суммировали к 1.
    'empirical'Априорные вероятности группы являются частотами родственника группы в group.
    структура

    Структура S с двумя полями:

    • S.group содержит названия группы как переменную того же типа как group.

    • S.prob содержит числовой вектор из соответствующих априорных вероятностей. classify нормирует элементы так, чтобы они суммировали к 1.

    prior не используется для дискриминации расстоянием Mahalanobis, за исключением вычисления err.

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

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

    свернуть все

    Предсказанный класс для выборочных данных, возвращенных как категориальный массив, символьный массив, массив строк, числовой вектор или массив ячеек из символьных векторов. class имеет тот же тип как group. Каждый элемент в class содержит группу к который каждая строка sample был присвоен.

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

    Очевидный коэффициент ошибок, возвращенный как неотрицательный номер. err оценка misclassification коэффициента ошибок на основе training данные. Это - процент наблюдений в training это неправильно классифицируется, взвешивается prior вероятности для групп.

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

    Апостериорные вероятности для учебных наблюдений, возвращенных как n-by-k числовая матрица, где n является количеством наблюдений (строки) в training и k является количеством групп в group. Элемент posterior(i,j) апостериорная вероятность то наблюдение i в training принадлежит, чтобы сгруппировать j в group. Если вы задаете type как 'mahalanobis', функция не вычисляет posterior.

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

    Логарифм безусловной плотности вероятности для демонстрационных наблюдений, возвращенных как числовой вектор. Предсказанная безусловная плотность вероятности для наблюдения i в sample

    P(obsi)=j=1kP(obsi | groupj)P(groupj),

    где:

    • P(obsi|groupj) условная плотность наблюдения i в sample учитывая группу j в group.

    • P(groupj) априорная вероятность группы j.

    • k количество групп.

    Если вы задаете type как 'mahalanobis', функция не вычисляет logp.

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

    Коэффициенты пограничных кривых между парами групп, возвращенных как k-by-k структура, где k является количеством групп в group. Элемент coeff(i,j) содержит коэффициенты контуров между группами i и j. Эта таблица приводит coeff поля и их значения.

    Имя поляЗначение
    typeТип дискриминантной функции, заданной type
    name1Имя группы i
    name2Имя группы j
    constПостоянный термин граничного уравнения (K)
    linearЛинейные коэффициенты граничного уравнения (L)
    quadraticКвадратичная матрица коэффициентов граничного уравнения (Q). Структура не включает это поле, когда вы задаете type как 'linear' или 'diagLinear'.
    • Если вы задаете type как 'linear' или 'diagLinear', функция классифицирует строку x от sample в группу i (вместо группы j) когда 0 < K + x*L.

    • Если вы задаете type как 'quadratic', 'diagQuadratic', или 'mahalanobis', функция классифицирует строку x от sample в группу i (вместо группы j) когда 0 < K + x*L + x*Q*x'.

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

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

    Ссылки

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

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

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