exponenta event banner

Прогнозирование ответов с использованием блока прогнозирования RegingEnsemble

В этом примере показано, как обучить модель ансамбля оптимальным гиперпараметрам, а затем использовать блок прогнозирования RegingEnsemble для прогнозирования отклика в Simulink ®. Блок принимает наблюдение (данные предиктора) и возвращает предсказанный отклик для наблюдения с использованием обученной модели регрессионного ансамбля .

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

Загрузить carbig набор данных, содержащий замеры автомобилей, сделанные в 1970-х и начале 1980-х годов.

load carbig
whos
  Name                Size            Bytes  Class     Attributes

  Acceleration      406x1              3248  double              
  Cylinders         406x1              3248  double              
  Displacement      406x1              3248  double              
  Horsepower        406x1              3248  double              
  MPG               406x1              3248  double              
  Mfg               406x13            10556  char                
  Model             406x36            29232  char                
  Model_Year        406x1              3248  double              
  Origin            406x7              5684  char                
  Weight            406x1              3248  double              
  cyl4              406x5              4060  char                
  org               406x7              5684  char                
  when              406x5              4060  char                

Origin является категориальной переменной. При подготовке модели для блока прогнозирования RegingEnsemble необходимо предварительно обработать категориальные предикторы с помощью dummyvar функция для включения категориальных предикторов в модель. Вы не можете использовать 'CategoricalPredictors' аргумент «имя-значение». Создать фиктивные переменные для Origin.

c_Origin = categorical(cellstr(Origin));
d_Origin = dummyvar(c_Origin);

dummyvar создает фиктивные переменные для каждой категории c_Origin. Определение количества категорий в c_Origin и количество фиктивных переменных в d_Origin.

unique(cellstr(Origin))
ans = 7x1 cell
    {'England'}
    {'France' }
    {'Germany'}
    {'Italy'  }
    {'Japan'  }
    {'Sweden' }
    {'USA'    }

size(d_Origin)
ans = 1×2

   406     7

dummyvar создает фиктивные переменные для каждой категории Origin.

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

X = [Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight,d_Origin];
Y = MPG;

Обучение ансамбля с помощью X и Y с этими опциями:

  • Определить 'OptimizeHyperparameters' как 'auto' обучить ансамбль оптимальным гиперпараметрам. 'auto' опция находит оптимальные значения для 'Method','NumLearningCycles', и 'LearnRate' (для применимых методов) fitrensemble и 'MinLeafSize' обучающихся деревьям.

  • Для воспроизводимости задайте случайное начальное число и используйте 'expected-improvement-plus' функция приобретения. Также для воспроизводимости алгоритма случайного леса укажите 'Reproducible' как true для обучающихся на деревьях.

rng('default')
t = templateTree('Reproducible',true);
ensMdl = fitrensemble(X,Y,'Learners',t, ...
    'OptimizeHyperparameters','auto', ...
    'HyperparameterOptimizationOptions', ...
    struct('AcquisitionFunctionName','expected-improvement-plus'))
|===================================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   |       Method | NumLearningC-|    LearnRate |  MinLeafSize |
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    |              | ycles        |              |              |
|===================================================================================================================================|
|    1 | Best   |      2.7403 |      5.2831 |      2.7403 |      2.7403 |          Bag |          184 |            - |           69 |
|    2 | Accept |      4.1317 |     0.40701 |      2.7403 |      2.8143 |          Bag |           10 |            - |          176 |
|    3 | Best   |      2.1687 |       4.661 |      2.1687 |      2.1689 |          Bag |          118 |            - |            2 |
|    4 | Accept |      2.2747 |      1.1426 |      2.1687 |      2.1688 |      LSBoost |           24 |      0.37779 |            7 |
|    5 | Best   |      2.1421 |      2.6108 |      2.1421 |      2.1422 |          Bag |           75 |            - |            1 |
|    6 | Best   |      2.1365 |      19.045 |      2.1365 |      2.1365 |          Bag |          500 |            - |            1 |
|    7 | Accept |      2.4302 |      1.2523 |      2.1365 |      2.1365 |      LSBoost |           37 |      0.94779 |           71 |
|    8 | Accept |      2.1813 |      15.474 |      2.1365 |      2.1365 |      LSBoost |          497 |     0.023582 |            1 |
|    9 | Accept |      6.1992 |      3.5048 |      2.1365 |      2.1363 |      LSBoost |           91 |    0.0012439 |            1 |
|   10 | Accept |      2.2119 |        16.1 |      2.1365 |      2.1363 |      LSBoost |          497 |     0.087441 |           11 |
|   11 | Accept |      4.7782 |     0.59399 |      2.1365 |      2.1366 |      LSBoost |           15 |     0.055744 |            1 |
|   12 | Accept |      2.3093 |      16.744 |      2.1365 |      2.1366 |      LSBoost |          493 |      0.39665 |            1 |
|   13 | Accept |      4.1304 |      5.6411 |      2.1365 |      2.1366 |      LSBoost |          198 |      0.33031 |          201 |
|   14 | Accept |       2.595 |     0.64113 |      2.1365 |      2.1367 |      LSBoost |           16 |      0.99848 |            1 |
|   15 | Accept |      2.6643 |     0.96942 |      2.1365 |      2.1363 |      LSBoost |           25 |      0.97637 |            5 |
|   16 | Accept |      2.2388 |     0.49288 |      2.1365 |      2.1363 |      LSBoost |           11 |      0.42205 |            1 |
|   17 | Accept |      4.1304 |      0.6568 |      2.1365 |      2.1789 |      LSBoost |           19 |      0.79808 |          202 |
|   18 | Accept |      2.3399 |      2.3878 |      2.1365 |      2.1363 |      LSBoost |           71 |      0.44856 |            1 |
|   19 | Accept |      2.7734 |      3.5709 |      2.1365 |      2.1394 |      LSBoost |          107 |     0.020776 |            2 |
|   20 | Accept |      2.3204 |      12.775 |      2.1365 |       2.136 |          Bag |          463 |            - |           16 |
|===================================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   |       Method | NumLearningC-|    LearnRate |  MinLeafSize |
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    |              | ycles        |              |              |
|===================================================================================================================================|
|   21 | Accept |      2.2146 |      13.957 |      2.1365 |      2.1361 |      LSBoost |          491 |      0.10045 |           55 |
|   22 | Accept |      4.3329 |     0.62329 |      2.1365 |       2.137 |      LSBoost |           11 |     0.095932 |            1 |
|   23 | Accept |      2.6395 |     0.53374 |      2.1365 |      2.1366 |      LSBoost |           15 |      0.14881 |           17 |
|   24 | Accept |      2.6223 |      15.344 |      2.1365 |       2.137 |      LSBoost |          497 |      0.96521 |           27 |
|   25 | Accept |       2.197 |      8.5088 |      2.1365 |      2.1366 |      LSBoost |          268 |     0.066671 |           29 |
|   26 | Accept |      2.4544 |     0.45973 |      2.1365 |      2.1398 |      LSBoost |           10 |      0.96554 |           28 |
|   27 | Accept |      2.1581 |      15.347 |      2.1365 |      2.1386 |      LSBoost |          499 |     0.022533 |           37 |
|   28 | Accept |       2.187 |      16.788 |      2.1365 |      2.1402 |      LSBoost |          499 |     0.022909 |            6 |
|   29 | Accept |      4.1304 |      13.939 |      2.1365 |      2.1366 |      LSBoost |          494 |     0.035155 |          202 |
|   30 | Accept |      2.2396 |      18.744 |      2.1365 |      2.1366 |      LSBoost |          485 |      0.21133 |           21 |

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 280.2517 seconds
Total objective function evaluation time: 218.1981

Best observed feasible point:
    Method    NumLearningCycles    LearnRate    MinLeafSize
    ______    _________________    _________    ___________

     Bag             500              NaN            1     

Observed objective function value = 2.1365
Estimated objective function value = 2.1366
Function evaluation time = 19.0453

Best estimated feasible point (according to models):
    Method    NumLearningCycles    LearnRate    MinLeafSize
    ______    _________________    _________    ___________

     Bag             500              NaN            1     

Estimated objective function value = 2.1366
Estimated function evaluation time = 17.1759
ensMdl = 
  RegressionBaggedEnsemble
                         ResponseName: 'Y'
                CategoricalPredictors: []
                    ResponseTransform: 'none'
                      NumObservations: 398
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                           NumTrained: 500
                               Method: 'Bag'
                         LearnerNames: {'Tree'}
                 ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                              FitInfo: []
                   FitInfoDescription: 'None'
                       Regularization: []
                            FResample: 1
                              Replace: 1
                     UseObsForLearner: [398x500 logical]


  Properties, Methods

fitrensemble возвращает RegressionBaggedEnsemble потому что функция находит алгоритм случайного леса ('Bag') как оптимальный метод.

Создание модели Simulink

В этом примере представлена модель Simulink slexCarDataRegressionEnsemblePredictExample.slx, который включает блок прогнозирования RegingEnsemble. Можно открыть модель Simulink или создать новую модель, как описано в этом разделе.

Открытие модели Simulink slexCarDataRegressionEnsemblePredictExample.slx.

SimMdlName = 'slexCarDataRegressionEnsemblePredictExample'; 
open_system(SimMdlName)

PreLoadFcn функция обратного вызова slexCarDataRegressionEnsemblePredictExample включает код для загрузки данных выборки, обучения модели с использованием оптимальных гиперпараметров и создания входного сигнала для модели Simulink. При открытии модели Simulink программа запускает код в PreLoadFcn перед загрузкой модели Simulink. Чтобы просмотреть функцию обратного вызова, в разделе Настройка (Setup) на вкладке Моделирование (Modeling) щелкните Параметры модели (Model Settings) и выберите Свойства модели (Model Properties). Затем на вкладке Callbacks выберите PreLoadFcn функция обратного вызова на панели Обратные вызовы модели.

Чтобы создать новую модель Simulink, откройте шаблон «Пустая модель» и добавьте блок «Прогнозирование ансамбля». Добавьте блоки Inport и Outport и подключите их к блоку RegingEnsemble Predict.

Чтобы открыть диалоговое окно «Параметры блока», дважды щелкните блок «Прогнозирование ансамбля». Укажите параметр Выбрать обучаемую модель машинного обучения (Select trained machine learning model) как ensMdl, которое является именем переменной рабочей области, содержащей обучаемую модель. "Нажмите кнопку ""Обновить""". В диалоговом окне отображаются опции, используемые для обучения модели. ensMdl в разделе Обучаемая модель машинного обучения.

Блок прогнозирования RegingEnsemble ожидает наблюдения, содержащего 13 предикторных значений. Дважды щелкните блок «Inport» и установите для параметра «Port dimensions» значение 13 на вкладке «Signal Attributes».

Создайте входной сигнал в виде массива структуры для модели Simulink. Структурный массив должен содержать следующие поля:

  • time - моменты времени, в которые наблюдения входят в модель. Ориентация должна соответствовать наблюдениям в данных предиктора. Так, в этом примере, time должен быть вектором столбца.

  • signals - Структурный массив 1 к 1, описывающий входные данные и содержащий поля values и dimensions, где values является матрицей данных предиктора, и dimensions - количество переменных предиктора.

Создайте соответствующий структурный массив для slexCarDataRegressionEnsemblePredictExample модель из carsmall набор данных. При преобразовании Origin в carsmall в categorical массив типов данных c_Origin_small, использовать categories(c_Origin) чтобы c_Origin и c_Origin_small имеют одинаковое количество категорий в одном порядке.

load carsmall
c_Origin_small = categorical(cellstr(Origin),categories(c_Origin));
d_Origin_small = dummyvar(c_Origin_small);
testX = [Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight,d_Origin_small];
testX = rmmissing(testX);
carsmallInput.time = (0:size(testX,1)-1)';
carsmallInput.signals(1).values = testX;
carsmallInput.signals(1).dimensions = size(testX,2);

Чтобы импортировать данные сигнала из рабочей области:

  • Откройте диалоговое окно «Параметры конфигурации». На вкладке Моделирование (Modeling) щелкните Параметры модели (Model Settings).

  • На панели Импорт/экспорт данных установите флажок Ввод и введите carsmallInput в соседнем текстовом поле.

  • На панели Решатель (Solver) в разделе Время моделирования (Simulation time) задайте для параметра Время остановки (Stop time) значение carsmallInput.time(end). В разделе Выбор решателя (Solver selection) задайте для параметра Тип (Type) значение Fixed-stepи установите для решателя значение discrete (no continuous states).

Дополнительные сведения см. в разделе Загрузка данных сигналов для моделирования (Simulink).

Моделирование модели.

sim(SimMdlName);

Когда блок Inport обнаруживает наблюдение, он направляет его в блок прогнозирования RegingTree. Инспектор данных моделирования (Simulation Data Inspector, Simulink) можно использовать для просмотра зарегистрированных данных блока исходящего трафика.

См. также

Связанные темы