Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

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

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

メモ

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

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

  1. 分類学習器で、エクスポートするモデルを [モデル] ペインから選択します。

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

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

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

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

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

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

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

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

    [yfit,scores] = C.predictFcn(T)
    C は変数の名前 (trainedModel など) です。事前設定されたバイナリ GLM ロジスティック回帰を使用して学習させたモデルをエクスポートした場合、クラス スコアは含まれません。エクスポートしたバイナリ GLM ロジスティック分類器には、次の形式を使用します。
    yfit = C.predictFcn(T)

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

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

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

    出力の yfit には、データ点ごとのクラスの予測が含まれています。出力の scores には、学習済みモデルから返されたクラス スコアが格納されます。scores は n 行 k 列の配列です。ここで、n はデータ点の数、k は学習済みモデルのクラスの数です。

  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 コードの生成

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

モデル タイプ基となるモデル オブジェクト
決定木ClassificationTree または CompactClassificationTree
判別分析ClassificationDiscriminant または CompactClassificationDiscriminant
単純ベイズ分類器ClassificationNaiveBayes または CompactClassificationNaiveBayes
サポート ベクター マシンClassificationSVM (バイナリ)、CompactClassificationSVM (バイナリ)、ClassificationECOC (マルチクラス)、または CompactClassificationECOC (マルチクラス)
効率的に学習させた線形分類器ClassificationLinear (バイナリ)、ClassificationECOC (マルチクラス)、または CompactClassificationECOC (マルチクラス)
最近傍分類器ClassificationKNN
カーネル近似ClassificationKernelClassificationECOC (マルチクラス)、または CompactClassificationECOC (マルチクラス)
アンサンブル分類器ClassificationEnsembleCompactClassificationEnsemble、または ClassificationBaggedEnsemble
ニューラル ネットワークClassificationNeuralNetwork または CompactClassificationNeuralNetwork

メモ

予測用の C コードの生成にはバイナリ GLM ロジスティック回帰モデルを使用できます。ただし、バイナリ GLM ロジスティック回帰の基となるモデルは GeneralizedLinearModel オブジェクトであるため、このプロセスでは数値予測をクラス予測に変換する追加のコード行を予測エントリポイント関数に含めることが必要になります。例については、分類学習器で学習させたバイナリ GLM ロジスティック回帰モデルのコード生成を参照してください。

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

  • MATLAB Coder™ のライセンス

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

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

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

    基となるモデル オブジェクトは、学習を行った 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. 次のコマンドを使用して、学習済み分類器の構造体 CPCACenters フィールドおよび 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 = coder.load('pcaInfo.mat','PCACenters','PCACoefficients');
    PCACenters = pcaInfo.PCACenters;
    PCACoefficients = pcaInfo.PCACoefficients;
    
    % Performs PCA transformation 
    pcaTransformedX = bsxfun(@minus,X,PCACenters)*PCACoefficients;
    
    [label,scores] = predict(CompactMdl,pcaTransformedX);
    end

詳しい例については、コード生成と分類学習器アプリを参照してください。C コード生成のワークフローと制限の詳細については、コード生成を参照してください。

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

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

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

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

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

    function ypred = mypredict(tbl)
    %#function fitctree
    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)を参照してください。

参考

関数

クラス

関連するトピック