margin

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

    Описание

    пример

    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объект модели объект модели, возвращенный 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

    Подробнее о

    свернуть все

    Классификационное ребро

    Это classification edge - среднее значение classification margins.

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

    Классификационное поле

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

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

    Введенный в R2021a