Main Content

新しいデータによる予測のための回帰モデルのエクスポート

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

回帰学習器アプリで対話的に回帰モデルを作成した後で、最適なモデルをワークスペースにエクスポートできます。その後、学習済みのモデルを使用して、新しいデータによる予測を行うことができます。

メモ

回帰学習器がエクスポートする最終的なモデルの学習には、常にテスト用に確保されたデータを除くデータ セット全体が使用されます。使用する検証方式は、アプリによる検証メトリクスの計算方法のみに影響を与えます。結果を可視化する各種のプロットと検証メトリクスを使用して、回帰問題に最適なモデルを選択できます。

モデルを MATLAB® ワークスペースにエクスポートするには、次を行います。

  1. アプリで、エクスポートするモデルを [モデル] ペインから選択します。

    一般に、学習済みのモデルの完全なバージョンまたはコンパクトなバージョンを RegressionTree などの回帰オブジェクトを含む構造体としてワークスペースにエクスポートできます。

  2. [学習] タブで、[エクスポート] をクリックして [モデルのエクスポート] をクリックし、[モデルのエクスポート] を選択します。学習データを除外してコンパクトなモデルをエクスポートするには、[回帰モデルのエクスポート] ダイアログ ボックスでチェック ボックスをクリアします。コンパクトなモデルも新しいデータの予測に使用できます。モデルに学習データがない場合や学習データをモデルから除外できない場合はチェック ボックスが無効になることに注意してください。カーネル近似や効率的に学習させた線形モデルなどの一部のモデルには、学習データがまったく格納されません。

  3. 必要な場合は、エクスポートする変数の名前を [回帰モデルのエクスポート] ダイアログ ボックスで編集します。[OK] をクリックします。以前にエクスポートしたモデルが上書きされないようにするため、エクスポートするモデルの既定名 trainedModel は、エクスポートを行うたびにインクリメントされます (trainedModel1 など)。

    新しい変数 (trainedModel など) がワークスペースに表示されます。

    エクスポートしたモデルに関する情報がコマンド ウィンドウに表示されます。メッセージを読んで、新しいデータで予測を行う方法を確認します。

エクスポートしたモデルを使用した新しいデータについての予測

モデルを回帰学習器からワークスペースにエクスポートするか、アプリで生成したコードを実行すると、新しいデータで予測を行うために使用できる trainedModel という構造体が作成されます。この構造体には、モデル オブジェクトと予測のための関数が格納されます。この構造体を使用すると、主成分分析 (PCA) が含まれているモデルについて予測を行うことができます。

  1. エクスポートしたモデルを使用して、新しいデータ T について予測を行います。

    yfit = trainedModel.predictFcn(T)
    ここで、trainedModel はエクスポートした変数の名前です。

    アプリで使用した学習データと同じ形式およびデータ型のデータ T を指定します (テーブルまたは行列)。

    • テーブルを指定する場合は、学習データと同じ予測子名を含めます。predictFcn は、テーブル内の追加変数を無視します。変数の形式および型は、元の学習データと一致しなければなりません。

    • 行列を指定する場合、学習データと同じ予測子の列または行が、同じ順序および形式で格納されていなければなりません。応答変数、アプリでインポートしなかった変数、および他の未使用変数は含めないでください。

    出力の yfit には、各データ点についての予測が含まれています。

  2. エクスポートした構造体のフィールドを確認します。予測を行う方法のヘルプを表示するには、次のように入力します。

    trainedModel.HowToPredict

さらに分析を行うため、エクスポートした構造体からモデル オブジェクトを抽出することもできます。PCA などの特徴変換をアプリで使用する場合は、構造体の PCA フィールドの情報を使用してこの変換を考慮に入れなければなりません。

新しいデータでモデルに学習をさせる MATLAB コードの生成

回帰学習器アプリで対話的に回帰モデルを作成した後で、最適なモデルについて MATLAB コードを生成できます。このコードは、新しいデータでモデルに学習をさせるために使用できます。

以下を行う MATLAB コードを生成します。

  • 大規模なデータ セットでの学習。データのサブセットで学習を行ったモデルをアプリで探索し、選択したモデルに大規模なデータ セットで学習をさせるコードを生成する。

  • 他の関数の構文に関する知識を必要としない、モデルに学習をさせるスクリプトを作成する。

  • コードを調べて、プログラムでモデルに学習をさせる方法を学ぶ。

  • アプリでは変更できないオプションを設定するなど、さらに分析を行うためにコードを変更する。

  • 別のデータに対して分析を繰り返し、学習を自動化する。

コードを生成し、そのコードを使用して新しいデータでモデルに学習をさせるには、以下を行います。

  1. アプリの [モデル] ペインで、コードを生成するモデルを選択します。

  2. [学習] タブの [エクスポート] セクションで [関数の生成] をクリックします。

    コードがセッションから生成され、ファイルが MATLAB のエディターに表示されます。このファイルには、予測子、応答、モデルの学習方法、および検証方式が含まれています。ファイルを保存します。

  3. モデルに再学習させるには、元のデータまたは新しいデータを入力引数で指定してコマンド ラインで関数を呼び出します。新しいデータは、元のデータと同じ形状でなければなりません。

    生成されたコードの 1 行目から function という単語を除いた部分をコピーし、学習データまたは新しいデータの変数名を反映するように入力引数 trainingData を編集します。同様に、responseData 入力引数を編集します (該当する場合)。

    たとえば、データ セット cartable で学習させた回帰モデルに再学習させるには、次を入力します。

    [trainedModel,validationRMSE] = trainRegressionModel(cartable)

    生成されるコードは、構造体 trainedModel を返します。この構造体には、モデルを回帰学習器からワークスペースにエクスポートすると作成される構造体と同じフィールドが含まれています。

新しいデータによって同じモデルに学習をさせる処理を自動化する方法や、プログラムでモデルに学習をさせる方法については、生成されたコードを確認してください。このコードには、次の処理を行う方法が示されています。

  • 正しい形状になるようにデータを処理する。

  • モデルに学習をさせ、すべてのモデル オプションを指定する。

  • 交差検証を実行する。

  • 統計量を計算する。

  • 検証予測を計算する。

メモ

学習済み最適化可能なモデルから MATLAB コードを生成すると、生成されたコードに最適化プロセスは含まれません。

Simulink で予測を行うための回帰モデルのエクスポート

回帰学習器でモデルに学習させた後、モデルと学習データを Simulink® にエクスポートできます。その後、エクスポートした学習データまたは新しいデータを使用して Simulink でモデルによる予測を行うことができます。

次のモデル タイプについては、すべてのモデルをエクスポートできます。

  • 回帰木

  • サポート ベクター マシン

  • 効率的に学習させた線形回帰

  • ガウス過程回帰

  • アンサンブル

  • ニューラル ネットワーク

線形回帰またはカーネル近似回帰については、いずれのモデルも Simulink にエクスポートできません。

メモ

カテゴリカル予測子を含むモデルは Simulink にエクスポートできません。入力データにカテゴリカル データが含まれている場合は、アプリにインポートする前に、特徴選択を使用してカテゴリカル予測子を除外するか (回帰学習器アプリの使用による特徴選択と特徴変換を参照)、符号化したバージョンのカテゴリカル データを用意する必要があります。MATLAB コマンド ラインで dummyvar を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細は、ダミー変数を参照してください。

モデルを Simulink にエクスポートするには、次を行います。

  1. カテゴリカル予測子を含まないデータ セットを使用して、サポートされるモデルに回帰学習器で学習させます。サポートされるすべてのモデルに学習させるには、[学習] タブの [モデル] セクションで [Simulink でサポートされているすべて] をクリックし、[すべてを学習] をクリックします。エクスポートするモデルを [モデル] ペインで選択します。

  2. [学習] タブの [エクスポート] セクションで、[モデルのエクスポート] をクリックして [モデルを Simulink にエクスポート] を選択します。

  3. [回帰モデルを Simulink にエクスポート] ダイアログ ボックスで、モデルと入力データを MATLAB ワークスペースに保存するオプションをクリックします。モデルと入力データは Simulink モデル ワークスペースに保存することもできます。エクスポートする回帰モデルの変数名、およびエクスポートする Simulink モデル入力データの変数名を必要に応じて編集します。以前にエクスポートしたモデルが上書きされないように、モデルの既定名 trainedModel とモデル入力の既定名 inputData は、エクスポートを行うたびにインクリメントされます (trainedModel1 など)。[エクスポート] をクリックします。

    Export Regression Model to Simulink dialog box with options selected

  4. [Simulink モデルを名前を付けて保存] ダイアログ ボックスで、.slx ファイルの名前を必要に応じて編集し、[保存] をクリックします。MATLAB ワークスペースに保存するように指定した場合、学習済みモデルと入力データを含む .mat ファイルが同じディレクトリに作成されます。

    新しい変数 (trainedModelinputData など) が MATLAB ワークスペースに表示されます。Simulink が起動し、新しい Simulink モデルが作成されます。

    Exported Regression Leaner app model in Simulink

    From Workspace (Simulink) ブロックは、エクスポートした回帰モデルに対応するタイプの Predict ブロックに接続されます。たとえば、回帰木モデルをエクスポートした場合、ブロックは RegressionTree Predict ブロックになります。Predict ブロックをダブルクリックすると、データ型や追加オプションを指定できます。詳細については、対応する Predict ブロックのドキュメンテーション ページを参照してください。

    回帰学習器で特徴選択を使用するか PCA を有効にしてモデルに学習させた場合、From Workspace ブロックはモデル タイプのラベルが付いた Prediction サブシステム ブロックに接続されます。Prediction サブシステム ブロックをダブルクリックすると、Predict ブロック、Feature Selection サブシステム ブロック、および Dimensionality Reduction (PCA) サブシステム ブロックにアクセスできます。

  5. モデルは inputData の観測値を使用して予測を行うように構成されています。新しいデータを使用して予測を行うには、From Workspace ブロックをダブルクリックし、MATLAB 変数の名前かデータとして評価される式を入力します (詳細についてはFrom Workspace ブロックを使用したデータの読み込み (Simulink)を参照)。

  6. Simulink モデルを実行するには、[シミュレーション] タブで [実行] をクリックします。シミュレーション データ インスペクター (Simulink)を使用して、To Workspace (Simulink) ブロックのログ データを表示できます。

    To Workspace ブロックは、Predict ブロックからの予測応答を MATLAB ワークスペース内の outputPredictions という名前の新しい変数に出力します。To Workspace ブロックをダブルクリックすると、ワークスペース変数の名前を必要に応じて編集したり、ワークスペース変数の形式、ログに記録するサンプル数、ログ データの有効サンプル レート (間引き係数) などの他のオプションを指定したりできます。

Simulink での予測に Statistics and Machine Learning Toolbox™ ブロックを使用する方法を示す例については、RegressionTree Predict ブロックの使用による応答の予測を参照してください。

予測用の C コードの生成

この表のいずれかのモデルに回帰学習器を使用して学習をさせた場合、予測用の C コードを生成できます。

モデル タイプ基となるモデル オブジェクト
線形回帰LinearModel または CompactLinearModel
回帰木RegressionTree または CompactRegressionTree
サポート ベクター マシンRegressionSVM または CompactRegressionSVM
効率的に学習させた線形回帰RegressionLinear
ガウス過程回帰RegressionGP または CompactRegressionGP
カーネル近似回帰RegressionKernel
アンサンブルRegressionEnsembleCompactRegressionEnsemble、または RegressionBaggedEnsemble
ニューラル ネットワークRegressionNeuralNetwork または CompactRegressionNeuralNetwork

C コードの生成には以下が必要です。

  • MATLAB Coder™ のライセンス

  • 適切なモデル

  1. たとえば、回帰学習器で木モデルに学習をさせ、そのモデルをワークスペースにエクスポートします。

    エクスポートした構造体で基となる回帰モデル オブジェクトを調べます。構造体のフィールドを調べてモデル オブジェクトを識別します。たとえば、S.RegressionTree のようにします。S は構造体の名前です。

    基となるモデル オブジェクトは、コンパクトなモデルをエクスポートしたかどうか (つまり、学習データを除外したかどうか) によって異なります。モデル オブジェクトは RegressionTree オブジェクトまたは CompactRegressionTree オブジェクトにすることができます。

  2. saveLearnerForCoder(Mdl,filename) というように関数 saveLearnerForCoder を使用して、コード生成用にモデルを準備します。以下に例を示します。

    saveLearnerForCoder(S.RegressionTree,'myTree')

  3. 保存されたモデルを読み込んで新しいデータに対して予測を行う関数を作成します。以下に例を示します。

    function yfit = predictY (X) %#codegen
    %PREDICTY Predict responses using tree model
    %  PREDICTY uses the measurements in X 
    %  and the tree model in the file myTree.mat, and then 
    %  returns predicted responses in yfit.
    
    CompactMdl = loadLearnerForCoder('myTree'); 
    yfit = predict(CompactMdl,X);
    end
  4. 関数から MEX 関数を生成します。以下に例を示します。

    codegen predictY.m -args {data}
    コンパイル命令 %#codegen は、MATLAB コードがコード生成用であることを指定します。MEX 関数で確実に同じ入力を使用できるように、関数に対する引数としてワークスペース内のデータを -args オプションを使用して指定します。data は、モデルの学習に使用した予測列のみを含む行列として指定します。

  5. MEX 関数を使用して予測を行います。以下に例を示します。

    yfit = predictY_mex(data);

特徴選択または PCA 特徴変換をアプリで使用した場合、追加の手順を実行する必要があります。手動特徴選択を使用した場合、X で同じ列を指定します。引数 X は関数に対する入力です。

PCA をアプリで使用した場合、この変換を考慮に入れるため、エクスポートした構造体の PCA フィールドの情報を使用します。X に行列の列が同じ順序で含まれている限り、テーブルと行列のどちらをアプリにインポートしたかは関係ありません。コードを生成する前に、以下の手順に従います。

  1. 次のコマンドを使用して、学習済み回帰の構造体 SPCACenters フィールドおよび PCACoefficients フィールドをファイルに保存します。

    save('pcaInfo.mat','-struct','S','PCACenters','PCACoefficients');

  2. 作成した関数のファイルに、PCA 変換を実行する追加の行を含めます。関数を作成します。この関数では、保存されたモデルを読み込み、PCA を実行し、新しいデータに対して予測を行います。以下に例を示します。

    function yfit = predictY (X) %#codegen
    %PREDICTY Predict responses using tree model
    %  PREDICTY uses the measurements in X 
    %  and the tree model in the file myTree.mat, 
    %  and then returns predicted responses in yfit.
    % If you used manual feature selection in the app, ensure that X
    % contains only the columns you included in the model.
    
    CompactMdl = loadLearnerForCoder('myTree'); 
    pcaInfo = coder.load('pcaInfo.mat','PCACenters','PCACoefficients');
    PCACenters = pcaInfo.PCACenters;
    PCACoefficients = pcaInfo.PCACoefficients;
    
    % Performs PCA transformation 
    pcaTransformedX = bsxfun(@minus,X,PCACenters)*PCACoefficients;
    
    yfit = predict(CompactMdl,pcaTransformedX);
    end

C コード生成のワークフローと制限の詳細については、コード生成を参照してください。例については、saveLearnerForCoderloadLearnerForCoder を参照してください。

MATLAB Compiler の使用による予測の展開

回帰学習器からワークスペースにモデルをエクスポートした後で、MATLAB Compiler™ を使用してそのモデルを展開できます。

ワークスペースへのモデルのエクスポートの指示に従って trainedModel という名前で学習済みモデルを MATLAB ワークスペースにエクスポートしたとします。予測を展開するには、以下の手順に従います。

  • 構造体 trainedModel を .mat ファイルに保存します。

    save mymodel trainedModel
  • コンパイルするコードを記述します。このコードでは、学習済みモデルを読み込んで予測に使用しなければなりません。コンパイルされたアプリケーションで Statistics and Machine Learning Toolbox のコードが必要であることをコンパイラに認識させるため、プラグマも必要です。このプラグマは、回帰学習器で使用する任意のモデル学習関数 (たとえば fitrtree) にできます。

    function ypred = mypredict(tbl)
    %#function fitrtree
    load('mymodel.mat');
    ypred = trainedModel.predictFcn(tbl);
    end
  • スタンドアロン アプリケーションとしてコンパイルします。

    mcc -m mypredict.m
    

展開用のモデルを MATLAB Production Server にエクスポート

回帰学習器でモデルに学習させた後、展開用のモデルを MATLAB Production Server™ (MATLAB Compiler SDK™ が必要) にエクスポートできます。

  • [モデル] ペインで学習済みモデルを選択します。[学習] タブで、[エクスポート] をクリックして [モデルのエクスポート] をクリックし、[展開用にモデルをエクスポート] を選択します。

  • [モデルの展開用のプロジェクト ファイルの選択] ダイアログ ボックスで、プロジェクト ファイルの場所と名前を選択します。

  • 自動生成された predictFunction.m ファイルで、必要に応じてコードを検査し、修正します。

  • Production Server コンパイラ アプリを使用して、モデルおよび予測関数をパッケージ化します。[コンパイラ] タブの [テスト] セクションにある [クライアントのテスト] ボタンをクリックし、MATLAB Production Server へのモデル展開をシミュレートしてから、[パッケージ] セクションの [パッケージ] ボタンをクリックすることで、コードをパッケージ化できます。

例については、回帰学習器で学習させたモデルの MATLAB Production Server への展開を参照してください。詳細については、MATLAB Production Server 用のデプロイ可能なアーカイブの作成 (MATLAB Production Server)を参照してください。

参考

関数

クラス

関連するトピック