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 - средняя ошибка по всем складкам, полученная с использованием только термина точка пересечения (константа). The (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 - средняя ошибка по всем складкам, полученная с помощью термина точка пересечения (константа) и всех деревьев предикторов на линейный термин. The (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 -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))-by-1 числовой вектор-столбец. Первый элемент L является средним значением по всем складкам, которое получается с использованием только члена точки пересечения (константы). The   (j + 1)первый элемент L - среднее значение, полученное с помощью термина точки пересечения и первого j деревья предикторов на линейный член.

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

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

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

    свернуть все

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

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

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

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

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

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

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

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

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

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

    Введенный в R2011a