RegressionNeuralNetwork

Модель нейронной сети для регрессии

    Описание

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

    Создание

    Создайте RegressionNeuralNetwork объект при помощи fitrnet.

    Свойства

    расширить все

    Свойства нейронной сети

    Это свойство доступно только для чтения.

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

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

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

    Это свойство доступно только для чтения.

    Обученные веса слоев для полносвязных слоев, возвращенные как массив ячеек. i-я запись в массиве ячеек соответствует весам слоев для i-го полносвязного слоя. Для примера, Mdl.LayerWeights{1} возвращает веса для первого полносвязного слоя модели Mdl.

    LayerWeights включает веса для конечного полносвязного слоя.

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

    Это свойство доступно только для чтения.

    Выученные смещения слоя для полносвязных слоев, возвращенные как массив ячеек. i-я запись в массиве ячеек соответствует смещениям слоя для i-го полносвязного слоя. Для примера, Mdl.LayerBiases{1} возвращает смещения для первого полносвязного слоя модели Mdl.

    LayerBiases включает смещения для конечного полносвязного слоя.

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

    Это свойство доступно только для чтения.

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

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

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

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

    'tanh'

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

    'sigmoid'

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

    f(x)=11+ex

    'none'

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

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

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

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

    Это свойство доступно только для чтения.

    Функция активации для конечного полносвязного слоя, возвращенная следующим 'none'.

    Это свойство доступно только для чтения.

    Значения параметров, используемые для обучения RegressionNeuralNetwork модель, возвращенная как NeuralNetworkParams объект. ModelParameters содержит значения параметров, такие как аргументы имя-значение, используемые для обучения модели регрессионной нейронной сети.

    Доступ к свойствам ModelParameters при помощи записи через точку. Для примера получите доступ к функции, используемой для инициализации весов полносвязного слоя модели Mdl при помощи Mdl.ModelParameters.LayerWeightsInitializer.

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

    Это свойство доступно только для чтения.

    Информация о сходимости, возвращенная как массив структур.

    ОбластьОписание
    IterationsКоличество итераций обучения, используемых для обучения модели нейронной сети
    TrainingLossОбучение средней квадратичной невязки (MSE) для возвращенной модели, или resubLoss(Mdl) для Mdl модели
    GradientГрадиент функции потерь относительно весов и смещений в итерации, соответствующей возвращенной модели
    StepРазмер шага в итерации, соответствующей возвращенной модели
    TimeОбщее время, потраченное на все итерации (в секундах)
    ValidationLossВалидация MSE для возвращенной модели
    ValidationChecksМаксимальное количество раз в строке, когда потеря валидации была больше или равна минимальной потере валидации
    ConvergenceCriterionКритерий сходимости
    HistoryСм. TrainingHistory

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

    Это свойство доступно только для чтения.

    История обучения, возвращенная как таблица.

    СтолбецОписание
    IterationИтерация обучения
    TrainingLossОбучение средней квадратичной невязки (MSE) для модели при этой итерации
    GradientГрадиент функции потерь относительно весов и смещений при этой итерации
    StepРазмер шага при этой итерации
    TimeВремя, проведенное во время этой итерации (в секундах)
    ValidationLossВалидация MSE для модели на этой итерации
    ValidationChecksСуммарная сумма потерь при валидации больше или равна минимальной потере при валидации

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

    Это свойство доступно только для чтения.

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

    Свойства предиктора

    Это свойство доступно только для чтения.

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

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

    Это свойство доступно только для чтения.

    Категориальные индексы предиктора, возвращенные как вектор положительных целых чисел. Принимая, что данные предиктора содержат наблюдения в строках, CategoricalPredictors содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пустое ([]).

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

    Это свойство доступно только для чтения.

    Расширенные имена предикторов, возвращенные как массив ячеек из векторов символов. Если модель использует кодировку для категориальных переменных, то ExpandedPredictorNames включает имена, которые описывают расширенные переменные. В противном случае ExpandedPredictorNames то же, что и PredictorNames.

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

    Это свойство доступно только для чтения.

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

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

    Свойства отклика

    Это свойство доступно только для чтения.

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

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

    Это свойство доступно только для чтения.

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

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

    Это свойство доступно только для чтения.

    Функция преобразования отклика, возвращенная как 'none'. Программное обеспечение не преобразует необработанные значения отклика.

    Другие свойства данных

    Это свойство доступно только для чтения.

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

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

    Это свойство доступно только для чтения.

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

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

    Это свойство доступно только для чтения.

    Веса наблюдений, используемые для обучения модели, возвращаются как n-на-1 числовой вектор. n - количество наблюдений (NumObservations).

    Программа нормализует веса наблюдений, указанные в Weights аргумент имя-значение так, чтобы элементы W сумма до 1.

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

    Функции объекта

    compactУменьшите размер модели машинного обучения
    crossvalПерекрестная валидация модели машинного обучения
    lossПотеря для регрессионной нейронной сети
    resubLossРегрессионная потеря реституции
    resubPredictПрогнозируйте ответы для обучающих данных, используя обученную регрессионую модель
    partialDependenceВычисление частичной зависимости
    plotPartialDependenceСоздайте график частичной зависимости (PDP) и отдельные графики условного ожидания (ICE)
    predictСпрогнозируйте ответы, используя регрессионую нейронную сеть

    Примеры

    свернуть все

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

    Загрузите 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")

    Введенный в R2021a