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

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

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

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

  • 判別分析

  • 単純ベイズ分類器

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

  • 効率的に学習させた線形分類器

  • 最近傍分類器

次のモデル タイプについては、エクスポートできるモデルに指定があります。

  • 決定木 — 代理決定分岐を使用せずに学習させたすべてのモデル

  • ロジスティック回帰分類器 — バイナリ GLM ロジスティック回帰を除くすべてのモデル

  • アンサンブル分類器 — 部分空間判別と部分空間 KNN を除くすべてのモデル

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

メモ

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

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

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

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

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

    Export Classification Model to Simulink dialog box with options selected

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

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

    Exported Classification Leaner app model in Simulink

    From Workspace (Simulink) ブロックは、エクスポートした分類モデルに対応するタイプの Predict ブロックに接続されます。たとえば、ガウス単純ベイズ モデルをエクスポートした場合、ブロックはClassificationNaiveBayes Predictブロックになります。効率的なロジスティック回帰や線形 SVM などの一部のモデルをエクスポートしたときに、データに 3 つ以上のクラスがあれば、ブロックはClassificationECOC 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 モデルに予測クラス スコアの出力端子を表示するように指定した場合、To Workspace1 というラベルが付いた追加ブロックが Predict ブロックの score 出力に接続されます。To Workspace1 ブロックは、分類スコアを MATLAB ワークスペース内の outputScores という名前の新しい変数に出力します。outputScoresnc 列の数値配列で、ninputData の観測値の数、ctrainedModel のクラスの数です。To Workspace1 ブロックをダブルクリックすると、ワークスペース変数の名前を編集したり、他のオプションを指定したりできます。

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

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

参考

関数

クラス

ブロック

関連するトピック