edge

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

    Описание

    пример

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

    e возвращается как скалярное значение, которое представляет среднее значение классификационных полей.

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

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

    e = edge(___,Name,Value) задает опции, использующие один или несколько аргументов имя-значение в дополнение к любой комбинации входных аргументов в предыдущих синтаксисах. Для примера можно задать, что столбцы в данных предиктора соответствуют наблюдениям или обеспечивают веса наблюдений.

    Примеры

    свернуть все

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

    Загрузите 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);

    Вычислите ребро классификации тестового набора.

    e = edge(Mdl,tblTest,"Smoker")
    e = 0.8657
    

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

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

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

    • Если вы задаете '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

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

    Примечание

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

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

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

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

    Аргументы в виде пар имя-значение

    Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

    Пример: edge(Mdl,Tbl,"Response","Weights","W") задает использование Response и W переменные в таблице Tbl как метки классов и веса наблюдений, соответственно.

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

    Примечание

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

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

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

    Если вы задаете входные данные как таблицу Tbl, затем Weights может быть именем переменной в Tbl который содержит числовой вектор. В этом случае необходимо задать Weights как вектор символов или строковый скаляр. Для примера, если вектор весов W хранится как Tbl.W, затем укажите его следующим 'W'.

    По умолчанию Weights является ones(n,1), где n количество наблюдений в X или Tbl.

    Если вы поставляете веса, то edge вычисляет взвешенное ребро классификации и нормализует веса до суммы значения предшествующей вероятности в соответствующем классе.

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

    Подробнее о

    свернуть все

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

    classification edge является средним значением classification margins или средневзвешенным значением classification margins, когда вы задаете Weights.

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

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

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

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

    Введенный в R2021a