主要内容

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

MATLAB函数ブロックの使用によるクラスの予測

この例では、ラベル予測用に 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”);

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

MATLAB関数の定義

レーダー反射が良好な品質であるかどうかを予測する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で例のフォルダーが開きます。このフォルダーには,エントリポイント関数のファイルが含まれています。

金宝app仿真软件モデルの作成

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仿真软件编码器)を参照してください。

参考

||||(金宝app仿真软件编码器)

関連するトピック