exponenta event banner

край

Границы классификации для классификатора нейронных сетей

    Описание

    пример

    m = margin(Mdl,Tbl,ResponseVarName) возвращает поля классификации для обученного классификатора нейронных сетей Mdl использование данных предиктора в таблице Tbl и метки классов в ResponseVarName табличная переменная.

    m возвращается в виде числового вектора, i-я запись которого соответствует i-му наблюдению в Tbl.

    m = margin(Mdl,Tbl,Y) возвращает поля классификации для классификатора Mdl использование данных предиктора в таблице Tbl и метки класса в векторе Y.

    m = margin(Mdl,X,Y) возвращает поля классификации для обученного классификатора нейронных сетей Mdl использование данных предиктора X и соответствующие метки классов в Y.

    m возвращается в виде числового вектора, i-я запись которого соответствует i-му наблюдению в X.

    m = margin(Mdl,X,Y,'ObservationsIn',dimension) задает измерение наблюдения данных предиктора, либо 'rows' (по умолчанию) или 'column'. Например, укажите 'ObservationsIn','columns' чтобы указать, что столбцы в данных предиктора соответствуют наблюдениям.

    Примеры

    свернуть все

    Расчет полей классификации тестового набора классификатора нейронной сети.

    Загрузить patients набор данных. Создайте таблицу из набора данных. Каждая строка соответствует одному пациенту, и каждый столбец соответствует диагностической переменной. Используйте Smoker переменная в качестве ответной переменной, а остальные переменные в качестве предикторов.

    load patients
    tbl = table(Diastolic,Systolic,Gender,Height,Weight,Age,Smoker);

    Разделение данных на набор обучения tblTrain и набор тестов tblTest с использованием стратифицированной секции удержания. Программное обеспечение резервирует приблизительно 30% наблюдений для набора тестовых данных и использует остальные наблюдения для набора обучающих данных.

    rng("default") % For reproducibility of the partition
    c = cvpartition(tbl.Smoker,"Holdout",0.30);
    trainingIndices = training(c);
    testIndices = test(c);
    tblTrain = tbl(trainingIndices,:);
    tblTest = tbl(testIndices,:);

    Обучение нейросетевого классификатора с помощью обучающего набора. Укажите Smoker столбец tblTrain в качестве переменной ответа. Укажите, чтобы стандартизировать числовые предикторы.

    Mdl = fitcnet(tblTrain,"Smoker", ...
        "Standardize",true);

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

    m = margin(Mdl,tblTest,"Smoker");
    bar(m)
    xlabel("Observation")
    ylabel("Margin")
    title("Test Set Margins")

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

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

    Загрузить образец файла fisheriris.csv, которая содержит данные по радужке, включая длину чашелистика, ширину чашелистика, длину лепестка, ширину лепестка и видовой тип. Прочтите файл в таблицу.

    fishertable = readtable('fisheriris.csv');

    Разделение данных на набор обучения trainTbl и набор тестов testTbl с использованием стратифицированной секции удержания. Программное обеспечение резервирует приблизительно 30% наблюдений для набора тестовых данных и использует остальные наблюдения для набора обучающих данных.

    rng("default")
    c = cvpartition(fishertable.Species,"Holdout",0.3);
    trainTbl = fishertable(training(c),:);
    testTbl = fishertable(test(c),:);

    Обучить один классификатор нейронной сети, используя все предикторы в обучающем наборе, и обучить другой классификатор, используя все предикторы, кроме PetalWidth. Для обеих моделей укажите Species в качестве переменной ответа и стандартизировать предикторы.

    allMdl = fitcnet(trainTbl,"Species","Standardize",true);
    subsetMdl = fitcnet(trainTbl,"Species ~ SepalLength + SepalWidth + PetalLength", ...
        "Standardize",true);

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

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

    tiledlayout(2,1)
    
    % Top axes
    ax1 = nexttile;
    allMargins = margin(allMdl,testTbl);
    bar(ax1,allMargins)
    xlabel(ax1,"Observation")
    ylabel(ax1,"Margin")
    title(ax1,"All Predictors")
    
    % Bottom axes
    ax2 = nexttile;
    subsetMargins = margin(subsetMdl,testTbl);
    bar(ax2,subsetMargins)
    xlabel(ax2,"Observation")
    ylabel(ax2,"Margin")
    title(ax2,"Subset of Predictors")

    Сравните границу классификации тестового набора или среднее значение полей классификации двух моделей.

    allEdge = edge(allMdl,testTbl)
    allEdge = 0.8198
    
    subsetEdge = edge(subsetMdl,testTbl)
    subsetEdge = 0.9556
    

    Основываясь на полях и краях классификации тестового набора, модель, обученная на подмножестве предикторов, по-видимому, превосходит модель, обученную на всех предикторах.

    Сравните ошибку классификации тестового набора двух моделей.

    allError = loss(allMdl,testTbl);
    allAccuracy = 1-allError
    allAccuracy = 0.9111
    
    subsetError = loss(subsetMdl,testTbl);
    subsetAccuracy = 1-subsetError
    subsetAccuracy = 0.9778
    

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

    Визуализация результатов классификации тестового набора с использованием матриц путаницы.

    allLabels = predict(allMdl,testTbl);
    figure
    confusionchart(testTbl.Species,allLabels)
    title("All Predictors")

    subsetLabels = predict(subsetMdl,testTbl);
    figure
    confusionchart(testTbl.Species,subsetLabels)
    title("Subset of Predictors")

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

    Учитывая производительность тестового набора двух моделей, рассмотрите возможность использования модели, обученной с использованием всех предикторов, за исключением PetalWidth.

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

    свернуть все

    Обученный классификатор нейронных сетей, указанный как ClassificationNeuralNetwork объект модели или CompactClassificationNeuralNetwork объект модели, возвращенный fitcnet или compactсоответственно.

    Образец данных, указанный как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной прогнозирующей переменной. Дополнительно, Tbl может содержать дополнительный столбец для переменной ответа. Tbl должен содержать все предикторы, используемые для обучения Mdl. Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не допускаются.

    • Если Tbl содержит переменную ответа, используемую для обучения Mdl, то указывать не нужно ResponseVarName или Y.

    • Если вы тренировались Mdl используя образцы данных, содержащиеся в таблице, затем входные данные для margin также должен находиться в таблице.

    • Если установить 'Standardize',true в fitcnet при обучении Mdlзатем программное обеспечение стандартизирует числовые столбцы данных предиктора с использованием соответствующих средств и стандартных отклонений.

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

    Имя переменной ответа, указанное как имя переменной в Tbl. Если Tbl содержит переменную ответа, используемую для обучения Mdl, то указывать не нужно ResponseVarName.

    При указании ResponseVarName, то необходимо указать его как вектор символа или скаляр строки. Например, если переменная ответа сохранена как Tbl.Y, затем укажите ResponseVarName как 'Y'. В противном случае программа обрабатывает все столбцы Tbl, в том числе Tbl.Y, как предикторы.

    Переменная ответа должна быть категориальным, символьным или строковым массивом; логический или числовой вектор; или массив ячеек символьных векторов. Если ответная переменная является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

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

    Метки класса, указанные как категориальный, символьный или строковый массив; логический или числовой вектор; или массив ячеек символьных векторов.

    • Тип данных Y должен совпадать с типом данных Mdl.ClassNames. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)

    • Отдельные классы в Y должен быть подмножеством Mdl.ClassNames.

    • Если Y является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

    • Длина Y должно быть равно количеству наблюдений в X или Tbl.

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

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

    Примечание

    Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени вычислений.

    Длина Y и число замечаний в X должно быть равным.

    Если установить 'Standardize',true в fitcnet при обучении Mdlзатем программное обеспечение стандартизирует числовые столбцы данных предиктора с использованием соответствующих средств и стандартных отклонений.

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

    Измерение наблюдения данных предиктора, указанное как 'rows' или 'columns'.

    Примечание

    Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени вычислений. Невозможно указать 'ObservationsIn','columns' для данных предиктора в таблице.

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

    Подробнее

    свернуть все

    Край классификации

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

    Один из способов выбора из нескольких классификаторов, например, выбор элемента, - выбор классификатора, который дает наибольший край.

    Маржа классификации

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

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

    Представлен в R2021a