fitrnet

Обучите регрессионую модель нейронной сети

    Описание

    Использовать fitrnet для обучения feedforward, полносвязной нейронной сети для регрессии. Первый полностью соединенный слой нейронной сети имеет соединение с сетевого входа (данные предиктора), и каждый последующий слой имеет соединение с предыдущего уровня. Каждый полносвязный слой умножает вход на весовую матрицу и затем добавляет вектор смещения. Функция активации следует за каждым полносвязным слоем, исключая последний. Конечный полностью соединенный слой создает выход сети, а именно предсказанные значения отклика. Для получения дополнительной информации см. «Нейронные Структуры сети».

    пример

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

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

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

    пример

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

    пример

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

    Примеры

    свернуть все

    Обучите регрессионую модель нейронной сети и оцените эффективность модели на тестовом наборе.

    Загрузите carbig набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов. Создайте таблицу, содержащую переменные предиктора Acceleration, Displacement, и так далее, а также переменная отклика MPG.

    load carbig
    cars = table(Acceleration,Displacement,Horsepower, ...
        Model_Year,Origin,Weight,MPG);

    Разделите данные на обучающие и тестовые наборы. Используйте приблизительно 80% наблюдений для обучения модели нейронной сети и 20% наблюдений для тестирования эффективности обученной модели на новых данных. Использование cvpartition для разбиения данных на разделы.

    rng("default") % For reproducibility of the data partition
    c = cvpartition(length(MPG),"Holdout",0.20);
    trainingIdx = training(c); % Training set indices
    carsTrain = cars(trainingIdx,:);
    testIdx = test(c); % Test set indices
    carsTest = cars(testIdx,:);

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

    Mdl = fitrnet(carsTrain,"MPG","Standardize",true)
    Mdl = 
      RegressionNeuralNetwork
               PredictorNames: {'Acceleration'  'Displacement'  'Horsepower'  'Model_Year'  'Origin'  'Weight'}
                 ResponseName: 'MPG'
        CategoricalPredictors: 5
            ResponseTransform: 'none'
              NumObservations: 314
                   LayerSizes: 10
                  Activations: 'relu'
        OutputLayerActivation: 'linear'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [1000×7 table]
    
    
      Properties, Methods
    
    

    Mdl является обученным RegressionNeuralNetwork модель. Вы можете использовать запись через точку для доступа к свойствам Mdl. Для примера можно задать Mdl.TrainingHistory для получения дополнительной информации об истории обучения модели нейронной сети.

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

    testMSE = loss(Mdl,carsTest,"MPG")
    testMSE = 16.6154
    

    Задайте структуру регрессионной модели нейронной сети, включая размер полносвязных слоев.

    Загрузите carbig набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов. Создайте матрицу X содержащие переменные предиктора Acceleration, Cylindersи так далее. Сохраните переменную отклика MPG в переменной Y.

    load carbig
    X = [Acceleration Cylinders Displacement Weight];
    Y = MPG;

    Разделите данные на обучающие данные (XTrain и YTrain) и тестовые данные (XTest и YTest). Резервируйте приблизительно 20% наблюдений для проверки и используйте остальные наблюдения для обучения.

    rng("default") % For reproducibility of the partition
    c = cvpartition(length(Y),"Holdout",0.20);
    trainingIdx = training(c); % Indices for the training set
    XTrain = X(trainingIdx,:);
    YTrain = Y(trainingIdx);
    testIdx = test(c); % Indices for the test set
    XTest = X(testIdx,:);
    YTest = Y(testIdx);

    Обучите регрессионую модель нейронной сети. Задайте, чтобы стандартизировать данные предиктора и иметь 30 выходов в первом полностью соединенном слое и 10 выходов во втором полностью соединенном слое. По умолчанию оба слоя используют функцию активации с выпрямленным линейным модулем (ReLU). Можно изменить функции активации для полносвязных слоев с помощью Activations аргумент имя-значение.

    Mdl = fitrnet(XTrain,YTrain,"Standardize",true, ...
        "LayerSizes",[30 10])
    Mdl = 
      RegressionNeuralNetwork
                 ResponseName: 'Y'
        CategoricalPredictors: []
            ResponseTransform: 'none'
              NumObservations: 318
                   LayerSizes: [30 10]
                  Activations: 'relu'
        OutputLayerActivation: 'linear'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [1000×7 table]
    
    
      Properties, Methods
    
    

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

    Mdl.LayerWeights{1}
    ans = 30×4
    
       -1.0617    0.1287    0.0797    0.4648
       -0.6497   -1.4565   -2.6026    2.6962
       -0.6420    0.2744   -0.0234   -0.0252
       -1.9727   -0.4665   -0.5833    0.9371
       -0.4373    0.1607    0.3930    0.7859
        0.5091   -0.0032   -0.6503   -1.6694
        0.0123   -0.2624   -2.2928   -1.0965
       -0.1386    1.2747    0.4085    0.5395
       -0.1755    1.5641   -3.1896   -1.1336
        0.4401    0.4942    1.8957   -1.1617
          ⋮
    
    
    Mdl.LayerBiases{1}
    ans = 30×1
    
       -1.3086
       -1.6205
       -0.7815
        1.5382
       -0.5256
        1.2394
       -2.3078
       -1.0709
       -1.8898
        1.9443
          ⋮
    
    

    Итоговый полносвязный слой имеет один выход. Количество выходов слоя соответствует первой размерности весов слоя и смещений слоя.

    size(Mdl.LayerWeights{end})
    ans = 1×2
    
         1    10
    
    
    size(Mdl.LayerBiases{end})
    ans = 1×2
    
         1     1
    
    

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

    testMSE = loss(Mdl,XTest,YTest)
    testMSE = 17.2022
    

    Сравните предсказанные значения отклика набора тестов с истинными значениями отклика. Постройте график прогнозируемых миль на галлон (MPG) вдоль вертикальной оси и истинного MPG вдоль горизонтальной оси. Точки на опорной линии указывают на правильные предсказания. Хорошая модель производит предсказания, которые разбросаны рядом с линией.

    testPredictions = predict(Mdl,XTest);
    plot(YTest,testPredictions,".")
    hold on
    plot(YTest,YTest)
    hold off
    xlabel("True MPG")
    ylabel("Predicted MPG")

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

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

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

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

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

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

    Mdl = fitrnet(tblTrain,"Systolic", ...
        "ValidationData",tblValidation, ...
        "Verbose",1);
    |==========================================================================================|
    | Iteration  | Train Loss | Gradient   | Step       | Iteration  | Validation | Validation |
    |            |            |            |            | Time (sec) | Loss       | Checks     |
    |==========================================================================================|
    |           1|  516.021993| 3220.880047|    0.644473|    0.005193|  568.289202|           0|
    |           2|  313.056754|  229.931405|    0.067026|    0.002658|  304.023695|           0|
    |           3|  308.461807|  277.166516|    0.011122|    0.001363|  296.935608|           0|
    |           4|  262.492770|  844.627934|    0.143022|    0.000531|  240.559640|           0|
    |           5|  169.558740| 1131.714363|    0.336463|    0.000652|  152.531663|           0|
    |           6|   89.134368|  362.084104|    0.382677|    0.001059|   83.147478|           0|
    |           7|   83.309729|  994.830303|    0.199923|    0.000515|   76.634122|           0|
    |           8|   70.731524|  327.637362|    0.041366|    0.000361|   66.421750|           0|
    |           9|   66.650091|  124.369963|    0.125232|    0.000380|   65.914063|           0|
    |          10|   66.404753|   36.699328|    0.016768|    0.000363|   65.357335|           0|
    |==========================================================================================|
    | Iteration  | Train Loss | Gradient   | Step       | Iteration  | Validation | Validation |
    |            |            |            |            | Time (sec) | Loss       | Checks     |
    |==========================================================================================|
    |          11|   66.357143|   46.712988|    0.009405|    0.001130|   65.306106|           0|
    |          12|   66.268225|   54.079264|    0.007953|    0.001023|   65.234391|           0|
    |          13|   65.788550|   99.453225|    0.030942|    0.000436|   64.869708|           0|
    |          14|   64.821095|  186.344649|    0.048078|    0.000295|   64.191533|           0|
    |          15|   62.353896|  319.273873|    0.107160|    0.000290|   62.618374|           0|
    |          16|   57.836593|  447.826470|    0.184985|    0.000287|   60.087065|           0|
    |          17|   51.188884|  524.631067|    0.253062|    0.000287|   56.646294|           0|
    |          18|   41.755601|  189.072516|    0.318515|    0.000286|   49.046823|           0|
    |          19|   37.539854|   78.602559|    0.382284|    0.000290|   44.633562|           0|
    |          20|   36.845322|  151.837884|    0.211286|    0.000286|   47.291367|           1|
    |==========================================================================================|
    | Iteration  | Train Loss | Gradient   | Step       | Iteration  | Validation | Validation |
    |            |            |            |            | Time (sec) | Loss       | Checks     |
    |==========================================================================================|
    |          21|   36.218289|   62.826818|    0.142748|    0.000362|   46.139104|           2|
    |          22|   35.776921|   53.606315|    0.215188|    0.000321|   46.170460|           3|
    |          23|   35.729085|   24.400342|    0.060096|    0.001023|   45.318023|           4|
    |          24|   35.622031|    9.602277|    0.121153|    0.000289|   45.791861|           5|
    |          25|   35.573317|   10.735070|    0.126854|    0.000291|   46.062826|           6|
    |==========================================================================================|
    

    Создайте график, который сравнивает среднюю квадратичную невязку обучения (MSE) и MSE валидации при каждой итерации. По умолчанию fitrnet сохраняет информацию о потерях внутри TrainingHistory свойство объекта Mdl. Вы можете получить доступ к этой информации с помощью записи через точку.

    iteration = Mdl.TrainingHistory.Iteration;
    trainLosses = Mdl.TrainingHistory.TrainingLoss;
    valLosses = Mdl.TrainingHistory.ValidationLoss;
    plot(iteration,trainLosses,iteration,valLosses)
    legend(["Training","Validation"])
    xlabel("Iteration")
    ylabel("Mean Squared Error")

    Проверьте итерацию, которая соответствует минимальному MSE валидации. Конечная возвращенная модель Mdl - модель, обученная на этой итерации.

    [~,minIdx] = min(valLosses);
    iteration(minIdx)
    ans = 19
    

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

    Загрузите carbig набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов. Создайте таблицу, содержащую переменные предиктора Acceleration, Displacement, и так далее, а также переменная отклика MPG. Удалите наблюдения из таблицы с отсутствующими значениями.

    load carbig
    tbl = table(Acceleration,Displacement,Horsepower, ...
        Model_Year,Origin,Weight,MPG);
    cars = rmmissing(tbl);

    Создайте cvpartition объект для 5-кратной перекрестной проверки. cvp разбивает данные на пять складок, где каждая складка имеет примерно одинаковое количество наблюдений. Установите значение по умолчанию для случайного seed для воспроизводимости раздела.

    rng("default")
    n = size(cars,1);
    cvp = cvpartition(n,"KFold",5);

    Вычислите среднюю квадратичную невязку перекрестной валидации (MSE) для моделей регрессии нейронной сети с различными сильными сторонами регуляризации. Попробуйте силы регуляризации порядка 1/n, где n - количество наблюдений. Задайте, чтобы стандартизировать данные перед обучением моделей нейронной сети.

    1/n
    ans = 0.0026
    
    lambda = (0:0.5:5)*1e-3;
    cvloss = zeros(length(lambda),1);
    for i = 1:length(lambda)
        cvMdl = fitrnet(cars,"MPG","Lambda",lambda(i), ...
            "CVPartition",cvp,"Standardize",true);
        cvloss(i) = kfoldLoss(cvMdl);
    end

    Постройте график результатов. Найдите силу регуляризации, соответствующую самой низкой MSE перекрестной валидации.

    plot(lambda,cvloss)
    xlabel("Regularization Strength")
    ylabel("Cross-Validation Loss")

    [~,idx] = min(cvloss);
    bestLambda = lambda(idx)
    bestLambda = 0
    

    Обучите регрессионую модель нейронной сети с помощью bestLambda прочность на регуляризацию.

    Mdl = fitrnet(cars,"MPG","Lambda",bestLambda, ...
        "Standardize",true)
    Mdl = 
      RegressionNeuralNetwork
               PredictorNames: {'Acceleration'  'Displacement'  'Horsepower'  'Model_Year'  'Origin'  'Weight'}
                 ResponseName: 'MPG'
        CategoricalPredictors: 5
            ResponseTransform: 'none'
              NumObservations: 392
                   LayerSizes: 10
                  Activations: 'relu'
        OutputLayerActivation: 'linear'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [1000×7 table]
    
    
      Properties, Methods
    
    

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

    свернуть все

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

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

    • Если Tbl содержит переменную отклика, и необходимо использовать только подмножество остальных переменных в Tbl в качестве предикторов задайте формулу при помощи formula.

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

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

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

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

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

    Объяснительная модель переменной отклика и подмножества переменных предиктора, заданная в виде вектора символов или строкового скаляра в форме 'Y~x1+x2+x3'. В этой форме Y представляет переменную отклика, и x1, x2, и x3 представляют переменные предиктора.

    Чтобы задать подмножество переменных в Tbl в качестве предикторов для настройки модели используйте формулу. Если вы задаете формулу, то программное обеспечение не использует никаких переменных в Tbl которые не появляются в formula.

    Имена переменных в формуле должны быть обоими именами переменных в Tbl (Tbl.Properties.VariableNames) и действительный MATLAB® идентификаторы. Можно проверить имена переменных в Tbl при помощи isvarname функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName функция.

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

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

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

    Данные предиктора, используемые для обучения модели, заданные как числовая матрица.

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

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

    Чтобы задать имена предикторов в порядке их внешнего вида в X, используйте PredictorNames аргумент имя-значение.

    Примечание

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

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

    Примечание

    Программное обеспечение лечит NaN, пустой символьный вектор (''), пустая строка (""), <missing>, и <undefined> элементы как отсутствующие значения и удаляет наблюдения с любой из этих характеристик:

    • Отсутствующее значение в ответе (для примера, Y или ValidationData{2})

    • По крайней мере, одно отсутствующее значение в наблюдении предиктора (для примера, строка в X или ValidationData{1})

    • NaN значение или 0 вес (для примера, значение в Weights или ValidationData{3})

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

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

    Пример: fitrnet(X,Y,'LayerSizes',[10 10],'Activations',["relu","tanh"]) задает создание нейронной сети с двумя полносвязными слоями, каждый с 10 выходами. Первый слой использует функцию активации выпрямленного линейного модуля (ReLU), а второй - функцию активации гиперболического тангенса.
    Опции нейронной сети

    свернуть все

    Размеры полносвязных слоев в модели нейронной сети, заданные как положительный целочисленный вектор. i-й элемент LayerSizes - количество выходов в i-м полностью соединенном слое модели нейронной сети.

    LayerSizes не включает размер конечного полносвязного слоя. Для получения дополнительной информации см. «Нейронные Структуры сети».

    Пример: 'LayerSizes',[100 25 10]

    Функции активации для полносвязных слоев модели нейронной сети, заданные как вектор символов, строковый скаляр, строковые массивы или массив ячеек из векторов символов со значениями из этой таблицы.

    ЗначениеОписание
    'relu'

    Функция выпрямленного линейного модуля (ReLU) - выполняет операцию порога для каждого элемента входа, где любое значение, меньше нуля, устанавливается в ноль, то есть,

    f(x)={x,x00,x<0

    'tanh'

    Функция гиперболического тангенса (tanh) - применяет tanh функцию каждому входному элементу

    'sigmoid'

    Сигмоидная функция - Выполняет следующую операцию на каждом входном элементе:

    f(x)=11+ex

    'none'

    Единичная функция - Возвращает каждый входной элемент, не выполняя никакого преобразования, то есть f (x) = x

    • Если вы задаете только одну функцию активации, то Activations - функция активации для каждого полносвязного слоя модели нейронной сети, исключая конечный полносвязный слой (см. Neural Структуры сети).

    • Если вы задаете массив функций активации, то i-й элемент Activations - функция активации для i-го слоя модели нейронной сети.

    Пример: 'Activations','sigmoid'

    Функция для инициализации полносвязных весов слоев, заданная как 'glorot' или 'he'.

    ЗначениеОписание
    'glorot'Инициализируйте веса с помощью инициализатора Glorot [1] (также известного как инициализатор Xavier). Для каждого слоя инитализатор Глорота независимо выбирает из равномерного распределения с нулем среднего и переменным 2/(I+O), где I - размер и O входных параметров - размер выхода для слоя.
    'he'Инициализируйте веса с помощью инициализатора He [2]. Для каждого слоя инициализатор He отбирает выборки из нормального распределения с нулем среднего и отклонением 2/I, где I - вход сигнала для слоя.

    Пример: 'LayerWeightsFunction','he'

    Тип смещений начального полносвязного слоя, заданный как 'zeros' или 'ones'.

    • Если вы задаете значение 'zeros'затем каждый полностью соединенный слой имеет начальное смещение 0.

    • Если вы задаете значение 'ones'затем каждый полностью соединенный слой имеет начальное смещение 1.

    Пример: 'LayerBiasesInitializer','ones'

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

    Размерность наблюдения данных предиктора, заданная как 'rows' или 'columns'.

    Примечание

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

    Пример: 'ObservationsIn','columns'

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

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

    Пример: 'Lambda',1e-4

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

    Флаг для стандартизации данных предиктора, заданный как числовой или логический 0 (false) или 1 (true). Если вы задаете Standardize на trueзатем программное обеспечение центрирует и масштабирует каждую переменную числового предиктора на соответствующее среднее значение столбца и стандартное отклонение. Программное обеспечение не стандартизирует категориальные предикторы.

    Пример: 'Standardize',true

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

    Опции управления сходимостью

    свернуть все

    Уровень подробностей, заданный как 0 или 1. The 'Verbose' аргумент name-value управляет объемом диагностической информации, которая fitrnet отображается в командной строке.

    ЗначениеОписание
    0fitrnet не отображает диагностическую информацию.
    1fitrnet периодически отображает диагностическую информацию.

    По умолчанию StoreHistory установлено в true и fitrnet сохраняет диагностическую информацию внутри Mdl. Использование Mdl.TrainingHistory для доступа к диагностической информации.

    Пример: 'Verbose',1

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

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

    Примечание

    Чтобы использовать этот аргумент «имя-значение», задайте Verbose на 1.

    Пример: 'VerboseFrequency',5

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

    Флаг для хранения истории обучения в виде числа или логического 0 (false) или 1 (true). Если StoreHistory установлено в true, затем программное обеспечение хранит диагностическую информацию внутри Mdl, к которому можно получить доступ при помощи Mdl.TrainingHistory.

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

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

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

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

    Пример: 'IterationLimit',1e8

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

    Относительный допуск градиента, заданный как неотрицательный скаляр.

    Давайте t быть функцией потерь при обучении t итерации, t быть градиентом функции потерь относительно весов и смещений при t итерации, и 0 быть градиентом функции потерь в начальной точке. Если max|t|aGradientTolerance, где a=max(1,min|t|,max|0|)затем процесс обучения прекращается.

    Пример: 'GradientTolerance',1e-5

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

    Допуск потерь, заданный как неотрицательный скаляр.

    Если потеря функции при некоторой итерации меньше LossToleranceзатем процесс обучения прекращается.

    Пример: 'LossTolerance',1e-8

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

    Допуск размера шага, заданный как неотрицательный скаляр.

    Если размер шага при некоторой итерации меньше StepToleranceзатем процесс обучения прекращается.

    Пример: 'StepTolerance',1e-4

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

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

    Во время процесса обучения программное обеспечение периодически оценивает потери на валидацию при помощи ValidationData. Если потеря валидации увеличивается больше ValidationPatience время от времени подряд, после чего программное обеспечение прекращает обучение.

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

    Если вы задаете ValidationData в качестве массива ячеек он должен иметь следующий формат:

    • ValidationData{1} должны иметь совпадающий тип данных и ориентацию в качестве данных предиктора. То есть, если вы используете матрицу предиктора X, затем ValidationData{1} должен быть m -by - p или p -by - m матрицей данных предиктора, которая имеет ту же ориентацию, что и X. Переменные предиктора в обучающих данных X и ValidationData{1} должен соответствовать. Точно так же, если вы используете таблицу предикторов Tbl данных предиктора, затем ValidationData{1} должна быть таблицей, содержащей те же переменные предиктора, которые содержатся в Tbl. Количество наблюдений в ValidationData{1} и данные предиктора могут варьироваться.

    • ValidationData{2} должен совпадать с типом данных и форматом переменной отклика, либо Y или ResponseVarName. Если ValidationData{2} это массив откликов, тогда он должен иметь то же количество элементов, что и количество наблюдений в ValidationData{1}. Если ValidationData{1} является таблицей, тогда ValidationData{2} может быть именем переменной отклика в таблице. Если вы хотите использовать ту же ResponseVarName или formula, можно задать ValidationData{2} как [].

    • Опционально можно задать ValidationData{3} как m -мерный числовой вектор весов наблюдений или имя переменной в таблице ValidationData{1} который содержит веса наблюдений. Программа нормирует веса с данными валидации так, чтобы их сумма равнялась 1.

    Если вы задаете ValidationData и хотите отобразить потерю валидации в командной строке, установите Verbose на 1.

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

    Примечание

    Чтобы использовать этот аргумент «имя-значение», необходимо задать ValidationData.

    Пример: 'ValidationFrequency',5

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

    Условие остановки для оценок валидации, заданное как неотрицательный целочисленный скаляр. Обучение останавливается, если потеря проверки больше или равна минимальной потере валидации, вычисленной до сих пор ValidationPatience раз в строку. Можно проверить Mdl.TrainingHistory таблица, чтобы увидеть текущую сумму раз, когда потеря валидации больше или равна минимуму (Validation Checks).

    Пример: 'ValidationPatience',10

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

    Другие опции регрессии

    свернуть все

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

    ЗначениеОписание
    Вектор положительных целых чисел

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

    Если fitrnet использует подмножество входа переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. The 'CategoricalPredictors' значения не подсчитывают переменную отклика, переменную веса наблюдения и любые другие переменные, которые функция не использует.

    Логический вектор

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

    Матрица символовКаждая строка матрицы является именем переменной. Имена должны совпадать с записями в PredictorNames. Дополните имена дополнительными пробелами, чтобы каждая строка матрицы символов имела одинаковую длину.
    Строковые массивы или массив ячеек векторов символовКаждый элемент массива является именем переменной. Имена должны совпадать с записями в PredictorNames.
    'all'Все предикторы категоричны.

    По умолчанию, если данные предиктора находятся в таблице (Tbl), fitrnet принимает, что переменная категориальна, если это логический вектор, категориальный вектор, символьный массив, строковые массивы или массив ячеек из векторов символов. Если данные предиктора являются матрицей (X), fitrnet принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их с помощью 'CategoricalPredictors' аргумент имя-значение.

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

    Пример: 'CategoricalPredictors','all'

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

    Имена переменных предиктора, заданные как строковые массивы уникальных имен или массив ячеек из уникальных векторов символов. Функциональность 'PredictorNames' зависит от способа предоставления обучающих данных.

    • Если вы поставляете X и Y, тогда можно использовать 'PredictorNames' для назначения имен переменным предиктора в X.

      • Порядок имен в PredictorNames должен соответствовать порядку предиктора в X. Принимая, что X имеет ориентацию по умолчанию, с наблюдениями в строках и предикторами в столбцах, PredictorNames{1} - имя X(:,1), PredictorNames{2} - имя X(:,2)и так далее. Кроме того, size(X,2) и numel(PredictorNames) должно быть равным.

      • По умолчанию PredictorNames является {'x1','x2',...}.

    • Если вы поставляете Tbl, тогда можно использовать 'PredictorNames' выбрать, какие переменные предиктора использовать в обучении. То есть, fitrnet использует только переменные предиктора в PredictorNames и переменной отклика во время обучения.

      • PredictorNames должен быть подмножеством Tbl.Properties.VariableNames и не может включать имя переменной отклика.

      • По умолчанию PredictorNames содержит имена всех переменных предиктора.

      • Хорошей практикой является определение предикторов для обучения с использованием любой из 'PredictorNames' или formula, но не то и другое.

    Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

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

    Имя переменной отклика, заданное как вектор символов или строковый скаляр.

    • Если вы поставляете Y, тогда можно использовать 'ResponseName' чтобы задать имя для переменной отклика.

    • Если вы поставляете ResponseVarName или formula, тогда вы не можете использовать 'ResponseName'.

    Пример: 'ResponseName','response'

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

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

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

    По умолчанию Weights является ones(n,1), где n количество наблюдений в X или Tbl.

    fitrnet Нормализует веса в сумме до 1.

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

    Опции перекрестной валидации

    свернуть все

    Флаг для обучения перекрестно проверенной модели, заданный как 'on' или 'off'.

    Если вы задаете 'on', затем программное обеспечение обучает перекрестно проверенную модель с 10 складками.

    Вы можете переопределить этот параметр перекрестной проверки с помощью CVPartition, Holdout, KFold, или Leaveout аргумент имя-значение. Для создания модели с перекрестной проверкой можно использовать только один аргумент имя-значение перекрестной проверки за раз.

    Другой способ - выполнить перекрестную проверку позже путем передачи Mdl кому crossval.

    Пример: 'Crossval','on'

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

    Раздел перекрестной проверки, заданный как cvpartition объект раздела, созданный cvpartition. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.

    Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

    Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5). Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp.

    Доля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p, затем программное обеспечение завершает следующие шаги:

    1. Случайный выбор и резервирование p*100% данных в качестве данных валидации и train модели с использованием остальных данных.

    2. Сохраните компактную, обученную модель в Trained свойство перекрестно проверенной модели.

    Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

    Пример: 'Holdout',0.1

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

    Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k, затем программное обеспечение завершает следующие шаги:

    1. Случайным образом разделите данные на k наборы.

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

    3. Сохраните k компактные, обученные модели в k-by-1 вектор камеры в Trained свойство перекрестно проверенной модели.

    Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

    Пример: 'KFold',5

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

    Выходной флаг перекрестной проверки, заданный как 'on' или 'off'. Если вы задаете 'Leaveout','on', затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations свойство модели), программное обеспечение завершает следующие шаги:

    1. Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.

    2. Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained свойство перекрестно проверенной модели.

    Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

    Пример: 'Leaveout','on'

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

    свернуть все

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

    Если вы задаете любой из аргументов в виде имя-значение CrossVal, CVPartition, Holdout, KFold, или Leaveout, затем Mdl является RegressionPartitionedModel объект. В противном случае Mdl является RegressionNeuralNetwork модель.

    Ссылка на свойства Mdl, используйте запись через точку.

    Подробнее о

    свернуть все

    Структура сети

    Модель регрессии нейронной сети по умолчанию имеет следующую структуру слоя.

    СтруктураОписание

    Default neural network regression model structure, with one customizable fully connected layer with a ReLU activation

    Вход - Этот слой соответствует данным предиктора в Tbl или X.

    Первый полносвязный слой - Этот слой имеет 10 выходов по умолчанию.

    • Можно расширить слой или добавить более полносвязные слои к сети путем определения LayerSizes аргумент имя-значение.

    • Веса и смещения для этого слоя можно найти в Mdl.LayerWeights{1} и Mdl.LayerBiases{1} свойства Mdl, соответственно.

    Функция активации ReLU - fitrnet применяет эту функцию активации к первому полносвязному слою.

    • Вы можете изменить функцию активации, задав Activations аргумент имя-значение.

    Конечный полносвязный слой - Этот слой имеет один вывод.

    • Веса и смещения для этого слоя можно найти в Mdl.LayerWeights{end} и Mdl.LayerBiases{end} свойства Mdl, соответственно.

    Выход - Этот слой соответствует предсказанным значениям отклика.

    Для примера, который показывает, как регрессионная модель нейронной сети с этой структурой слоя возвращает предсказания, см. «Предсказание использования слоистой структуры регрессионной модели нейронной сети».

    Совет

    • Всегда пытайтесь стандартизировать числовые предикторы (см Standardize). Стандартизация делает предикторы нечувствительными к шкалам, на которых они измеряются.

    Алгоритмы

    свернуть все

    Обучающий решатель

    fitrnet использует алгоритм Бройдена-Флектера-Голдфарба-Шанно квази-Ньютона (LBFGS) [3] ограниченной памяти в качестве метода минимизации функции потерь, где программное обеспечение минимизирует среднюю квадратичную невязку (MSE).

    Ссылки

    [1] Глорот, Ксавьер и Йошуа Бенгио. «Понимание сложности настройки нейронных сетей с глубокой прямой связью». В Трудах тринадцатой международной конференции по искусственному интеллекту и статистике, стр. 249-256. 2010.

    [2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. «Delving into rectifers: Overpassing human-level эффективности on imagenet classification». В Трудах международной конференции IEEE по компьютерному зрению, стр. 1026-1034. 2015.

    [3] Nocedal, J. and S. J. Wright. Численная оптимизация, 2-е изд., Нью-Йорк: Спрингер, 2006.

    Введенный в R2021a