このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,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:);
trainX
とtrainY
を使用してモデルに学習をさせ,X
とY
を使用して学習済みモデルを検定します。
2次判別分析モデルに学習をさせます。
Mdl = fitcdiscr (trainX trainY,“DiscrimType”,“二次”);
Mdl
はClassificationDiscriminant
モデルです。コマンドラインでは,Mdl
を使用して新しい観測値について予測を行うことができます。しかし,コード生成用の関数で入力引数としてMdl
を使用することはできません。saveLearnerForCoder
を使用して,関数内で読み込めるようにMdl
を準備します。
saveLearnerForCoder (Mdl“DiscrIris”);
saveLearnerForCoder
はMdl
をコンパクトにして垫ファイルDiscrIris.mat
に保存します。
予測された種類をStateflowモデルの表示ボックスで表示するため,MATLAB®ファイルIrisSpecies.m
でclassdef
ブロックを使用して列挙クラスを定義します。
classdefIrisSpecies <仿金宝app真软件。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);结束
金宝app仿真软件®モデルsf_countflowers.slx
を開きます。
sfName =“sf_countflowers”;open_system (sfName);
Stateflowチャートに含まれている流れ図と仿真金宝app软件モデルが图に表示されます。入力ノードで測定データが検出されると,データがチャートに送られます。チャートでは,アヤメの花の種類が予測され,各種類について花の本数がカウントされます。予測した種類がチャートからワークスペースに返され,モデル内の種類が一度に1つずつ表示されます。データストアのメモリブロックNumFlowers
に各種類の花の本数が格納されます。
このチャートでは,次のフィールドが含まれているfisheririsInput
という名前の構造体配列を入力データとして受け入れることを想定しています。
时间
——観測値がモデルに入力された時点。この例では,期間に 0 ~ 74 の整数を含めます。时间
の方向は予測子データ内の観測値に対応しなければなりません。したがって,この例の場合は时间
が列ベクトルでなければなりません。
信号
——入力データを説明する,值
および维
というフィールドが含まれている1行1列の構造体配列。值
フィールドは予測子データの行列です。维
フィールドは予測子変数の個数です。
アヤメの花の測定値用に適切な構造体配列を作成します。
fisheririsInput。时间= (0:74)';fisheririsInput.signals.dimensions = 4;fisheririsInput.signals.values = X;
ここで名前をfisheririsInput
から変更して,新しい名前をモデル内で指定できます。ただし,前述したフィールド名が構造体配列に含まれていることがStateflowで想定されます。詳細については,データ構造体のルートレベル入力への読み込み(金宝app模型)を参照してください。
モデルをシミュレートします。
sim (sfName)
fisheririsInput
内のすべての観測値が一度に1つずつ処理された後で,モデルが图に表示されます。X(75年:)
について予測された種類はvirginicaです。X
内のsetosa,杂色的およびvirginicaの本数はそれぞれ22日22および31です。
変数logsout
がワークスペースに表示されます。logsout
は,予測した種類が含まれている金宝appSimulinkData。数据集
オブジェクトです。予測した種類のデータをシミュレーションログから抽出します。
labelSF = logsout.getElement (1) .Values.Data;
预测
を使用してコマンドラインで種類を予測します。
labelCMD =预测(Mdl X);
sf_countflowers
で予測した種類を,コマンドラインで预测
を呼び出すことにより得られた種類と比較します。
isequal (labelCMD labelSF)
ans =逻辑1
isequal
は,すべての入力が等しい場合に逻辑1 (真正的
)を返します。この比較により,予期される結果をsf_countflowers
が返すことを確認します。
金宝app仿真软件编码器™のライセンスもある場合,仿真软件のsf_countflowers.slx
またはコマンドラインからrtwbuild
(金宝app仿真软件编码器)を使用してCコードを生成できます。詳細は,モデル用Cコードの生成(金宝app仿真软件编码器)を参照してください。
loadLearnerForCoder
|saveLearnerForCoder
|预测
|slbuild
(金宝app模型)