このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
分類学習器は,分類モデルを対話的に選択して学習をさせるために適していますが,学習済みモデルに基づいてデータにラベルを付けるC / c++コードを生成しません。分類学習器アプリの[エクスポート]セクションの[関数の生成)ボタンは,モデルに学習をさせるためのMATLABコードを生成しますが,C / c++コードは生成しません。この例では,エクスポートされた分類モデルを使用して,ラベルを予測する関数からCコードを生成する方法を示します。この例では,以下の手順に従って,与えられた各種の財務比率から会社の信用格付けを予測するモデルを構築します。
统计和机器学习工具箱™に含まれているファイルCreditRating_Historical.dat
内の信用格付けデータセットを使用します。
主成分分析(PCA)を使用して,データの次元を削減します。
ラベル予測についてコード生成をサポートする一連のモデルに学習をさせます。
5分割交差検証以上の分類精度をもつモデルをエクスポートします。
エントリポイント関数からCコードを生成します。この関数では,新しい予測子データを変換してから,エクスポート済みのモデルを使用して対応するラベルを予測します。
標本データを読み込み,データを分類学習器アプリにインポートします。散布図を使用してデータを確認し,不要な予測子を削除します。
readtable
を使用して,ファイルCreditRating_Historical.dat
内の過去の信用格付けデータセットを表に読み込みます。
creditrating = readtable (“CreditRating_Historical.dat”);
[アプリケーション]タブで[分類学習器]をクリックします。
分類学習器の[分類学習器]タブで,[ファイル]セクションの(新規セッション]をクリックし,[ワークスペースから]を選択します。
(新規セッション]ダイアログボックスでテーブルcreditrating
を選択します。応答として認識されたものを除くすべての変数は倍精度数値ベクトルです。[セッションの開始)をクリックして5分割交差検証の分類精度に基づき,分類モデルを比較します。
分類学習器がデータを読み込み,変数WC_TA
およびID
の散布図をプロットします。識別番号はプロットに表示しても有用ではないので,[予測子]の[X]にRE_TA
を選択します。
散布図は2つの変数がクラスAAA
、BBB
、BB
およびCCC
をかなり良好に分類できることを示しています。しかし,残りのクラスに対応する観測値は,これらのクラスに混ざっています。
識別番号は予測に有用ではありません。したがって,[特徴量]セクションで[特徴選択]をクリックしてから(ID)チェックボックスの選択を解除します。(新規セッション]ダイアログボックスのチェック ボックスを使用して、不要な予測子をはじめから削除することもできます。この例では、すべての予測子を含めた場合に、コード生成には使用されない予測子を削除する方法を示します。
データの次元を削減するため,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のワークスペースに現れます。trainedModel
のClassificationSVM
フィールドにコンパクトモデルが含まれています。
コマンドラインで,現在のフォルダーのClassificationLearnerModel.mat
という名前のファイルにコンパクトモデルを保存します。
saveLearnerForCoder (trainedModel。ClassificationSVM,“ClassificationLearnerModel”)
オブジェクト関数を使用する予測には学習済みのモデルオブジェクトが必要ですが,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;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(真正的)を返します。predictFcn
、mypredictCL
,および墨西哥人関数は同じ値を返します。
learnerCoderConfigurer
|loadLearnerForCoder
|saveLearnerForCoder
|codegen
(MATLAB编码器)|coder.typeof
(MATLAB编码器)