主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

Stateflowの使用によるクラスラベルの予測

この例では,Stateflow®チャートをラベル予測に使用する方法を示します。この例では,fitcdiscr.を使用して判別分析モデルにフィッシャーのアヤメのデータセットについて学習をさせ,学習済みモデルを読み込んで新しいデータのラベルを予測するコード生成用の関数を定義します。この例のStateflowチャートは,ストリーミングデータを受け入れ,定義された関数を使用してラベルを予測します。

统计和机器学习工具箱™に含まれているフィッシャーのアヤメのデータセットには,150本のアヤメの標本について種類(物种)とがく片の長さ,がく片の幅,花弁の長さおよび花弁の幅の測定値(测定)が含まれています。このデータセットには,setosa,杂色的およびvirginicaの3種類のそれぞれについて50個ずつの標本が含まれています。

フィッシャーのアヤメのデータセットを読み込みます。

负载fisheriris

1、2および3がそれぞれsetosa,杂色的およびvirginicaに対応するインデックスベクトルに物种を変換します。

物种= grp2idx(物种);

データを学習セットと検定セットに分割します。

RNG('默认'再现性的百分比idx1 = randperm(150、75)”;idx2 = setdiff((1:15)”,idx1);X =量(idx1,:);Y =物种(idx1,:);trainX =量(idx2:);trainY =物种(idx2:);

trainXtrainYをを用してモデルにに习をせ,XYを使用して学習済みモデルを検定します。

2次判别分类モデルに学习をさます。

mdl = fitcdiscr(TrainX,Trapty,“DiscrimType”'二次');

MdlClassificationDiscriminantモデルです。コマンドラインでは,Mdlしかし,コード生成用のをことができますますますますますますます。Mdlを使用することはできません。saveLearnerForCoderを使用して,関数内で読み込めるようにMdlを準備します。

saveLearnerForCoder (Mdl“DiscrIris”);

saveLearnerForCoderMdlをコンパクトにして垫ファイルDiscrIris.matに保存します。

予測された種類をStateflowモデルの表示ボックスで表示するため,MATLAB®ファイルIrisSpecies.mclassdefブロックを使用して列挙クラスを定義します。

classdefIrisSpecies <仿万博1manbetx真软件。IntEnumType枚举Setosa(1)多色的(2)Virginica (3)结束结束

列挙型データの詳細については,列挙データ型の定義(Stateflow)を参照してください。

学習済みモデルを使用して新しい測定データからアヤメの種類を予測する,mypredict.mという名前关关节定义定义し。

  • コード生成命令% # codegenを关键词含める。

  • アヤメの測定データを受け入れる。データは,行数以外はXと同等でなければなりません。

  • を使用してDiscrIris.matを読み込む。

  • 予測したアヤメの種類を返す。

函数标签= mypredict (X)% # codegen%MyPreDict使用判别模型预测虹膜花的种类%MyPredict使用Compact预测虹膜花的种类discriis .mat文件中的%判别模型。行X对应于%观察值和列对应预测变量。标签是%预测的物种。mdl = loadLearnerForCoder (“DiscrIris”);labelTemp =预测(mdl X);标签= IrisSpecies (labelTemp);结束

万博1manbetx仿真软件®モデルsf_countflowers.slxを開きます。

sfName =“sf_countflowers”;open_system (sfName);

Stateflowチャートに含まれている流れ図と仿真万博1manbetx软件モデルが图に表示されます。入力ノードで測定データが検出されると,データがチャートに送られます。チャートでは,アヤメの花の種類が予測され,各種類について花の本数がカウントされます。予測した種類がチャートからワークスペースに返され,モデル内の種類が一度に1つずつ表示されます。データストアのメモリブロックNumFlowersに各種類の花の本数が格納されます。

このチャートでは,次のフィールドが含まれているfisheririsInputという名前の構造体配列を入力データとして受け入れることを想定しています。

  • 时间——観測値がモデルに入力された時点。この例では,期間に 0 ~ 74 の整数を含めます。时间の方向は予測子データ内の観測値に対応しなければなりません。したがって,この例の場合は时间が列ベクトルでなければなりません。

  • 信号——入力データを説明する,价值およびというフィールドが含まれている1行1列の構造体配列。价值フィールドは予測子データの行列です。フィールドは予測子変数の個数です。

アヤメの花の測定値用に適切な構造体配列を作成します。

fisheririsinput.time =(0:74)';fisheririsinpul.signals.dimensions = 4;fisheririsinput.signals.values = x;

ここで名称をfisheririsInputから変更して,新しい名前をモデル内で指定できます。ただし,前述したフィールド名が構造体配列に含まれていることがStateflowで想定されます。詳細については,データ構造体のルートレベル入力への読み込み(万博1manbetx模型)を参照してください。

モデルをシミュレートします。

sim (sfName)

fisheririsInput内のすべての観測値が一度に1つずつ処理された後で,モデルが图に表示されます。X(75年:)について予測された種類はvirginicaです。X内のsetosa,杂色的およびvirginicaの本数はそれぞれ22日22および31です。

変数logsoutがワークスペースに表示さますます。logsoutは,予測した種類が含まれている万博1manbetxSimulinkData。数据集オブジェクトです。予测した种类のデータをシミュレーションログから抽出します。

labelSF = logsout.getElement (1) .Values.Data;

预测を使用してコマンドラインで種類を予測します。

labelCMD =预测(Mdl X);

sf_countflowersで予測した種類を,コマンドラインで预测を呼び出すことにより得られた種類と比較します。

isequal (labelCMD labelSF)
ans =逻辑1

isequalは,すべての入力が等しい場合に逻辑1 (真的)を返します。このこの比较,予このされる结果をsf_countflowersが返すことを確認します。

万博1manbetxSimulink Coder™のライセンスもある场合书,Simulinkのsf_countflowers.slxまたはコマンドラインからrtwbuild(万博1manbetx仿真软件编码器)を使用してCコードを生成できます。詳細は,モデル用cコードの生成(万博1manbetx仿真软件编码器)を参照してください。

参考

|||(万博1manbetx模型)

関連するトピック