В этом примере показано, как обучить модель дерева решений классификации с помощью приложения Classification Learner, а затем использовать блок ClassificationTree Predict для предсказания меток в Simulink ®. Блок принимает наблюдение (данные предиктора) и возвращает предсказанную метку класса и счет класса для наблюдения, используя обученную модель дерева принятия решений классификации .
Обучите модель дерева решений классификации с помощью оптимизации гипероптимизации параметров управления в приложении Classification Learner.
1. В Командном Окне MATLAB ® загрузите ionosphere
набор данных, который содержит радиолокационные возвраты качества (Y
) и данные предиктора (X
) из 34 переменных. Радиолокационные возвраты имеют хорошее качество ('g'
) или плохое качество ('b'
).
Загрузите ionosphere
набор данных. Определите размер выборки.
load ionosphere
n = numel(Y)
n = 351
Предположим, что радарные возвраты обнаруживаются последовательно, и у вас есть первые 300 наблюдений, но вы еще не получили последние 51. Разделите данные на настоящие и будущие выборки.
prsntX = X(1:300,:); prsntY = Y(1:300); ftrX = X(301:end,:); ftrY = Y(301:end);
2. Откройте Classification Learner. На вкладке Apps, в разделе Apps, нажмите Показ больше стрела, чтобы отобразить галерею Apps. В группе Машинное обучение and Глубокое Обучение нажмите Classification Learner.
3. На вкладке Classification Learner, в Разделе файла, нажмите New Session и выберите From Workspace.
4. В диалоговом окне New Session from Workspace выберите матрицу prsntX
из списка Переменная набора данных. В разделе Response нажмите кнопку From рабочей области опции и выберите вектор prsntY
из рабочей области. Опция валидации по умолчанию является 5-кратной перекрестной валидацией, чтобы защитить от сверхподбора кривой. В данном примере не изменяйте настройки по умолчанию.
5. Чтобы принять опции по умолчанию и продолжить, нажмите кнопку «» Начать сеанс «».
6. Выберите оптимизируемую модель дерева для обучения. На вкладке Classification Learner, в разделе Model Type, щелкните стрелу Show more, чтобы открыть галерею. В группе Деревья решений (Decision Tree) щелкните Оптимизируемое дерево (Optimizable Tree). Приложение отключает кнопку Использовать Параллель, когда вы выбираете оптимизируемую модель.
7. В разделе «Обучение» нажмите кнопку Train. Приложение отображает график минимальной ошибки классификации, когда запускает процесс оптимизации. При каждой итерации приложение пробует различную комбинацию значений гиперзначений параметров и обновляет график с минимальной ошибкой классификации валидации, наблюдаемой до этой итерации, обозначенной темно-синим цветом. Когда приложение завершает процесс оптимизации, оно выбирает набор оптимизированных гиперпараметров, обозначенных красным квадратом. Для получения дополнительной информации см. График минимальной ошибки классификации.
Приложение приводит оптимизированные гиперпараметры как в разделе Результаты оптимизации справа от графика, так и в разделе Оптимизированные гиперпараметры на панели Сводных данных текущей модели. В целом результаты оптимизации не воспроизводимы.
8. Экспортируйте модель в рабочее пространство MATLAB. На вкладке Classification Learner, в Разделе экспорта, нажмите Экспорт модели и выберите Экспорт модели, затем нажмите OK. Имя по умолчанию для экспортированной модели trainedModel
.
Кроме того, можно сгенерировать код MATLAB, который обучает классификационную модель с теми же настройками, что и для обучения модели в приложение. на вкладке Classification Learner, в разделе Export, нажмите Generate Function. Приложение генерирует код из вашего сеанса и отображает файл в РЕДАКТОРА MATLAB. Файл задает функцию, которая принимает переменные предиктора и отклика, обучает классификационную модель и выполняет перекрестную валидацию. Измените имя функции на trainClassificationTreeModel
и сохраните файл функции. Обучите модель классификации дерева решений при помощи trainClassificationTreeModel
функция.
trainedModel = trainClassificationTreeModel(prsntX,prsntY);
9. Извлеките обученную модель из trainedModel
переменная. trainedModel
содержит ClassificationTree
объект модели в ClassificationTree
поле.
treeMdl = trainedModel.ClassificationTree;
Поскольку оптимизация гиперпараметра может привести к избыточной модели, рекомендуемый подход состоит в том, чтобы создать отдельный тестовый набор перед импортом ваших данных в приложение Classification Learner и увидеть, как оптимизированная модель работает на вашем тестовом наборе. Для получения дополнительной информации смотрите Train Классификатор Использование Оптимизации Гипероптимизации параметров управления в Приложение Classification Learner.
Этот пример предоставляет модель Simulink slexIonosphereClassificationTreePredictExample.slx
, который включает блок ClassificationTree Predict. Можно открыть модель Simulink или создать новую модель, как описано в этом разделе.
Откройте модель Simulink slexIonosphereClassificationTreePredictExample.slx
.
SimMdlName = 'slexIonosphereClassificationTreePredictExample';
open_system(SimMdlName)
The PreLoadFcn
функция обратного вызова от slexIonosphereClassificationTreePredictExample
включает код для загрузки выборочных данных, обучения модели и создания входного сигнала для модели Simulink. Если вы открываете модель Simulink, то программное обеспечение запускает код в PreLoadFcn
перед загрузкой модели Simulink. Чтобы просмотреть функцию обратного вызова, в разделе Setup на вкладке Modeling, нажмите Model Settings и выберите Model Properties. Затем на вкладке Callbacks выберите PreLoadFcn
функция обратного вызова на панели обратных коллбэков Model.
Чтобы создать новую модель Simulink, откройте шаблон Blank Model и добавьте блок ClassificationTree Predict. Добавьте блоки Inport и Outport и соедините их с блоком ClassificationTree Predict.
Дважды кликните блок ClassificationTree Predict, чтобы открыть диалоговое окно Параметров блоков. Можно задать имя переменной рабочей области, которая содержит обученную модель. Имя переменной по умолчанию treeMdl
. "Нажмите кнопку ""Обновить""". В диалоговом окне отображаются опции, используемые для обучения модели treeMdl
в рамках модели обученного машинного обучения. Установите флажок Добавить выходной порт для предсказанных счетов классов, чтобы добавить второй счет выходного порта.
Блок ClassificationTree Predict ожидает наблюдения, содержащего 34 значения предиктора. Дважды кликните блок Inport и установите для параметра Port dimensions значение 34 на вкладке Signal Attributes.
Создайте входной сигнал в виде массива структур для модели Simulink. Массив структур должен содержать следующие поля:
time
- Точки времени, в которые наблюдения заходят в модель. В этом примере длительность включает целые числа от 0 до 50. Ориентация должна соответствовать наблюдениям в данных предиктора. Итак, в данном случае time
должен быть вектор-столбец.
signals
- массив структур 1 на 1, описывающий входные данные и содержащий поля values
и dimensions
, где values
является матрицей данных предиктора и dimensions
- количество переменных предиктора.
Создайте соответствующий массив структур для будущих радиолокационных возвратов.
radarReturnInput.time = (0:50)'; radarReturnInput.signals(1).values = ftrX; radarReturnInput.signals(1).dimensions = size(ftrX,2);
Для импорта данных о сигнале из рабочей области:
Откройте диалоговое окно Параметры конфигурации. На вкладке Моделирование (Modeling) щелкните Настройки модели (Model Settings).
На панели Импорт/экспорт данных установите флажок Вход и введите radarReturnInput
в соседнем текстовом поле.
На панели « Решатели» в разделе «Время симуляции» установите значение «Время остановки» radarReturnInput.time(end)
. В группе «Выбор решателя» установите для параметра «Тип» значение Fixed-step
, и установите решатель на discrete (no continuous states)
.
Для получения дополнительной информации смотрите Загрузку Данных Сигнала для Симуляции (Simulink).
Симулируйте модель.
sim(SimMdlName);
Когда блок Inport обнаруживает наблюдение, он направляет наблюдение в блок ClassificationTree Predict. Можно использовать Данные моделирования Inspector (Simulink), чтобы просмотреть записанные данные блоков Outport.