コ,ド生成と分類学習器アプリ
分類学習器は,分類モデルを対話的に選択して学習をさせるために適していますが,学習済みモデルに基づいてデータにラベルを付けるC / c++コードを生成しません。分類学習器アプリの[エクスポ,ト]セクションの[関数の生成]ボタンは,モデルに学習をさせるためのMATLABコードを生成しますが,C / c++コードは生成しません。この例では,エクスポートされた分類モデルを使用して,ラベルを予測する関数からCコードを生成する方法を示します。この例では,以下の手順に従って,与えられた各種の財務比率から会社の信用格付けを予測するモデルを構築します。
统计和机器学习工具箱™に含まれているファ▪ル
CreditRating_Historical.dat
内の信用格付けデ,タセットを使用します。主成分分析(pca)を使用して,デ,タの次元を削減します。
ラベル予測にいてコド生成をサポトする一連のモデルに学習をさせます。
5分割交差検証以上の分類精度をも。
エントリポ@ @ント関数から@ @ c @ @コ@ @ドを生成します。この関数では,新しい予測子データを変換してから,エクスポート済みのモデルを使用して対応するラベルを予測します。
標本デ,タの読み込み
標本デ,タを読み込み,デ,タを分類学習器アプリに,ンポ,トします。散布図を使用してデ,タを確認し,不要な予測子を削除します。
readtable
を使用して,ファCreditRating_Historical.dat
内の過去の信用格付けデ,タセットを表に読み込みます。
信用评级=可读(“CreditRating_Historical.dat”);
[アプリ]タブで[分類学習器]をクリックします。
分類学習器の[分類学習器]タブで,[ファ电子邮箱ル]セクションの[新規セッション]をクリックし,[ワ,クスペ,スから]を選択します。
[ワクスペスからの新規セッション]ダアログボックスで表creditrating
を選択します。応答として認識されたものを除くすべての変数は倍精度数値ベクトルです。[セッションの開始]をクリックして5分割交差検証の分類精度に基づき,分類モデルを比較します。
分類学習器がデ,タを読み込み,変数WC_TA
およびID
の散布図をプロットします。識別番号はプロットに表示しても有用ではないので,[予測子]の[X]にRE_TA
を選択します。
散布図は,2の変数がクラスAAA
、BBB
、BB
およびCCC
をかなり良好に分類できることを示しています。しかし,残りのクラスに対応する観測値は,これらのクラスに混ざっています。
識別番号は予測に有用ではありません。したがって,[分類学習器]タブの[オプション]セクションで[特徴選択]をクリックします。[既定の特徴選択]タブで,(ID)チェックボックスの選択を解除して[保存して適用]をクリックします。[ワークスペースからの新規セッション]ダイアログボックスのチェックボックスを使用して,不要な予測子をはじめから削除することもできます。この例では,すべての予測子を含めた場合に,コード生成には使用されない予測子を削除する方法を示します。
Pcaの有効化
デ,タの次元を削減するため,pcaを有効にします。
[分類学習器]タブの[オプション]セクションで(PCA)をクリックします。[既定のpcaオプション]ダescアログボックスで,[主成分分析を有効化]を選択して[保存して適用]をクリックします。これによりpcaが予測子デ,タに適用され,モデルに学習をさせる前にデ,タが変換されます。分類学習器は,変動性の95%を総体として説明する成分のみを使用します。
モデルの学習
ラベル予測にいてコド生成をサポトする一連のモデルに学習をさせます。コド生成をサポトする分類学習器のモデルの一覧にいては,予測用のcコ,ドの生成を参照してください。
以下の分類モデルおよびオプションを選択します。これらはラベル予測用のコ,ド生成をサポ,トします。その後,交差検証を実施します(詳細はコ,ド生成の紹介を参照)。各モデルを選択するには,[モデル]セクションで[さらに表示]の矢印をクリックしてからモデルをクリックします。
選択するモデルおよびオプション | 説明 |
---|---|
[決定木]で[すべての木]を選択 | さまざまな複雑度の分類木 |
[サポ,トベクタ,マシン]で[すべてのsvm]を選択 | さまざまな複雑度でさまざまなカ,ネルを使用するsvm。複雑な支持向量机では当てはめに時間が必要。 |
[アンサンブル分類器]で[ブ,スティング木]を選択。モデルの[概要]タブの[モデルのハ]で[最大分割数]を[5]に減らし[学習器の数]を[100]に増やす。 | 分類木のブ,スティングアンサンブル |
[アンサンブル分類器]で[バギング木]を選択。モデルの[概要]タブの[モデルのハ]で[最大分割数]を[50]に減らし[学習器の数]を[100]に増やす。 | 分類木のランダムフォレスト |
モデルを選択してオプションを指定したら,既定の複雑な木のモデル(モデル1)を削除します。[モデル]ペ@ @ンでモデルを右クリックして[削除]を選択します。次に,[学習]セクションで,[すべてを学習]をクリックして[すべてを学習]を選択します。
アプリによる各モデルタesc escプの交差検証後,各モデルおよびその5分割交差検証による分類精度が[モデル]ペ▪▪ンに表示され,最高精度をも▪▪モデルが強調表示されます。
5分割交差検証による分類精度が最大のモデル(細かいガウスSVM学習器の誤り訂正出力符号(ECOC)モデル)を選択します。主を有効にすると,分類学習器は6の予測子のう2を使用します。
[プロットと解釈]セクションで矢印をクリックしてギャラリ,を開き,[検証結果]グル,プの[混同行列 (検証)]をクリックします。
このモデルは,クラス一个
、B
およびC
を良好に識別します。ただし,これらのグル,プ内の特定のレベル,特に下のbレベル間では識別が不十分です。
ワ,クスペ,スへのモデルのエクスポ,ト
モデルをmatlab®ワ,クスペ,スにエクスポ,トし,saveLearnerForCoder
を使用してモデルを保存します。
[エクスポ,ト]セクションで[モデルのエクスポ,ト]をクリックし[コンパクトモデルのエクスポ,ト]を選択します。ダ@ @アログボックスの(好的)をクリックします。
構造体trainedModel
がmatlabのワ,クスペ,スに現れます。trainedModel
のClassificationSVM
フィ,ルドにコンパクトモデルが含まれています。
コマンドラ@ @ンで,現在のフォルダ@ @のClassificationLearnerModel.mat
という名前のファ@ @ルにコンパクトモデルを保存します。
saveLearnerForCoder (trainedModel。ClassificationSVM,“ClassificationLearnerModel”)
予測用のcコ,ドの生成
オブジェクト関数を使用する予測には学習済みのモデルオブジェクトが必要ですが,codegen
(MATLAB编码器)のarg游戏
オプションはこのようなオブジェクトを受け入れません。saveLearnerForCoder
とloadLearnerForCoder
を使用して,この制限に対処します。saveLearnerForCoder
を使用して,学習済みモデルを保存します。次に,loadLearnerForCoder
を使用して保存済みモデルを読み込んで関数预测
を呼び出す,エントリポ。最後に,codegen
を使用して,エントリポ。
デ,タの前処理
学習デ,タの場合と同じ方法で新しいデ,タの前処理を行います。
前処理を行うには,次の3のモデルパラメタが必要です。
removeVars
—デタから削除する変数のンデックスを識別する,最大でp
個の要素がある列ベクトル。p
は生デ,タ内の予測子変数の個数pcaCenters
-厳密に问
個のpcaの中心から成る行ベクトルpcaCoefficients
- - - - - -问
行r
列のpca係数行列。r
は最大で问
分類学習器で[特徴選択]を使用してデタを選択するときに削除した予測子変数のンデックスを指定します。Pca統計量をtrainedModel
から抽出します。
removeVars = 1;pcaCenters = trainedModel.PCACenters;pcacoeffents = trainedmodel . pcacoeffents;
モデルパラメ,タ,を現在のフォルダ,のModelParameters.mat
という名前のファ@ @ルに保存します。
保存(“ModelParameters.mat”,“removeVars”,“pcaCenters”,“pcaCoefficients”);
エントリポ@ @ント関数の定義
エントリポ@ @ント関数は,コ@ @ド生成用に定義する関数です。codegen
を使用して最上位レベルの関数を呼び出すことはできないので,コード生成に対応する関数を呼び出すエントリポイント関数を定義し,codegen
を使用してエントリポc / c++コドを生成しなければなりません。
現在のフォルダ,内に,以下を行うmypredictCL.m
という名前の関数を定義します。
分類学習器に渡したものと同じ予測子変数が含まれている、生の観測値の数値行列(
X
)を受け入れるClassificationLearnerModel.mat
内の分類モデルとModelParameters.mat
内のモデルパラメ,タ,を読み込むremoveVars
内の@ @ンデックスに対応する予測子変数を削除する分類学習器によって推定されたpcaの中心(
pcaCenters
)と係数(pcaCoefficients
)を使用して,残りの予測子デ,タを変換するモデルを使用して予測したラベルを返す。
コ,ドの生成
Cおよびc++は静的な型の言語なので,エントリポイント関数内のすべての変数のプロパティをコンパイル時に決定しなければなりません。coder.typeof
(MATLAB编码器)を使用して可変サ@ @ズの引数を指定し,この引数を使用してコ@ @ドを生成します。
coder.typeof
(MATLAB编码器)を使用して,コ,ド生成用のx
という名前の倍精度行列を作成します。x
の行数が任意でありx
の列数がp
であることを指定します。
P =大小(信用评级,2)- 1;X =编码器。typeof(0,[正无穷,p], [1 0]);
可変サ化学键ズの引数の指定に関する詳細に化学键いては,コド生成用の可変サズ引数の指定を参照してください。
mypredictCL.m
からmex関数を生成します。arg游戏
オプションを使用して,x
を引数として指定します。
codegenmypredictCLarg游戏x
codegen
はmexファ超市ルmypredictCL_mex.mexw64
を現在のフォルダ,に生成します。ファ▪▪ルの拡張子はプラットフォ▪▪ムによって異なります。
生成されたコ,ドの確認
予期されるラベルをmex関数が返すことを確認します。
応答変数を元のデタセットから削除し,15個の観測値を無作為に抽出します。
rng (“默认”);%用于再现性M = 15;testsampleT = datasample(creditrating(:,1:(end - 1)),m);
分類学習器によって学習をさせた分類モデルでpredictFcn
を使用して,対応するラベルを予測します。
testLabels = trainedModel.predictFcn(testsampleT);
生成されたテ,ブルを行列に変換します。
testsample = table2array(testsampleT);
testsample
の列は,分類学習器で読み込んだ予測子デ,タの列に対応します。
テストデ,タをmypredictCL
に渡します。関数mypredictCL
は,分類学習器で学習をさせた分類モデルと预测
を使用して,対応するラベルを予測します。
testlabelpredict = mypredictCL(testsample);
生成されたmex関数mypredictCL_mex
を使用して,対応するラベルを予測します。
testLabelsMEX = mypredictCL_mex(testsample);
予測子のセットを比較します。
isequal (testLabels testLabelsMEX testLabelsPredict)
Ans =逻辑1
すべての入力が等しい場合,isequal
は逻辑1 (true)を返します。predictFcn
、mypredictCL
,およびmex関数は同じ値を返します。
参考
loadLearnerForCoder
|saveLearnerForCoder
|coder.typeof
(MATLAB编码器)|codegen
(MATLAB编码器)|learnerCoderConfigurer