exponenta event banner

потеря

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

    Описание

    пример

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

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

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

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

    L = loss(___,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);

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

    testError = loss(Mdl,tblTest,"Smoker")
    testError = 0.0671
    
    testAccuracy = 1 - testError
    testAccuracy = 0.9329
    

    Модель нейронной сети правильно классифицирует приблизительно 93% наблюдений тестового набора.

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

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

    • Если установить '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

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

    Примечание

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

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

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

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

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

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

    Пример: loss(Mdl,Tbl,"Response","LossFun","crossentropy") задание вычисления потерь перекрестной энтропии для модели Mdl.

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

    • В этой таблице перечислены доступные функции потерь. Укажите его с помощью соответствующего вектора символа или скаляра строки.

      СтоимостьОписание
      'binodeviance'Биномиальное отклонение
      'classiferror'Неверно классифицированная скорость в десятичной
      'crossentropy'Потеря перекрестной энтропии (только для нейронных сетей)
      'exponential'Экспоненциальные потери
      'hinge'Потеря шарнира
      'logit'Логистические потери
      'mincost'Минимальная ожидаемая стоимость неправильной классификации (для классификационных оценок, которые являются задними вероятностями)
      'quadratic'Квадратичные потери

      Дополнительные сведения о функциях потерь см. в разделе Классификационные потери.

    • Чтобы указать пользовательскую функцию потери, используйте функцию дескриптора нотации. Функция должна иметь следующую форму:

      lossvalue = lossfun(C,S,W,Cost)

      • Выходной аргумент lossvalue является скаляром.

      • Указывается имя функции (lossfun).

      • C является nоколо-K логическая матрица со строками, указывающими класс, которому принадлежит соответствующее наблюдение. n - количество наблюдений в Tbl или X, и K - количество различных классов (numel(Mdl.ClassNames). Порядок столбцов соответствует порядку классов в Mdl.ClassNames. Создать C путем установки C(p,q) = 1, если наблюдение p находится в классе q, для каждой строки. Установка всех остальных элементов строки p кому 0.

      • S является nоколо-K числовая матрица классификационных баллов. Порядок столбцов соответствует порядку классов в Mdl.ClassNames. S - матрица классификационных баллов, аналогичная выходному результату predict.

      • W является n-по-1 числовой вектор весов наблюдения.

      • Cost является Kоколо-K числовая матрица затрат на неправильную классификацию. Например, Cost = ones(K) – eye(K) указывает стоимость 0 для правильной классификации и 1 для неправильной классификации.

    Пример: 'LossFun','crossentropy'

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

    Измерение наблюдения данных предиктора, указанное как '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.

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

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

    Подробнее

    свернуть все

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

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

    Рассмотрим следующий сценарий.

    • L - средневзвешенная потеря классификации.

    • n - размер выборки.

    • Для двоичной классификации:

      • yj - наблюдаемая метка класса. Программное обеспечение кодирует его как -1 или 1, указывая отрицательный или положительный класс (или первый или второй класс в ClassNames свойство), соответственно.

      • f (Xj) - показатель классификации положительного класса для наблюдения (строки) j данных прогнозирования X.

      • mj = yjf (Xj) - показатель классификации для классификации наблюдения j в класс, соответствующий yj. Положительные значения mj указывают на правильную классификацию и не вносят большого вклада в средние потери. Отрицательные значения mj указывают на неправильную классификацию и вносят значительный вклад в средний убыток.

    • Для алгоритмов, поддерживающих мультиклассовую классификацию (то есть K ≥ 3):

      • yj * - вектор из K - 1 нулей, с 1 в положении, соответствующем истинному наблюдаемому классу yj. Например, если истинным классом второго наблюдения является третий класс и K = 4, то y2 * = [0 0 1 0] ′. Порядок классов соответствует порядку в ClassNames свойства входной модели.

      • f (Xj) - вектор длины K оценок класса для наблюдения j данных предсказателя X. Порядок оценок соответствует порядку классов в ClassNames свойства входной модели.

      • mj = yj * f (Xj). Поэтому mj - это скалярная оценка классификации, которую модель прогнозирует для истинного наблюдаемого класса.

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

      ∑j=1nwj=1.

    С учетом этого сценария в следующей таблице описаны поддерживаемые функции потерь, которые можно указать с помощью 'LossFun' аргумент пары имя-значение.

    Функция потерьЗначение LossFunУравнение
    Биномиальное отклонение'binodeviance'L=∑j=1nwjlog{1+exp[−2mj]}.
    Неверно классифицированная скорость в десятичной'classiferror'

    L=∑j=1nwjI{y^j≠yj}.

    y ^ j - метка класса, соответствующая классу с максимальным баллом. I {·} - функция индикатора.

    Потери перекрестной энтропии'crossentropy'

    'crossentropy' подходит только для моделей нейронных сетей.

    Взвешенная потеря перекрестной энтропии равна

    L=−∑j=1nw˜jlog (mj) Kn,

    где веса w˜j нормализуются для суммирования в n вместо 1.

    Экспоненциальные потери'exponential'L=∑j=1nwjexp (мдж).
    Потеря шарнира'hinge'L=∑j=1nwjmax{0,1−mj}.
    Потеря журнала'logit'L=∑j=1nwjlog (1 + exp (mj)).
    Минимальная ожидаемая стоимость классификации ошибок'mincost'

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

    Программное обеспечение вычисляет взвешенную минимальную ожидаемую стоимость классификации, используя эту процедуру для наблюдений j = 1,..., n.

    1. Оценить ожидаемую стоимость неправильной классификации для классификации наблюдения Xj в класс k:

      γ jk = (f (Xj) C) k.

      f (Xj) - вектор-столбец апостериорных вероятностей класса для двоичной и мультиклассовой классификации для наблюдения Xj. C - матрица затрат, сохраненная в Cost свойство модели.

    2. Для наблюдения j предсказать метку класса, соответствующую минимальной ожидаемой стоимости неправильной классификации:

      y ^ j = аргминк = 1,..., Kγ jk.

    3. Используя C, определите затраты, понесенные (cj) для составления прогноза.

    Средневзвешенное минимальное ожидаемое снижение затрат на неправильную классификацию

    L=∑j=1nwjcj.

    Если используется матрица затрат по умолчанию (значение элемента которой равно 0 для правильной классификации и 1 для неправильной классификации), то 'mincost' убыток эквивалентен 'classiferror' потери.

    Квадратичные потери'quadratic'L=∑j=1nwj (1 mj) 2.

    На этом рисунке сравниваются функции потерь (за исключением 'crossentropy' и 'mincost') над баллом м для одного наблюдения. Некоторые функции нормализуются для прохождения через точку (0,1).

    Comparison of classification losses for different loss functions

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