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

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

Обучите модель классификации оптимальными гиперпараметрами

Загрузите CreditRating_Historical набор данных. Этот набор данных содержит идентификаторы клиентов и их финансовые отношения, промышленные метки и кредитные рейтинги. Определите объем выборки.

tbl = readtable('CreditRating_Historical.dat');
n = numel(tbl)
n = 31456

Отобразите первые три строки таблицы.

head(tbl,3)
ans=3×8 table
     ID      WC_TA    RE_TA    EBIT_TA    MVE_BVTD    S_TA     Industry    Rating
    _____    _____    _____    _______    ________    _____    ________    ______

    62394    0.013    0.104     0.036      0.447      0.142       3        {'BB'}
    48608    0.232    0.335     0.062      1.969      0.281       8        {'A' }
    42444    0.311    0.367     0.074      1.935      0.366       1        {'A' }

tbl.Industry категориальная переменная для промышленной метки. Когда вы обучаете модель блоку ClassificationEnsemble Predict, необходимо предварительно обработать категориальные предикторы при помощи dummyvar функция, чтобы включать категориальные предикторы в модель. Вы не можете использовать 'CategoricalPredictors' аргумент значения имени. Создайте фиктивные переменные для tbl.Industry.

d = dummyvar(tbl.Industry);

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

unique(tbl.Industry)'
ans = 1×12

     1     2     3     4     5     6     7     8     9    10    11    12

size(d)
ans = 1×2

        3932          12

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

X = [table2array(tbl(:,2:6)) d];
Y = tbl.Rating;

X числовая матрица, которая содержит 17 переменных: пять финансовых отношений и 12 фиктивных переменных для промышленной метки. X не использует tbl.ID потому что переменная не полезна в предсказании кредитных рейтингов. Y массив ячеек из символьных векторов, который содержит соответствующие кредитные рейтинги.

Предположим, что вы получаете данные в последовательности, и у вас есть первые 3 000 наблюдений, но вы еще не получили последние 932. Разделите данные в настоящие и будущие выборки.

prsntX = X(1:3000,:);
prsntY = Y(1:3000);
ftrX = X(3001:end,:);
ftrY = Y(3001:end);

Обучите ансамбль, использующий все в настоящее время доступные данные prsntX и prsntY с этими опциями:

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

  • Для воспроизводимости установите случайный seed и используйте 'expected-improvement-plus' функция захвата. Кроме того, для воспроизводимости случайного лесного алгоритма задайте 'Reproducible' как true для древовидных учеников.

  • Задайте порядок классов при помощи 'ClassNames' аргумент значения имени. Выходные значения от порта счета блока ClassificationEnsemble Predict имеют тот же порядок.

rng('default')
t = templateTree('Reproducible',true);
ensMdl = fitcensemble(prsntX,prsntY, ...
    'ClassNames',{'AAA' 'AA' 'A' 'BBB' 'BB' 'B' 'CCC'}, ...
    'OptimizeHyperparameters','auto','Learners',t, ...
    'HyperparameterOptimizationOptions', ...
    struct('AcquisitionFunctionName','expected-improvement-plus'))
|===================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Method | NumLearningC-|    LearnRate |  MinLeafSize |
|      | result |             | runtime     | (observed)  | (estim.)    |              | ycles        |              |              |
|===================================================================================================================================|
|    1 | Best   |     0.51133 |      13.652 |     0.51133 |     0.51133 |   AdaBoostM2 |          429 |     0.082478 |          871 |
|    2 | Best   |     0.26133 |      18.827 |     0.26133 |     0.27463 |   AdaBoostM2 |          492 |      0.19957 |            4 |
|    3 | Accept |     0.85133 |     0.76925 |     0.26133 |     0.28421 |     RUSBoost |           10 |      0.34528 |         1179 |
|    4 | Accept |       0.263 |     0.61254 |     0.26133 |     0.26124 |   AdaBoostM2 |           13 |      0.27107 |           10 |
|    5 | Best   |        0.26 |      0.9413 |        0.26 |     0.26003 |          Bag |           10 |            - |            1 |
|    6 | Accept |     0.28933 |      1.7101 |        0.26 |      0.2602 |          Bag |           36 |            - |          101 |
|    7 | Best   |     0.25667 |      1.3583 |     0.25667 |     0.25726 |   AdaBoostM2 |           33 |      0.99501 |           11 |
|    8 | Best   |       0.244 |      28.725 |       0.244 |     0.24406 |          Bag |          460 |            - |            7 |
|    9 | Accept |       0.246 |        4.19 |       0.244 |     0.24435 |          Bag |           60 |            - |            4 |
|   10 | Accept |     0.25533 |      1.3969 |       0.244 |     0.24437 |   AdaBoostM2 |           33 |      0.99516 |            1 |
|   11 | Accept |     0.25733 |      1.5294 |       0.244 |      0.2442 |          Bag |           25 |            - |            8 |
|   12 | Accept |     0.74267 |      16.444 |       0.244 |     0.24995 |          Bag |          488 |            - |         1494 |
|   13 | Accept |     0.28567 |      7.9382 |       0.244 |     0.24624 |     RUSBoost |          158 |    0.0010063 |            1 |
|   14 | Accept |       0.257 |      23.416 |       0.244 |     0.24559 |          Bag |          491 |            - |           31 |
|   15 | Accept |     0.28433 |     0.71501 |       0.244 |     0.24557 |     RUSBoost |           12 |      0.48085 |            6 |
|   16 | Accept |       0.267 |       17.82 |       0.244 |      0.2456 |   AdaBoostM2 |          484 |    0.0028818 |           43 |
|   17 | Accept |     0.24667 |      33.219 |       0.244 |     0.24601 |          Bag |          488 |            - |            3 |
|   18 | Best   |       0.244 |      34.953 |       0.244 |      0.2454 |          Bag |          498 |            - |            3 |
|   19 | Accept |     0.24467 |      31.568 |       0.244 |     0.24489 |          Bag |          473 |            - |            3 |
|   20 | Accept |       0.259 |      19.187 |       0.244 |     0.24488 |   AdaBoostM2 |          497 |      0.67001 |           19 |
|===================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Method | NumLearningC-|    LearnRate |  MinLeafSize |
|      | result |             | runtime     | (observed)  | (estim.)    |              | ycles        |              |              |
|===================================================================================================================================|
|   21 | Accept |     0.27733 |      19.735 |       0.244 |     0.24468 |     RUSBoost |          386 |      0.91461 |            2 |
|   22 | Accept |       0.245 |      32.172 |       0.244 |      0.2441 |          Bag |          482 |            - |            4 |
|   23 | Accept |       0.244 |      33.117 |       0.244 |     0.24388 |          Bag |          497 |            - |            4 |
|   24 | Accept |       0.245 |       34.32 |       0.244 |     0.24406 |          Bag |          497 |            - |            4 |
|   25 | Best   |       0.243 |      33.134 |       0.243 |     0.24394 |          Bag |          499 |            - |            5 |
|   26 | Accept |     0.25733 |     0.55541 |       0.243 |     0.24371 |   AdaBoostM2 |           12 |      0.87848 |           53 |
|   27 | Accept |       0.263 |     0.52438 |       0.243 |     0.24371 |   AdaBoostM2 |           11 |       0.6978 |            2 |
|   28 | Accept |     0.24367 |      31.167 |       0.243 |     0.24344 |          Bag |          484 |            - |            5 |
|   29 | Accept |       0.292 |      19.748 |       0.243 |     0.24342 |   AdaBoostM2 |          497 |    0.0010201 |            1 |
|   30 | Accept |       0.292 |      0.7854 |       0.243 |     0.24342 |     RUSBoost |           13 |    0.0012334 |            3 |

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

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

     Bag             499              NaN            5     

Observed objective function value = 0.243
Estimated objective function value = 0.24342
Function evaluation time = 33.1343

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

     Bag             499              NaN            5     

Estimated objective function value = 0.24342
Estimated function evaluation time = 32.1002
ensMdl = 
  ClassificationBaggedEnsemble
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'AAA'  'AA'  'A'  'BBB'  'BB'  'B'  'CCC'}
                       ScoreTransform: 'none'
                      NumObservations: 3000
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]
                           NumTrained: 499
                               Method: 'Bag'
                         LearnerNames: {'Tree'}
                 ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                              FitInfo: []
                   FitInfoDescription: 'None'
                            FResample: 1
                              Replace: 1
                     UseObsForLearner: [3000×499 logical]


  Properties, Methods

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

Создайте модель Simulink

Этот пример предоставляет модели Simulink slexCreditRatingClassificationEnsemblePredictExample.slx, который включает блок ClassificationEnsemble Predict. Можно открыть модель Simulink или создать новую модель как описано в этом разделе.

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

SimMdlName = 'slexCreditRatingClassificationEnsemblePredictExample'; 
open_system(SimMdlName)

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

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

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

Блок ClassificationEnsemble Predict ожидает наблюдение, содержащее 17 значений предиктора. Дважды кликните Inport блок и установите размерности Порта на 17 на вкладке Signal Attributes.

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

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

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

Создайте соответствующий массив структур для будущих выборок.

creditRatingInput.time = (0:931)';
creditRatingInput.signals(1).values = ftrX;
creditRatingInput.signals(1).dimensions = size(ftrX,2);

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

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

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

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

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

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

sim(SimMdlName);

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

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

Похожие темы