主要内容

このページ最新ではありませ。をクリックし,英语のの最新版版を参照参照し。

コード生成と分類学習器アプリ

分类学習器は、分類モデルを対話的に選択して学習をさせるために適していますが、学習済みモデルに基づいてデータにラベルを付ける C/C++ コードを生成しません。分類学習器アプリの[エクスポート]セクションの[関数の生成]ボタンは、モデルに学習をさせるための MATLAB コードを生成しますが、C/C++ コードは生成しません。この例では、エクスポートされた分類モデルを使用して、ラベルを予測する関数から C コードを生成する方法を示します。この例では、以下の手順に従って、与えられた各種の財務比率から会社の信用格付けを予測するモデルを構築します。

  1. 统计和机器学习工具箱™ に含まれているファイルCreditRating_Historical.dat内の信用格付けデータセットを使用します。

  2. 主成分分析 (PCA) を使用して、データの次元を削減します。

  3. ラベル予测生成サポートする一连の学习をさせ。。

  4. 5 分割交差検証以上の分類精度をもつモデルをエクスポートします。

  5. cコード关数コード生成します。关数は,予测子データをを変换変换変换ししててからエクスポートエクスポート済みのののモデルモデルをを使用し

标本データの読み込み

標本データを読み込み、データを分類学習器アプリにインポートします。散布図を使用してデータを確認し、不要な予測子を削除します。

readtableを使用し,ファイルCreditRating_Historical.dat内の信用格付けセットををにににます。。。

信用评级= readtable('CreditRating_Historical.dat');

[アプリケーション]タブで[分類学習器]をクリックします。

分类学習器の[分類学習器]タブで、[ファイル]セクションの[新規セッション]をクリックし、[ワークスペース]を選択します。

[ワークスペースのセッション]ダイアログででで信用评级をし。として认识れたを除くの変数は倍精度数値数値。。。[セッションの開始]をクリックして 5 分割交差検証の分類精度に基づき、分類モデルを比較します。

分类学習器がデータを読み込み、変数WC_TAおよびIDの散布図をプロットします。識別番号はプロットに表示しても有用ではないので、[予测子][X]re_taを選択します。

的散点图credit rating data

散布図は、2 つの変数がクラスAAABBBBBおよびCCCをかなり分类ことを示してしかし,残りのクラスに対応対応する観测値値は,これらこれらのののクラス

识别番号予测有用ではありん。したがって,[特徴量]セクションで[特徴選択]をクリックしてから[ID]チェックのし。[ワークワーク新规新规セッションセッション新规ダイアログダイアログのチェックボックスをを使用して,不要なな予测子をはじめから削除削除もももます含めた,生成に使用さない予测子削除する方法を示します。

PCAの有效化

データの次元を削減するため,PCAを有効にします。

[特徴量]セクションで[PCA]をクリックし[主成分を化]pcaがによりますがががデータ适用されれにに学习学习ををささささせるにににデータデータがががが変换変换変换さささされれれれますます。。。分类分类分类分类分类学习器学习器学习器学习器学习器学习器はは性性性性性性性性性性性性性性性性性性性性性性性性性性性性性性性性性性性性性性95%を95%をををを。

モデルの学習

ラベル予测生成サポートする一连の学习をさせ。。コード生成をサポートする分類学習器のモデルの一覧については、予测用ののコード生成を参照してください。

以下の分類モデルおよびオプションを選択します。これらはラベル予測用のコード生成をサポートします。その後、交差検証を実施します (詳細はコード生成の绍介を参照)。モデルをするにに,[モデル タイプ]セクションで[さらに]の矢印をクリックしてからモデルをクリックします。モデルを選択してオプションを指定したら、開いているメニューをすべて閉じ、[学习]セクションの[学习]をクリックします。

选択するモデルオプション 説明
[決定木][すべての木]を選択 さまざまな複雑度の分類木
[サポート ベクター マシン][すべてSVM]を選択 さまざまな複雑度でさまざまなカーネルを使用する SVM。複雑な SVM ではあてはめに時間が必要。
[アンサンブル][ブースティング]を選択。[モデル タイプ]セクションで[詳細設定]をクリック。[最大分割数][5]に減らし[学习器][100]に増やす。 分类木のアンサンブル
[アンサンブル][バギング木]を選択。[モデル タイプ]セクションで[詳細設定]をクリック。[最大分割数][50]に増やし[学习器][100]に増やす。 分类木のフォレスト

各モデル交差后,各モデルおよびそのそのそのその分割交差検证による分类精度[モデル]ペインに表示され、最高精度をもつモデルが強調表示されます。

Models pane displaying the trained models and their accuracy. The Fine Gaussian SVM model has the highest accuracy.

5分割交差精度が最大モデルモデル(Svm svm学习学习器误り符号(ECOC)モデル)ををををををををを符号符号符号符号モデルモデルモデルモデルモデルモデルモデルモデルモデルモデル误り误り误り误り误り误り误り误り误り误り误り误り误りを使用し。

[プロット]セクションで[混同行列]をクリックし、[検証データ]を選択します。

Confusion matrix for the Fine Gaussian SVM model

このモデルは、クラスABおよびCをにます。ただしこれらグループの特定のレベル,特に特にののののののレベルレベル间间では识别识别

ワークスペースへのモデルのエクスポート

モデルmatlab®ワークスペースにエクスポートし、Savelearnerforcoderを使用してモデルを保存します。

[エクスポート]セクションで[モデルの]をクリックし[コンパクト モデルのエクスポート]を選択します。ダイアログ ボックスの[好的]をクリックします。

构造体trainedModelがmatlabののワークに现れ。。。trainedModel分类vmフィールドにコンパクト モデルが含まれています。

コマンド ラインで、現在のフォルダーのClassificationLearnerModel.matという名前のファイルにコンパクト モデルを保存します。

Savelearnerforcoder(训练Model.Classificationsvm,'ClassificationLearnerModel')

予测用ののコード生成

オブジェクト関数を使用する予測には学習済みのモデル オブジェクトが必要ですが、codegen(MATLAB编码器)-argsオプションはようなを受け入れません。SavelearnerforcoderloadLearnerForCoderを使用てこの制限対处します。Savelearnerforcoderを使用して、学習済みモデルを保存します。次に、loadLearnerForCoderを使用して保存済みモデルを読み込んで関数predictを呼び出す、エントリポイント関数を定義します。最後に、codegenを使用てエントリ关数のコード生成します。

データの前处理

学習データの場合と同じ方法で新しいデータの前処理を行います。

前処理を行うには、次の 3 つのモデル パラメーターが必要です。

  • removeVars— データから削除する変数のインデックスを識別する、最大でp個の要素がある列ベクトル。pは生データ内の予測子変数の個数

  • PCACATENTERS- 厳密にq個の PCA の中心から成る行ベクトル

  • pcaCoefficientsqr列の PCA 係数行列。rは最大でq

分类学習器で[特徴選択]を使用してデータを選択するときに削除した予測子変数のインデックスを指定します。PCA 統計量をtrainedModelから抽出し。

removeVars = 1; pcaCenters = trainedModel.PCACenters; pcaCoefficients = trainedModel.PCACoefficients;

モデル パラメーターを現在のフォルダーのmodelParameters.matという名前のファイルに保存します。

save('ModelParameters.mat','removeVars',“ PCACATENTERS”,“ PCACOEFICISTICS”);

エントリポイント関数の定義

エントリポイント関数は、コード生成用に定義する関数です。codegenを使用して最上位レベルの関数を呼び出すことはできないので、コード生成に対応する関数を呼び出すエントリポイント関数を定義し、codegenを使用してエントリポイント関数の C/C++ コードを生成しなければなりません。

现在の内に,行う行うmypredictCL.mという名前关数を定义。。

  • 分类学习渡しものと同じ予测変数が含まれいるいる,生生のの観测観测値値の(X) を受け入れる

  • ClassificationLearnerModel.mat内の分類モデルとmodelParameters.mat内のモデルを読み込む

  • removeVars内のインデックスに対応する予測子変数を削除する

  • 分类学習器によって推定された PCA の中心 (PCACATENTERS)と(pcaCoefficients)を使用て残り予测子データデータするする

  • モデルを使用して予測したラベルを返す。


               

コードの生成

c ++はな型言语なポイント内のすべてのの変数のプロパティをコンパイル时に决定决定决定ししなけれcoder.typeof(MATLAB编码器)を使用して可変サイズの引数を指定し、この引数を使用してコードを生成します。

coder.typeof(MATLAB编码器)を使用して、コード生成用のxという名前倍行列を作成し。。xの行数が任意でありxの列数がpであることを指定します。

p = size(creditrating,2) - 1; x = coder.typeof(0,[Inf,p],[1 0]);

可変サイズ引数指定に详细については,コード生成の可変サイズ指定指定を参照してください。

mypredictCL.mからmex关数关数生成し。。-argsオプションを使用して、xを引数として指定します。

codegenmypredictCL-argsx

codegenは MEX ファイルmypredictcl_mex.mexw64を現在のフォルダーに生成します。ファイルの拡張子はプラットフォームによって異なります。

生成されたコードの確認

予期されるラベルを MEX 関数が返すことを確認します。

応答変数を元のデータセットから削除し、15 個の観測値を無作為に抽出します。

rng('默认');%可再现性m = 15; testsampleT = datasample(creditrating(:,1:(end - 1)),m);

分类学习器学习させた分类でで预测FCNを使用て対応するを予测します。

testLabels = trainedModel.predictFcn(testsampleT);

生成されたテーブルを行列に変換します。

testsample = table2array(testsampleT);

testsampleの列は、分類学習器で読み込んだ予測子データの列に対応します。

検定データをmypredictCLに渡します。关数mypredictCLは,器でをさせ分类とととpredictを使用て対応するを予测します。

testLabelsPredict = mypredictCL(testsample);

生成された MEX 関数mypredictCL_mexを使用て対応するを予测します。

testLabelsMex = myPredictCl_mex(testSample);

予測子のセットを比較します。

iSequal(testLabels,testLabelsmex,testlabelspredict)
ans =逻辑1

すべてのが等しい场合,isequalは logical 1 (true) を返します。预测FCNmypredictCL、および MEX 関数は同じ値を返します。

参考

||(MATLAB编码器)|(MATLAB编码器)|

関連するトピック