exponenta event banner

kfoldLoss

Потеря для перекрестно проверенной секционированной регрессионной модели

    Описание

    пример

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

    пример

    L = kfoldLoss(CVMdl,Name,Value) возвращает потерю с дополнительными параметрами, заданными одним или несколькими аргументами «имя-значение». Например, можно указать пользовательскую функцию потерь.

    Примеры

    свернуть все

    Найти потерю перекрестной проверки для регрессионного ансамбля carsmall данные.

    Загрузить carsmall набор данных и выбор перемещения, лошадиных сил и веса транспортного средства в качестве предикторов.

    load carsmall
    X = [Displacement Horsepower Weight];

    Тренируют ансамбль регрессионных деревьев.

    rens = fitrensemble(X,MPG);

    Создание перекрестно проверенного ансамбля из rens и найти k-кратную потерю перекрестной проверки.

    rng(10,'twister') % For reproducibility
    cvrens = crossval(rens);
    L = kfoldLoss(cvrens)
    L = 28.7114
    

    Среднеквадратичная ошибка (MSE) является мерой качества модели. Изучите MSE для каждой складки перекрестно проверенной регрессионной модели.

    Загрузить carsmall набор данных. Укажите предиктор X и данные ответа Y.

    load carsmall
    X = [Cylinders Displacement Horsepower Weight];
    Y = MPG;

    Обучение модели дерева перекрестной проверки регрессии. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку.

    rng('default') % For reproducibility
    CVMdl = fitrtree(X,Y,'CrossVal','on');

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

    losses = kfoldLoss(CVMdl,'Mode','individual')
    losses = 10×1
    
       42.5072
       20.3995
       22.3737
       34.4255
       40.8005
       60.2755
       19.5562
        9.2060
       29.0788
       16.3386
    
    
    boxchart(losses)

    Figure contains an axes. The axes contains an object of type boxchart.

    Обучение перекрестно проверенной обобщенной аддитивной модели (GAM) с 10 складками. Затем используйте kfoldLoss для вычисления кумулятивной потери регрессии перекрестной проверки (среднеквадратичные ошибки). Используйте ошибки, чтобы определить оптимальное количество деревьев на один предиктор (линейный термин для предиктора) и оптимальное число деревьев на один член взаимодействия.

    Кроме того, можно найти оптимальные значения fitrgam аргументы «имя-значение» с помощью bayesopt функция. Пример см. в разделе Оптимизация Cross-Validated GAM с использованием байесопта.

    Загрузить patients набор данных.

    load patients

    Создайте таблицу, содержащую переменные предиктора (Age, Diastolic, Smoker, Weight, Gender, и SelfAssessedHealthStatus) и переменной ответа (Systolic).

    tbl = table(Age,Diastolic,Smoker,Weight,Gender,SelfAssessedHealthStatus,Systolic);

    Создайте перекрестную проверку GAM с помощью опции перекрестной проверки по умолчанию. Укажите 'CrossVal' аргумент имя-значение как 'on'. Также укажите, чтобы включить 5 терминов взаимодействия.

    rng('default') % For reproducibility
    CVMdl = fitrgam(tbl,'Systolic','CrossVal','on','Interactions',5);

    При указании 'Mode' как 'cumulative' для kfoldLossзатем функция возвращает накопленные ошибки, которые являются средними ошибками по всем складкам, полученным с использованием одинакового количества деревьев для каждой складки. Отображение количества деревьев для каждой гибки.

    CVMdl.NumTrainedPerFold 
    ans = struct with fields:
          PredictorTrees: [300 300 300 300 300 300 300 300 300 300]
        InteractionTrees: [76 100 100 100 100 42 100 100 59 100]
    
    

    kfoldLoss может вычислять совокупные ошибки, используя до 300 деревьев предикторов и 42 дерева взаимодействия.

    Постройте график кумулятивных 10-кратных перекрестных подтвержденных среднеквадратичных ошибок. Определить 'IncludeInteractions' как false для исключения терминов взаимодействия из вычисления.

    L_noInteractions = kfoldLoss(CVMdl,'Mode','cumulative','IncludeInteractions',false);
    figure
    plot(0:min(CVMdl.NumTrainedPerFold.PredictorTrees),L_noInteractions)

    Figure contains an axes. The axes contains an object of type line.

    Первый элемент L_noInteractions - средняя ошибка по всем складкам, полученная с использованием только члена перехвата (константы). (J+1) -й элемент L_noInteractions - средняя ошибка, полученная с использованием члена перехвата и первого J деревья предиктора на линейный член. Построение графика совокупных потерь позволяет отслеживать изменения ошибок по мере увеличения числа деревьев предикторов в GAM.

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

    [M,I] = min(L_noInteractions)
    M = 28.0506
    
    I = 6
    

    GAM достигает минимальной ошибки, когда он включает в себя 5 деревьев предикторов.

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

    L = kfoldLoss(CVMdl,'Mode','cumulative');
    figure
    plot(0:min(CVMdl.NumTrainedPerFold.InteractionTrees),L)

    Figure contains an axes. The axes contains an object of type line.

    Первый элемент L - средняя ошибка по всем складкам, полученным с использованием члена перехвата (константы) и всех деревьев предикторов на линейный член. (J+1) -й элемент L - средняя ошибка, полученная с использованием члена перехвата, всех деревьев предиктора на линейный член и первого J деревья взаимодействия по члену взаимодействия. График показывает, что ошибка увеличивается при добавлении терминов взаимодействия.

    Если вы удовлетворены ошибкой, когда число деревьев предикторов равно 5, вы можете создать прогностическую модель, снова обучив одномерный GAM и указав 'NumTreesPerPredictor',5 без перекрестной проверки.

    Входные аргументы

    свернуть все

    Перекрестно проверенная секционированная регрессионная модель, указанная как RegressionPartitionedModel, RegressionPartitionedEnsemble, RegressionPartitionedGAM, или RegressionPartitionedSVM объект. Существует два способа создания:

    • Передать тренированную регрессионную модель, указанную в следующей таблице, в crossval объектная функция.

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

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

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

    Пример: kfoldLoss(CVMdl,'Folds',[1 2 3 5]) определяет использование первого, второго, третьего и пятого сгибов для вычисления среднеквадратичной ошибки, но для исключения четвертого сгиба.

    Сворачивание используемых индексов, указанных как положительный целочисленный вектор. Элементы Folds должно находиться в диапазоне от 1 кому CVMdl.KFold.

    Программное обеспечение использует только складки, указанные в Folds.

    Пример: 'Folds',[1 4 10]

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

    Флаг для включения условий взаимодействия модели, указанный как true или false. Этот аргумент действителен только для обобщенной аддитивной модели (GAM). То есть этот аргумент можно указать только тогда, когда CVMdl является RegressionPartitionedGAM.

    Значение по умолчанию: true если модели в CVMdl (CVMdl.Trained) содержат термины взаимодействия. Значение должно быть false если модели не содержат терминов взаимодействия.

    Пример: 'IncludeInteractions',false

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

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

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

    • Укажите собственную функцию с помощью нотации дескриптора функции.

      Предположим, что n - это количество наблюдений в данных обучения (CVMdl.NumObservations). Ваша функция должна иметь подпись lossvalue = lossfun(Y,Yfit,W), где:

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

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

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

      • Yfit является n-на-1 числовым вектором прогнозируемых откликов.

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

      Укажите свою функцию с помощью 'LossFun',@lossfun.

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

    Уровень агрегации для выходного документа, указанный как 'average', 'individual', или 'cumulative'.

    СтоимостьОписание
    'average'Вывод является скалярным средним по всем складкам.
    'individual'Выходной сигнал представляет собой вектор длины k, содержащий одно значение на единицу, где k - количество сгибов.
    'cumulative'

    Примечание

    Если требуется указать это значение, CVMdl должно быть RegressionPartitionedEnsemble объект или RegressionPartitionedGAM объект.

    • Если CVMdl является RegressionPartitionedEnsemble, то выход является вектором длины min(CVMdl.NumTrainedPerFold). Каждый элемент j - среднее значение по всем складкам, которые функция получает с помощью ансамблей, обученных у слабых учеников 1:j.

    • Если CVMdl является RegressionPartitionedGAM, то выходное значение зависит от IncludeInteractions значение.

      • Если IncludeInteractions является false, то L является (1 + min(NumTrainedPerFold.PredictorTrees))-по-1 числовой вектор столбца. Первый элемент L - среднее значение по всем складкам, которое получается с использованием только члена перехвата (константы). (j + 1)-й элемент L - среднее значение, полученное с использованием члена перехвата и первого j деревья предиктора на линейный член.

      • Если IncludeInteractions является true, то L является (1 + min(NumTrainedPerFold.InteractionTrees))-по-1 числовой вектор столбца. Первый элемент L - среднее значение по всем складкам, которое получается с использованием члена перехвата (константы) и всех предикторных деревьев на линейный член. (j + 1)-й элемент L - среднее значение, полученное с использованием члена перехвата, всех деревьев предиктора на линейный член и первого j деревья взаимодействия по члену взаимодействия.

    Пример: 'Mode','individual'

    Выходные аргументы

    свернуть все

    Потеря, возвращаемая в виде числового скалярного или числового вектора столбца.

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

    • Если Mode является 'average', то L - средняя потеря по всем складкам.

    • Если Mode является 'individual', то L - вектор числового столбца k-by-1, содержащий потери для каждой складки, где k - количество складок.

    • Если Mode является 'cumulative' и CVMdl является RegressionPartitionedEnsemble, то L является min(CVMdl.NumTrainedPerFold)-по-1 числовой вектор столбца. Каждый элемент j - средняя потеря по всем складкам, которую получает функция с помощью ансамблей, обученных у слабых учеников 1:j.

    • Если Mode является 'cumulative' и CVMdl является RegressionPartitionedGAM, то выходное значение зависит от IncludeInteractions значение.

      • Если IncludeInteractions является false, то L является (1 + min(NumTrainedPerFold.PredictorTrees))-по-1 числовой вектор столбца. Первый элемент L - средняя потеря по всем складкам, которая получается с использованием только члена перехвата (константы). (j + 1)-й элемент L - средняя потеря, полученная с использованием члена перехвата и первого j деревья предиктора на линейный член.

      • Если IncludeInteractions является true, то L является (1 + min(NumTrainedPerFold.InteractionTrees))-по-1 числовой вектор столбца. Первый элемент L - средняя потеря по всем складкам, которая получается с использованием члена перехвата (константы) и всех предикторных деревьев на линейный член. (j + 1)-й элемент L - средняя потеря, полученная с использованием члена перехвата, всех деревьев предиктора на линейный член, и первый j деревья взаимодействия по члену взаимодействия.

    Альтернативная функциональность

    Если требуется вычислить перекрестно проверенную потерю древовидной модели, можно избежать построения RegressionPartitionedModel объект путем вызова cvloss. Создание объекта дерева с перекрестной проверкой может сэкономить время, если планируется проверить его несколько раз.

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