margin

Поля классификации для классификатора нейронной сети

    Описание

    пример

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

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

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

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

    m возвращен как числовой вектор, i которого th запись соответствует i th наблюдение в 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 указывают на уверенные классификации, и отрицательные граничные значения указывают на misclassifications.

    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 \in 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 \in fitcnet когда учебный Mdl, затем программное обеспечение стандартизирует числовые столбцы данных о предикторе с помощью соответствующих средних значений и стандартных отклонений.

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

    Размерность наблюдения данных о предикторе в виде 'rows' или 'columns'.

    Примечание

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

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

    Больше о

    свернуть все

    Ребро классификации

    classification edge является средним значением classification margins.

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

    Поле классификации

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

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

    Введенный в R2021a