exponenta event banner

fitrnet

Модель регрессии нейронной сети поезда

    Описание

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

    пример

    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 объект для пятикратной перекрестной проверки. cvp разбивает данные на пять складок, где каждая складка имеет примерно одинаковое количество наблюдений. Задайте для случайного начального числа значение по умолчанию для воспроизводимости раздела.

    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,x≥00,x<0

    'tanh'

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

    'sigmoid'

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

    f (x) = 11 + e − x

    'none'

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

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

    • Если указан массив функций активации, то 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. '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|≤a⋅GradientTolerance, где 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 и хотите отобразить потерю проверки в командной строке, set Verbose кому 1.

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

    Примечание

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

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

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

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

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

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

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

    свернуть все

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

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

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

    Если fitrnet использует подмножество входных переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. '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.

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

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

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

    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-by-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соответственно.

    Output (Выход) - этот уровень соответствует прогнозируемым значениям отклика.

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

    Совет

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

    Алгоритмы

    свернуть все

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

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

    Ссылки

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

    [2] Хэ, Каймин, Сянъу Чжан, Шаоцин Жэнь и Цзянь Сунь. «Углубляясь в выпрямители: Превосходя показатели человеческого уровня по классификации имидженетов». В трудах международной конференции IEEE по компьютерному зрению, стр. 1026-1034. 2015.

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

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