主要内容

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

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

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

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

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

  3. ラベル予測についてコード生成をサポートする一連のモデルに学習をさせます。

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

  5. エントリポイント関数からCコードを生成します。この関数では,新しい予測子データを変換してから,エクスポート済みのモデルを使用して対応するラベルを予測します。

標本データの読み込み

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

readtableを使用して,ファイルCreditRating_Historical.dat内の過去の信用格付けデータセットを表に読み込みます。

creditrating = readtable (“CreditRating_Historical.dat”);

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

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

(新規セッション]ダイアログボックスでテーブルcreditratingを選択します。応答として認識されたものを除くすべての変数は倍精度数値ベクトルです。[セッションの開始)をクリックして5分割交差検証の分類精度に基づき,分類モデルを比較します。

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

信用评级数据的散点图

散布図は2つの変数がクラスAAABBBBBおよびCCCをかなり良好に分類できることを示しています。しかし,残りのクラスに対応する観測値は,これらのクラスに混ざっています。

識別番号は予測に有用ではありません。したがって,[特徴量]セクションで[特徴選択]をクリックしてから(ID)チェックボックスの選択を解除します。(新規セッション]ダイアログボックスのチェック ボックスを使用して、不要な予測子をはじめから削除することもできます。この例では、すべての予測子を含めた場合に、コード生成には使用されない予測子を削除する方法を示します。

PCAの有効化

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

[特徴量]セクションで(PCA)をクリックし(主成分分析を有効化)を選択します。これによりPCAが予測子データに適用され,モデルに学習をさせる前にデータが変換されます。分類学習器は,変動性の95%を総体として説明する成分のみを使用します。

モデルの学習

ラベル予測についてコード生成をサポートする一連のモデルに学習をさせます。

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

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

各モデルタイプの交差検証後,各モデルおよびその5分割交差検証による分類精度がデータブラウザーに表示され,最高精度をもつモデルが強調表示されます。

历史面板显示训练模型及其准确性。精高斯支持向量机模型的精度最高。

5分割交差検証による分類精度が最大のモデル(細かいガウスSVM学習器の誤り訂正出力符号(ECOC)モデル)を選択します。PCAを有効にすると,分類学習器は6つの予測子のうち2つを使用します。

[プロット]セクションで[混同行列]をクリックします。

精细高斯支持向量机模型的混淆矩阵

このモデルは,クラス一个BおよびCを良好に識別します。ただし,これらのグループ内の特定のレベル,特に下のBレベル間では識別が不十分です。

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

モデルをMATLAB®ワークスペースにエクスポートし,saveLearnerForCoderを使用してモデルを保存します。

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

構造体trainedModelがMATLABのワークスペースに現れます。trainedModelClassificationSVMフィールドにコンパクトモデルが含まれています。

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

saveLearnerForCoder (trainedModel。ClassificationSVM,“ClassificationLearnerModel”

予測用のCコードの生成

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

データの前処理

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

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

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

  • pcaCenters——厳密に個のPCAの中心から成る行ベクトル

  • pcaCoefficients- - - - - -r列のPCA係数行列。rは最大で

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

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

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

保存(“ModelParameters.mat”“removeVars”“pcaCenters”“pcaCoefficients”);

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

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

現在のフォルダー内に,以下を行うmypredictCL.mという名前の関数を定義します。

  • 分類学習器に渡したものと同じ予測子変数が含まれている,生の観測値の数値行列(X)を受け入れる

  • ClassificationLearnerModel.mat内の分類モデルとModelParameters.mat内のモデルパラメーターを読み込む

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

  • 分類学習器によって推定されたPCAの中心(pcaCenters)と係数(pcaCoefficients)を使用して,残りの予測子データを変換する

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

函数标签= mypredictCL (X)% # codegen%MYPREDICTCL使用导出的模型对信用评级进行分类%分类学习者% MYPREDICTCL加载训练过的分类模型(SVM)和模型%参数(removeVars、pcaCenters和pcacoeffents),删除X中预测器数据的原始矩阵的%列对应于%的指标去除evars,转换结果矩阵使用主成分分析pcaCenters中的%中心,pcacoefficient中的PCA系数,然后%使用转换后的数据对信用评级进行分类。X是一个数字矩阵,n行7列。Label是一个n乘1的单元格数组%预测标签。%负载训练的分类模型及模型参数支持向量机= loadLearnerForCoder (“ClassificationLearnerModel”);数据= coder.load (“ModelParameters”);removeVars = data.removeVars;pcaCenters = data.pcaCenters;pcaCoefficients = data.pcaCoefficients;%删除不使用的预测变量keepvars = 1:大小(X, 2);idx = ~ ismember (keepvars removeVars);keepvars = keepvars (idx);XwoID = X (:, keepvars);%通过PCA变换预测器Xpca = bsxfun (@minus XwoID pcaCenters) * pcaCoefficients;%从SVM生成标签标签=预测(SVM, Xpca);结束

コードの生成

Cおよびc++は静的な型の言語なので,エントリポイント関数内のすべての変数のプロパティをコンパイル時に決定しなければなりません。coder.typeof(MATLAB编码器)を使用して可変サイズの引数を指定し,この引数を使用してコードを生成します。

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

P = size(creditrating,2) - 1;x =编码器。typeof(0,[正无穷,p], [1 0]);

可変サイズの引数の指定に関する詳細については,コード生成用の可変サイズ引数の指定を参照してください。

mypredictCL.mから墨西哥人関数を生成します。arg游戏オプションを使用して,xを引数として指定します。

codegenmypredictCLarg游戏x

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

生成されたコードの確認

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

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

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

分類学習器によって学習をさせた分類モデルでpredictFcnを使用して,対応するラベルを予測します。

testLabels = trainedModel.predictFcn (testsampleT);

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

testsample = table2array (testsampleT);

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

検定データをmypredictCLに渡します。関数mypredictCLは,分類学習器で学習をさせた分類モデルと预测を使用して,対応するラベルを予測します。

testLabelsPredict = mypredictCL (testsample);

生成された墨西哥人関数mypredictCL_mexを使用して,対応するラベルを予測します。

testLabelsMEX = mypredictCL_mex (testsample);

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

isequal (testLabels testLabelsMEX testLabelsPredict)
逻辑1

すべての入力が等しい場合,isequalは逻辑1(真正的)を返します。predictFcnmypredictCL,および墨西哥人関数は同じ値を返します。

参考

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

関連するトピック