Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

新しいデータを予測するための分類モデルのエクスポート

新しいデータについて予測を行うためのワークスペースへのモデルのエクスポート

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

メモ

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

以下は、モデルを MATLAB® ワークスペースにエクスポートする手順です。

  1. 分類学習器で、エクスポートするモデルを [履歴] の一覧から選択します。

  2. [分類学習器] タブの [エクスポート] セクションで、次のエクスポート オプションのいずれかをクリックします。

    • モデルを学習させるために使用したデータを含める場合は、[モデルのエクスポート] を選択します。

      ClassificationTreeClassificationDiscriminantClassificationSVMClassificationNaiveBayesClassificationKNNClassificationEnsemble などの分類オブジェクトが含まれている構造体として、学習済みモデルをワークスペースにエクスポートします。

    • 学習データを含めない場合は、[コンパクト モデルのエクスポート] を選択します。このオプションを選択すると、不要なデータを可能な限り削除したモデルがエクスポートされます。一部の分類器では、これは学習データが含まれていないコンパクトな分類オブジェクトです (CompactClassificationTree など)。コンパクトな分類オブジェクトは新しいデータの予測を行うために使用できますが、利用可能なメソッドは少なくなります。

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

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

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

新しいデータでの予測

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

  1. エクスポートした分類器を使用して新しいデータ T について予測を行うには、次の形式を使用します。

    yfit = C.predictFcn(T)
    ここで、C は変数の名前 (trainedModelなど) です。

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

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

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

    出力の yfit には、データ点ごとのクラスの予測が含まれています。

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

    C.HowToPredict

さらに分析を行うため、エクスポートした構造体から分類オブジェクト (モデルのタイプに応じて trainedModel.ClassificationSVMtrainedModel.ClassificationTree など) を抽出することもできます。PCA などの特徴変換をアプリで使用した場合は、構造体の PCA フィールドの情報を使用してこの変換を考慮に入れる必要があることに注意してください。

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

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

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

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

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

  • コードを調べて、プログラムで分類器に学習をさせる方法を学ぶ

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

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

  1. 分類学習器の [履歴] の一覧で、コードを生成するモデルを選択します。

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

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

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

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

    たとえば、fishertable データセットで学習させた分類器を再学習させるには、次のように入力します。

    [trainedModel, validationAccuracy] = trainClassifier(fishertable)

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

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

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

    • 分類器を学習させ、すべての分類器オプションを指定する。

    • 交差検証を実行する。

    • 検定精度を計算する。

    • 検定予測とスコアを計算する。

    メモ

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

予測用の C コードの生成

分類学習器を使用して SVM モデルに学習をさせた場合、予測用の C コードを生成できます。

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

  • MATLAB Coder™ のライセンス

  • SVM モデル (バイナリまたはマルチクラス)

  • カテゴリカル予測子または応答が含まれていないデータセット

  1. 分類学習器で SVM モデルに学習をさせた後で、モデルをワークスペースにエクスポートします。

    エクスポートした構造体で分類モデル オブジェクトの名前を調べます。構造体のフィールドを調べてモデルの名前を識別します。たとえば、C.ClassificationSVM のようにします。C は構造体の名前 (trainedModel など) です。

    モデル名は、学習を行った SVM のタイプ (バイナリまたはマルチクラス) と、コンパクトなモデルをエクスポートしたかそうでないかによって異なります。モデルは ClassificationSVMCompactClassificationSVMClassificationECOC、または CompactClassificationECOC が可能です。

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

    saveLearnerForCoder(C.ClassificationSVM, 'mySVM')

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

    function label = classifyX (X) %#codegen 
    %CLASSIFYX Classify using SVM Model 
    %  CLASSIFYX classifies the measurements in X 
    %  using the SVM model in the file mySVM.mat, and then 
    %  returns class labels in label.
    
    CompactMdl = loadLearnerForCoder('mySVM'); 
    label = predict(CompactMdl,X); 
    end
  4. 関数から MEX 関数を生成します。以下に例を示します。

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

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

    labels = classifyX_mex(data);

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

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

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

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

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

    function label = classifyX (X) %#codegen 
    %CLASSIFYX Classify using SVM Model 
    %  CLASSIFYX classifies the measurements in X 
    %  using the SVM model in the file mySVM.mat, and then 
    %  returns class labels in label.
    % If you used manual feature selection in the app, ensure that X contains only the columns you included in the model.
    
    CompactMdl = loadLearnerForCoder('mySVM'); 
    pcaInfo = load('pcaInfo.mat', 'PCACenters', 'PCACoefficients'); 
    % performs pca transformation 
    pcaTransformedX = bsxfun(@minus, X, pcaInfo.PCACenters) * pcaInfo.PCACoefficients;
    [label, scores] = predict(CompactMdl, pcaTransformedX);
    end

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

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

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

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

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

    save mymodel trainedModel
  • コンパイルするコードを記述します。このコードでは、学習済みモデルを読み込んで予測に使用しなければなりません。コンパイルされたアプリケーションで Statistics and Machine Learning Toolbox™ のコードが必要であることをコンパイラに認識させるため、プラグマも必要です。このプラグマは、ツールボックスのどの関数でもかまいません。

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

    mcc -m mypredict.m
    

参考

関数

クラス

関連するトピック