Предскажите, что ответы Используя RegressionEnsemble предсказывают блок

В этом примере показано, как обучить модель ансамбля оптимальными гиперпараметрами, и затем использовать блок RegressionEnsemble Predict для предсказания ответа в 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 категориальная переменная. Когда вы обучаете модель блоку RegressionEnsemble Predict, необходимо предварительно обработать категориальные предикторы при помощи 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' из древовидных учеников.

  • Для воспроизводимости установите случайный seed и используйте '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, который включает блок RegressionEnsemble Predict. Можно открыть модель Simulink или создать новую модель как описано в этом разделе.

Откройте модель Simulink slexCarDataRegressionEnsemblePredictExample.slx.

SimMdlName = 'slexCarDataRegressionEnsemblePredictExample'; 
open_system(SimMdlName)

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

Чтобы создать новую модель Simulink, откройте шаблон Blank Model и добавьте блок RegressionEnsemble Predict. Добавьте блоки Inport и Outport и соедините их с блоком RegressionEnsemble Predict.

Дважды кликните блок RegressionEnsemble Predict, чтобы открыть диалоговое окно Block Parameters. Укажите, что Выбор обучил параметр модели машинного обучения как ensMdl, который является именем переменной рабочей области, которая содержит обученную модель. Нажмите Кнопку Обновить. Диалоговое окно отображается, опции раньше обучали модель ensMdl в соответствии с обученной моделью машинного обучения.

Блок RegressionEnsemble Predict ожидает наблюдение, содержащее 13 значений предиктора. Дважды кликните блок Inport и установите размерности Порта на 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);

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

  • Откройте диалоговое окно Configuration Parameters. На вкладке Modeling нажмите Model Settings.

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

  • В панели Решателя, под Временем симуляции, Временем остановки набора к carsmallInput.time(end). При выборе Решателя, Типе набора к Fixed-step, и Решатель набора к discrete (no continuous states).

Для получения дополнительной информации смотрите Данные сигнала Загрузки для Симуляции (Simulink).

Симулируйте модель.

sim(SimMdlName);

Когда блок Inport обнаруживает наблюдение, он направляет наблюдение в блок RegressionTree Predict. Можно использовать Инспектора Данных моделирования (Simulink), чтобы просмотреть записанные данные блока Outport.

Смотрите также

Похожие темы