loss

Потеря для регрессионной нейронной сети

    Описание

    пример

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

    L возвращается как скалярное значение, которое представляет среднюю квадратичную невязку (MSE) по умолчанию.

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

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

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

    Примеры

    свернуть все

    Вычислите среднюю квадратичную невязку (MSE) тестового набора модели регрессионной нейронной сети.

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

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

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

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

    Обучите регрессионную модель нейронной сети с помощью набора обучающих данных. Задайте Systolic столбец tblTrain как переменная отклика. Задайте, чтобы стандартизировать числовые предикторы.

    Mdl = fitrnet(tblTrain,"Systolic", ...
        "Standardize",true);

    Вычислите тестовый набор MSE. Меньшие значения MSE указывают на лучшую эффективность.

    testMSE = loss(Mdl,tblTest,"Systolic")
    testMSE = 49.9595
    

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

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

    fishertable = readtable('fisheriris.csv');

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

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

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

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

    Сравните среднюю квадратичную невязку (MSE) тестового набора двух моделей. Меньшие значения MSE указывают на лучшую эффективность.

    allMSE = loss(allMdl,testTbl)
    allMSE = 0.0834
    
    subsetMSE = loss(subsetMdl,testTbl)
    subsetMSE = 0.0887
    

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

    tiledlayout(2,1)
    
    % Top axes
    ax1 = nexttile;
    allPredictedY = predict(allMdl,testTbl);
    plot(ax1,testTbl.PetalLength,allPredictedY,".")
    hold on
    plot(ax1,testTbl.PetalLength,testTbl.PetalLength)
    hold off
    xlabel(ax1,"True Petal Length")
    ylabel(ax1,"Predicted Petal Length")
    title(ax1,"All Predictors")
    
    % Bottom axes
    ax2 = nexttile;
    subsetPredictedY = predict(subsetMdl,testTbl);
    plot(ax2,testTbl.PetalLength,subsetPredictedY,".")
    hold on
    plot(ax2,testTbl.PetalLength,testTbl.PetalLength)
    hold off
    xlabel(ax2,"True Petal Length")
    ylabel(ax2,"Predicted Petal Length")
    title(ax2,"Subset of Predictors")

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

    Входные параметры

    свернуть все

    Обученная регрессионная нейронная сеть, заданная как RegressionNeuralNetworkобъект модели объект модели, возвращенный fitrnet или compact, соответственно.

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

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

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

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

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

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

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

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

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

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

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

    Примечание

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

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

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

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

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

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

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

    Функция потерь, заданная как 'mse' или указатель на функцию.

    • 'mse' - Средневзвешенная квадратичная невязка.

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

      lossval = lossfun(Y,YFit,W)

      • Выходной аргумент lossval является скаляром с плавающей точкой.

      • Вы задаете имя функции (lossfun).

      • Y - это линейный n численный вектор наблюдаемых откликов, где n - количество наблюдений в Tbl или X.

      • YFit является длинным n числовым вектором соответствующих предсказанных откликов.

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

    Пример: 'LossFun', @ lossfun

    Типы данных: 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 вычисляет взвешенные потери регрессии и нормализует веса до суммы 1.

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

    Введенный в R2021a