このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では、ラベル予測用に MATLAB®函数ブロックを Simulink金宝app®モデルに追加する方法を示します。この MATLAB函数ブロックは、ストリーミング データを受け入れて、学習済みのサポート ベクター マシン (支持向量机)分類モデルを使用することによりラベルと分類スコアを予測します。MATLAB函数ブロックの使用法の詳細については、MATLAB函数ブロックを使用したカスタム機能の作成(金宝app模型)を参照してください。
この例では,电离层
データセットを使用します。これには,レーダー反射の品質(Y
)および予測子データ(X
)が含まれます。レーダー反射の品質は良好(‘g’
)または不良(“b”
)のいずれかです。
电离层
データセットを読み込みます。標本サイズを調べます。
负载电离层n =元素个数(Y)
n = 351
MATLAB函数ブロックで细胞配列を返すことはできません。レーダー反射が良好な場合は要素が1
、それ以外の場合は0
である逻辑ベクトルに応答変数を変換します。
Y=strcmp(Y,‘g’);
レーダー反射は連続的に検出されるものとし、また、はじめの 300個の観測値を入手しており、残りの 51個はまだ入手していないとします。現在の標本と将来の標本にデータを分割します。
prsntX = X(施用:);prsntY = Y(施用);ftrX = X(301年:,);ftrY = Y(301:结束);
現在利用できるすべてのデータを使用してSVMモデルに学習をさせます。予測子データを標準化するよう指定します。
Mdl=fitcsvm(prsntX、prsntY、,“标准化”,真正的);
Mdl
は分类VM
モデルです。
saveLearnerForCoder
の使用によるモデルの保存コマンドラインでは,Mdl
を使用して新しい観測値について予測を行うことができます。しかし、コード生成用の関数で入力引数としてMdl
を使用することはできません。
saveLearnerForCoder
を使用して,関数内に読み込めるようにMdl
を準備します。
saveLearnerForCoder (Mdl“SVMIonosphere”);
saveLearnerForCoder
はMdl
をコンパクトにしてから垫ファイルSVMIonosphere.mat
に保存します。
レーダー反射が良好な品質であるかどうかを予測するsvmIonospherePredict.m
という名前のMATLAB関数を定義します。関数は次の条件を満たさなければなりません。
コード生成命令% # codegen
を関数内に含める。
レーダー反射の予測子データを受け入れる。データは,行数以外はX
と同等でなければなりません。
loadLearnerForCoder
を使用してSVMIonosphere.mat
を読み込む。
予測されたラベルと、レーダー反射の品質を良好であると予測する分類スコア (つまり、陽性クラス スコア) を返す。
作用(标签,分数)= svmIonospherePredict (X)% # codegen使用支持向量机模型预测雷达回波质量% svmIonospherePredict预测标签和估计分类%预测器数据X数值矩阵中的雷达回波分数%使用文件SVMIonosphere.mat中的压缩SVM模型。X行%对应观察值和预测变量的列。标签%是预测标签,分数是对的置信度测量%,雷达回波质量良好。%版权所有2016 The MathWorks Inc.Mdl = loadLearnerForCoder (“SVMIonosphere”);[标签,bothscores] =预测(Mdl X);分数= bothscores (:, 2);结束
メモ:このページの右上にあるボタンをクリックしてこの例をMATLAB®で開くと,MATLABで例のフォルダーが開きます。このフォルダーには,エントリポイント関数のファイルが含まれています。
svmIonospherePredict.m
にディスパッチする MATLAB函数ブロックを使用して Simulink金宝app®モデルを作成します。
この例では、金宝app模拟モデルSLEXSVM电离层预测样本.slx
が用意されています。金宝app仿真软件モデルを開きます。
SimMdlName =“slexSVMIonospherePredictExample”;开放式系统(SimMdlName)
金宝app仿真软件モデルが图に表示されます。入力ノードでレーダー反射が検出されると,svmIonospherePredict.m
にディスパッチするMATLAB函数ブロックにその観測値が送られます。ラベルとスコアを予測した後で,これらの値がワークスペースに返され,モデル内の値が一度に1つずつ表示されます。SLEXSVM电离层预测样本.slx
を読み込む際,MATLAB®はradarReturnInput
という名前の必要なデータセットも読み込みます。しかし、この例では必要なデータセットを構築する方法を示します。
このモデルでは、次のフィールドが含まれているradarReturnInput
という名前の構造体配列を入力データとして受け入れることを想定しています。
时间
——観測値がモデルに入力された時点。この例では,0~ 50 の整数を期間に含めます。方向は予測子データ内の観測値に対応しなければなりません。したがって、この例の場合は时间
が列ベクトルでなければなりません。
信号
-价值观
フィールドと维
フィールドが含まれている、入力データを説明する 1.行 1.列の構造体配列。价值观
は予測子データの行列、维
は予測子変数の個数です。
将来のレーダー反射用に適切な構造体配列を作成します。
radarReturnInput。时间= (0:50)';radarReturnInput.signals(1)。值= ftrX;radarReturnInput.signals(1)。尺寸大小= (ftrX 2);
ここで名前をradarReturnInput
から変更して,新しい名前をモデル内で指定できます。ただし,金宝app仿真软件®では,前述したフィールド名が構造体配列に含まれていると想定しています。
学習から取り分けておいたデータ、つまりradarReturnInput
のデータを使用してモデルをシミュレートします。
sim(SimMdlName);
radarReturnInput
内のすべての観測値が一度に1つずつ処理された後で,モデルが图に表示されます。X(351,:)
について予測されたラベルは1
、陽性クラス スコアは1.431
です。変数吹捧
、你
およびsvmlogsout
がワークスペースに表示されます。你
とsvmlogsout
は,予測したラベルおよびスコアが含まれている金宝appSimulinkData。数据集
オブジェクトです。詳細は、記録されたシミュレーションデータのデータ形式(金宝app模型)を参照してください。
シミュレーションデータをシミュレーションログから抽出します。
labelsSL = svmlogsout.getElement (1) .Values.Data;scoresSL = svmlogsout.getElement (2) .Values.Data;
标签
は,予測したラベルが格納されている51行1列の数値ベクトルです。labelsSL(j)
は、将来の標本におけるレーダー反射j
の品質が良好であると 支持向量机モデルが予測した場合は1
、それ以外の場合は0
になります。scoresSL
は,陽性クラススコア,つまり判定境界からの符号付き距離が格納されている51行1列の数値ベクトルです。陽性スコアは予測したラベルの値1
に,陰性スコアは0
に対応します。
预测
を使用してコマンドラインでラベルと陽性クラススコアを予測します。
[labelCMD, scoresCMD] =预测(Mdl ftrX);scoresCMD = scoresCMD (:, 2);
labelCMD
と计分器
は标签
およびscoresSL
に相応します。
slexSVMIonospherePredictExample
が返した将来の標本の陽性クラス スコアを、コマンド ラインで预测
を呼び出すことにより得られたスコアと比較します。
err = sum((scoresCMD - scoresSL).^2);犯错< eps
ans =逻辑1
スコアの集合間における偏差の二乗和は無視できる値です。
金宝app仿真软件®编码器™のライセンスもある場合,仿真软件®のSLEXSVM电离层预测样本.slx
またはコマンドラインからrtwbuild
(金宝app仿真软件编码器)を使用してCコードを生成できます。詳細は,モデル用 Cコードの生成(金宝app仿真软件编码器)を参照してください。
LearnerCoder配置器
|loadLearnerForCoder
|预测
|saveLearnerForCoder
|rtwbuild
(金宝app仿真软件编码器)