Help us understand the problem. What is going on with this article?

Simulinkで機械学習モデルを使いたい

はじめに

Simulinkでガウス過程回帰モデルを用いたいと思ったのですが,少しハマったのでメモ.

やりたいこと

オフラインで,fitrgpコマンドで作成したガウス過程回帰モデルを作成した.
このモデルをMATLAB function ブロック内で用いて,変数Yを推定したい.

解決方法

1) XからYを予測するガウス過程回帰モデルを作成したら,saveCompactModelでモデルを保存する.

gpr_predict.m
gprMdl = fitrgp(X, Y);
saveCompactModel(gprMdl, 'GPRModel');

2) (Simulink内 MATLAB Function blockにおいて)loadCompactModelでモデルを呼び出してpredictでYを計算する.

predict_Y
gprMdl = loadCompactModel('GPRModel');
Y = predict(gprMdl, X_online);

公式のページは以下を参照.
機械学習モデルの予測をコマンド ラインで行うコードの生成

ハマった方法

普通にmat ファイル形式でsave(gprMdl, 'GPRModel')とやると,Simulinkでは扱えない形式になってしまう.
具体的には,以下のエラーが出てくる.

調整不可プロパティをもつクラスは外部関数からの出力としてサポートされません

なんのことやら,という感じ.

データストアメモリを用いてもグローバル変数にしようとしても,だめだった.
サポートされているデータ型しか受け付けないらしい.

以前Simulinkで困ったときに,コード生成に対応しているかどうかが重要だったような・・・という記憶を頼りに調べたら上のサイトを見つけることができ,無事に解決したが,小一時間程度要してしまった.

Simulinkを用いるときにはコード生成に対応しているかどうかをチェックする癖をつけないと,また同じような問題にトラップされそう・・・
今後も気をつけよう(自戒).

stktu_KU
Doctor course student @ Kyoto University 化学プロセスのモデリングに取り組み中・・・ データ解析・自然言語処理も使います. 主な使用言語はMATLAB,Python.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away