В этом примере показано, как обучить регрессионую модель векторной машины поддержки (SVM) с помощью приложения Regression Learner, а затем использовать блок RegressionSVM Predict для предсказания отклика в Simulink ®. Блок принимает наблюдение (данные предиктора) и возвращает предсказанный ответ для наблюдения, используя обученную регрессионую модель SVM .
Обучите регрессионую модель SVM с помощью оптимизации гипероптимизации параметров управления в приложении Regression Learner.
1. В Командном Окне MATLAB ® загрузите carbig
набор данных и создайте матрицу, содержащую большинство переменных предиктора и вектор переменной отклика.
load carbig
X = [Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight];
Y = MPG;
2. Откройте Regression Learner. На вкладке Apps, в разделе Apps, нажмите Показ больше стрела, чтобы отобразить галерею Apps. В группе Машинное обучение и Глубокое Обучение нажмите Regression Learner.
3. На вкладке Regression Learner, в Разделе файла, выберите New Session и выберите From Workspace.
4. В диалоговом окне New Session from Workspace выберите матрицу X
из списка Переменная набора данных. В разделе Response нажмите кнопку From опции рабочей области и выберите вектор Y из рабочей области. Опция валидации по умолчанию является 5-кратной перекрестной валидацией, чтобы защитить от сверхподбора кривой. В данном примере не изменяйте настройки по умолчанию.
5. Чтобы принять опции по умолчанию и продолжить, нажмите кнопку «» Начать сеанс «».
6. Выберите оптимизируемую модель SVM для обучения. На вкладке Учитель регрессии (Regression Learner) в разделе Тип модели (Model Type) щелкните стрелу Показать больше (Show more), чтобы открыть галерею. В группе Машины Опорных Векторов щелкните Оптимизируемый SVM. Приложение отключает кнопку Использовать Параллель, когда вы выбираете оптимизируемую модель.
7. В разделе «Обучение» нажмите кнопку Train. Приложение отображает Минимальный график MSE, когда запускает процесс оптимизации. При каждой итерации приложение пробует различную комбинацию значений гиперзначений параметров и обновляет график с минимальной средней квадратичной невязкой валидации (MSE), наблюдаемой до этой итерации, обозначенной темно-синим цветом. Когда приложение завершает процесс оптимизации, оно выбирает набор оптимизированных гиперпараметров, обозначенных красным квадратом. Для получения дополнительной информации смотрите Минимальный график MSE.
Приложение приводит оптимизированные гиперпараметры как в разделе Результаты оптимизации справа от графика, так и в разделе Оптимизированные гиперпараметры на панели Сводных данных текущей модели. В целом результаты оптимизации не воспроизводимы.
8. Экспортируйте модель в рабочее пространство MATLAB. На вкладке Регрессионное обучение (Regression Learner) в разделе Экспорт (Export) щелкните Экспорт модели (Export Model) и выберите Экспорт модели (Export Model), затем нажмите OK. Имя по умолчанию для экспортированной модели trainedModel
.
Кроме того, можно сгенерировать код MATLAB, который обучает регрессионую модель с теми же настройками, что и для обучения модели SVM в приложение. на вкладке Regression Learner, в разделе Export, нажмите Generate Function. Приложение генерирует код из вашего сеанса и отображает файл в РЕДАКТОРА MATLAB. Файл задает функцию, которая принимает переменные предиктора и отклика, обучает регрессионую модель и выполняет перекрестную валидацию. Измените имя функции на trainRegressionSVMModel
и сохраните файл функции. Обучите модель SVM с помощью trainRegressionSVMModel
функция.
trainedModel = trainRegressionSVMModel(X,Y);
9. Извлеките обученную модель SVM из trainedModel
переменная. trainedModel
содержит RegressionSVM
объект модели в RegressionSVM
поле.
svmMdl = trainedModel.RegressionSVM;
Поскольку оптимизация гиперпараметра может привести к избыточной модели, рекомендуемый подход состоит в том, чтобы создать отдельный тестовый набор перед импортом ваших данных в приложение Regression Learner и увидеть, как оптимизированная модель работает на вашем тестовом наборе. Для получения дополнительной информации смотрите Обучите Регрессионую Модель Используя Гипероптимизацию параметров управления в Приложении Regression Learner.
Этот пример предоставляет модель Simulink slexCarDataRegressionSVMPredictExample.slx
, который включает блок RegressionSVM Predict. Можно открыть модель Simulink или создать новую модель, как описано в этом разделе.
Откройте модель Simulink slexCarDataRegressionSVMPredictExample.slx
.
SimMdlName = 'slexCarDataRegressionSVMPredictExample';
open_system(SimMdlName)
The PreLoadFcn
функция обратного вызова от slexCarDataRegressionSVMPredictExample
включает код для загрузки выборочных данных, обучения модели SVM и создания входного сигнала для модели Simulink. Если вы открываете модель Simulink, то программное обеспечение запускает код в PreLoadFcn
перед загрузкой модели Simulink. Чтобы просмотреть функцию обратного вызова, в разделе Setup на вкладке Modeling, нажмите Model Settings и выберите Model Properties. Затем на вкладке Callbacks выберите PreLoadFcn
функция обратного вызова на панели обратных коллбэков Model.
Чтобы создать новую модель Simulink, откройте шаблон Blank Model и добавьте блок RegressionSVM Predict. Добавьте блоки Inport и Outport и соедините их с блоком RegressionSVM Predict.
Дважды кликните блок RegressionSVM Predict, чтобы открыть диалоговое окно Параметров блоков. Можно задать имя переменной рабочей области, которая содержит обученную модель SVM. Имя переменной по умолчанию svmMdl
. "Нажмите кнопку ""Обновить""". В диалоговом окне отображаются опции, используемые для обучения модели SVM svmMdl
в рамках модели обученного машинного обучения.
Блок RegressionSVM Predict ожидает наблюдения, содержащего 6 значений предиктора. Дважды кликните блок Inport и установите для параметра Port dimensions значение 6 на вкладке Signal Attributes.
Создайте входной сигнал в виде массива структур для модели Simulink. Массив структур должен содержать следующие поля:
time
- Точки времени, в которые наблюдения заходят в модель. Ориентация должна соответствовать наблюдениям в данных предиктора. Итак, в этом примере time
должен быть вектор-столбец.
signals
- массив структур 1 на 1, описывающий входные данные и содержащий поля values
и dimensions
, где values
является матрицей данных предиктора и dimensions
- количество переменных предиктора.
Создайте соответствующий массив структур для slexCarDataRegressionSVMPredictExample
модель из carsmall
набор данных.
load carsmall
testX = [Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight];
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
в соседнем текстовом поле.
На панели « Решатели» в разделе «Время симуляции» установите значение «Время остановки» carsmallInput.time(end)
. В группе «Выбор решателя» установите для параметра «Тип» значение Fixed-step
, и установите решатель на discrete (no continuous states)
.
Для получения дополнительной информации смотрите Загрузку Данных Сигнала для Симуляции (Simulink).
Симулируйте модель.
sim(SimMdlName);
Когда блок Inport обнаруживает наблюдение, он направляет наблюдение в блок RegressionSVM Predict. Можно использовать Данные моделирования Inspector (Simulink), чтобы просмотреть записанные данные блока Outport.