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 функция. Для примера смотрите, Оптимизируют перекрестный Подтвержденный GAM Используя bayesopt.

    Загрузите 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) элемент th 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) элемент th 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

    Типы данных: логический

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

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

    • Задайте свою собственную функцию с помощью обозначения указателя на функцию.

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

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

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

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

      • Yfit n-by-1 числовой вектор из предсказанных ответов.

      • W n-by-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)элемент th L полученное использование среднего значения термина точки пересечения и первого j деревья предиктора на линейный член.

      • Если IncludeInteractions true, затем L   (1 + min(NumTrainedPerFold.InteractionTrees))- 1 числовой вектор-столбец. Первый элемент L среднее значение по всем сгибам, которое получено с помощью точки пересечения (постоянный) термин и все деревья предиктора на линейный член.   (j + 1)элемент th 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)элемент th L полученное использование средней потери термина точки пересечения и первого j деревья предиктора на линейный член.

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

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

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

    Введенный в R2011a