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 コードを生成すると、生成されたコードに最適化プロセスは含まれません。

予測用の 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)を参照してください。

参考

関数

クラス

関連するトピック