В этом примере показано, как использовать блок RegressionTree Predict для предсказания отклика в Simulink ®. Блок принимает наблюдение (данные предиктора) и возвращает предсказанный ответ для наблюдения, используя обученную модель регрессионого дерева .
Загрузите carbig
набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов. Создайте матрицу, содержащую переменные предиктора и вектор переменной отклика.
load carbig
X = [Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight];
Y = MPG;
Обучите модель дерева регрессии.
treeMdl = fitrtree(X,Y);
treeMdl
является RegressionTree
модель.
Этот пример предоставляет модель Simulink slexCarDataRegressionTreePredictExample.slx
, который включает блок RegressionTree Predict. Можно открыть модель Simulink или создать новую модель, как описано в этом разделе.
Откройте модель Simulink slexCarDataRegressionTreePredictExample.slx
.
SimMdlName = 'slexCarDataRegressionTreePredictExample';
open_system(SimMdlName)
The PreLoadFcn
функция обратного вызова от slexCarDataRegressionTreePredictExample
включает код для загрузки выборочных данных, обучения древовидной модели и создания входного сигнала для модели Simulink. Если вы открываете модель Simulink, то программное обеспечение запускает код в PreLoadFcn
перед загрузкой модели Simulink. Чтобы просмотреть функцию обратного вызова, в разделе Setup на вкладке Modeling, нажмите Model Settings и выберите Model Properties. Затем на вкладке Callbacks выберите PreLoadFcn
функция обратного вызова на панели обратных коллбэков Model.
Чтобы создать новую модель Simulink, откройте шаблон Blank Model и добавьте блок RegressionTree Predict. Добавьте блоки Inport и Outport и соедините их с блоком RegressionTree Predict.
Дважды кликните блок RegressionTree Predict, чтобы открыть диалоговое окно Параметров блоков. Можно задать имя переменной рабочей области, содержащей обученную модель дерева. Имя переменной по умолчанию treeMdl
. "Нажмите кнопку ""Обновить""". В диалоговом окне отображаются опции, используемые для обучения древовидной модели treeMdl
в рамках модели обученного машинного обучения.
Блок RegressionTree Predict ожидает наблюдения, содержащего 6 значений предиктора. Дважды кликните блок Inport и установите для параметра Port dimensions значение 6 на вкладке Signal Attributes.
Создайте входной сигнал в виде массива структур для модели Simulink. Массив структур должен содержать следующие поля:
time
- Точки времени, в которые наблюдения заходят в модель. Ориентация должна соответствовать наблюдениям в данных предиктора. Итак, в этом примере time
должен быть вектор-столбец.
signals
- массив структур 1 на 1, описывающий входные данные и содержащий поля values
и dimensions
, где values
является матрицей данных предиктора и dimensions
- количество переменных предиктора.
Создайте соответствующий массив структур для slexCarDataRegressionTreePredictExample
модель из 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 обнаруживает наблюдение, он направляет наблюдение в блок RegressionTree Predict. Можно использовать Данные моделирования Inspector (Simulink), чтобы просмотреть записанные данные блока Outport.