Main Content

predict

回帰ニューラル ネットワークの使用による応答の予測

R2021a 以降

    説明

    yfit = predict(Mdl,X) は、学習済みの回帰ニューラル ネットワーク モデル Mdl を使用して、table または行列 X 内の予測子データに対する予測応答値を返します。

    yfit は、i 番目のエントリが X の i 番目の観測値に対応する数値ベクトルとして返されます。

    yfit = predict(Mdl,X,Name,Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、予測子データの列が観測値に対応するように指定できます。

    すべて折りたたむ

    学習済みの回帰ニューラル ネットワーク モデルを使用してテスト セットの応答値を予測します。

    patients データ セットを読み込みます。データ セットから table を作成します。各行が 1 人の患者に対応し、各列が診断の変数に対応します。変数 Systolic を応答変数として使用し、残りの変数を予測子として使用します。

    load patients
    tbl = table(Diastolic,Height,Smoker,Weight,Systolic);

    非層化ホールドアウト分割を使用して、データを学習セット tblTrain とテスト セット tblTest に分割します。観測値の約 30% がテスト データ セット用に予約され、残りの観測値が学習データ セットに使用されます。

    rng("default") % For reproducibility of the partition
    c = cvpartition(size(tbl,1),"Holdout",0.30);
    trainingIndices = training(c);
    testIndices = test(c);
    tblTrain = tbl(trainingIndices,:);
    tblTest = tbl(testIndices,:);

    学習セットを使用して回帰ニューラル ネットワーク モデルに学習させます。tblTrain の列 Systolic を応答変数として指定します。数値予測子を標準化するための指定を行い、反復制限を 50 に設定します。既定では、ニューラル ネットワーク モデルには、最終全結合層を除き、出力数が 10 の全結合層が 1 つあります。

    Mdl = fitrnet(tblTrain,"Systolic", ...
        "Standardize",true,"IterationLimit",50);

    テスト セットの患者の収縮期血圧レベルを予測します。

    predictedY = predict(Mdl,tblTest);

    基準線を示した散布図を使用して結果を可視化します。予測値を縦軸に、実際の応答値を横軸に沿ってプロットします。基準線上にある点は予測が正しいことを示します。

    plot(tblTest.Systolic,predictedY,".")
    hold on
    plot(tblTest.Systolic,tblTest.Systolic)
    hold off
    xlabel("True Systolic Blood Pressure Levels")
    ylabel("Predicted Systolic Blood Pressure Levels")

    Figure contains an axes object. The axes object contains 2 objects of type line.

    多くの点が基準線から離れた位置にあるため、サイズ 10 の全結合層をもつ既定のニューラル ネットワーク モデルは、収縮期血圧レベルの最適な予測子ではないようです。

    テスト セットの損失と予測を比較することにより、特徴選択を実行します。すべての予測子を使用して学習させた回帰ニューラル ネットワーク モデルのテスト セット メトリクスを予測子のサブセットのみを使用して学習させたモデルのテスト セット メトリクスと比較します。

    標本ファイル fisheriris.csv を読み込みます。これには、アヤメについてのがく片の長さ、がく片の幅、花弁の長さ、花弁の幅、種の種類などのデータが格納されています。ファイルを table に読み込みます。

    fishertable = readtable('fisheriris.csv');

    非層化ホールドアウト分割を使用して、データを学習セット trainTbl とテスト セット testTbl に分割します。観測値の約 30% がテスト データ セット用に予約され、残りの観測値が学習データ セットに使用されます。

    rng("default")
    c = cvpartition(size(fishertable,1),"Holdout",0.3);
    trainTbl = fishertable(training(c),:);
    testTbl = fishertable(test(c),:);

    学習セット内のすべての予測子を使用して 1 つの回帰ニューラル ネットワーク モデルに学習させ、PetalWidth を除くすべての予測子を使用してもう 1 つのモデルに学習させます。両方のモデルについて、PetalLength を応答変数として指定し、予測子を標準化します。

    allMdl = fitrnet(trainTbl,"PetalLength","Standardize",true);
    subsetMdl = fitrnet(trainTbl,"PetalLength ~ SepalLength + SepalWidth + Species", ...
        "Standardize",true);

    2 つのモデルのテスト セットの平均二乗誤差 (MSE) を比較します。MSE の値が小さいほど、パフォーマンスが優れていることを示します。

    allMSE = loss(allMdl,testTbl)
    allMSE = 0.0834
    
    subsetMSE = loss(subsetMdl,testTbl)
    subsetMSE = 0.0884
    

    各モデルについて、テスト セットの予測される花弁の長さと実際の花弁の長さを比較します。予測される花弁の長さを縦軸に、実際の花弁の長さを横軸に沿ってプロットします。基準線上にある点は予測が正しいことを示します。

    tiledlayout(2,1)
    
    % Top axes
    ax1 = nexttile;
    allPredictedY = predict(allMdl,testTbl);
    plot(ax1,testTbl.PetalLength,allPredictedY,".")
    hold on
    plot(ax1,testTbl.PetalLength,testTbl.PetalLength)
    hold off
    xlabel(ax1,"True Petal Length")
    ylabel(ax1,"Predicted Petal Length")
    title(ax1,"All Predictors")
    
    % Bottom axes
    ax2 = nexttile;
    subsetPredictedY = predict(subsetMdl,testTbl);
    plot(ax2,testTbl.PetalLength,subsetPredictedY,".")
    hold on
    plot(ax2,testTbl.PetalLength,testTbl.PetalLength)
    hold off
    xlabel(ax2,"True Petal Length")
    ylabel(ax2,"Predicted Petal Length")
    title(ax2,"Subset of Predictors")

    Figure contains 2 axes objects. Axes object 1 with title All Predictors, xlabel True Petal Length, ylabel Predicted Petal Length contains 2 objects of type line. One or more of the lines displays its values using only markers Axes object 2 with title Subset of Predictors, xlabel True Petal Length, ylabel Predicted Petal Length contains 2 objects of type line. One or more of the lines displays its values using only markers

    予測が基準線の近くに分布しており、両方のモデルが適切に機能しているようなので、PetalWidth を除くすべての予測子を使用して学習させたモデルを使用することを検討します。

    単一の観測値の応答値を予測するために回帰ニューラル ネットワーク モデルの層がどのように連携するかを調べます。

    標本ファイル fisheriris.csv を読み込みます。これには、アヤメについてのがく片の長さ、がく片の幅、花弁の長さ、花弁の幅、種の種類などのデータが格納されています。ファイルを table に読み込み、table の最初の数行を表示します。

    fishertable = readtable('fisheriris.csv');
    head(fishertable)
        SepalLength    SepalWidth    PetalLength    PetalWidth     Species  
        ___________    __________    ___________    __________    __________
    
            5.1           3.5            1.4           0.2        {'setosa'}
            4.9             3            1.4           0.2        {'setosa'}
            4.7           3.2            1.3           0.2        {'setosa'}
            4.6           3.1            1.5           0.2        {'setosa'}
              5           3.6            1.4           0.2        {'setosa'}
            5.4           3.9            1.7           0.4        {'setosa'}
            4.6           3.4            1.4           0.3        {'setosa'}
              5           3.4            1.5           0.2        {'setosa'}
    

    データ セットを使用して回帰ニューラル ネットワーク モデルに学習させます。変数 PetalLength を応答として指定し、他の数値変数を予測子として使用します。

    Mdl = fitrnet(fishertable,"PetalLength ~ SepalLength + SepalWidth + PetalWidth");

    データ セットから 15 番目の観測値を選択します。ニューラル ネットワークの層が観測値をどのように扱い、予測応答値 newPointResponse をどのように返すかを調べます。

    newPoint = Mdl.X{15,:}
    newPoint = 1×3
    
        5.8000    4.0000    0.2000
    
    
    firstFCStep = (Mdl.LayerWeights{1})*newPoint' + Mdl.LayerBiases{1};
    reluStep = max(firstFCStep,0);
    
    finalFCStep = (Mdl.LayerWeights{end})*reluStep + Mdl.LayerBiases{end};
    
    newPointResponse = finalFCStep
    newPointResponse = 1.6716
    

    オブジェクト関数 predict で返される予測と一致することを確認します。

    predictedY = predict(Mdl,newPoint)
    predictedY = 1.6716
    
    isequal(newPointResponse,predictedY)
    ans = logical
       1
    
    

    2 つの結果は一致しています。

    入力引数

    すべて折りたたむ

    学習させた回帰ニューラル ネットワーク。fitrnet によって返される RegressionNeuralNetwork モデル オブジェクト、または compact によって返される CompactRegressionNeuralNetwork モデル オブジェクトとして指定します。

    応答の生成に使用する予測子データ。数値行列またはテーブルを指定します。

    既定では、X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

    • 数値行列の場合

      • X の列に含まれている変数の順序は、Mdl に学習させた予測子変数の順序と同じでなければなりません。

      • テーブル (たとえば Tbl) を使用して Mdl に学習をさせる場合、Tbl に含まれている予測子変数が数値のみであれば、X を数値行列にすることができます。学習時に Tbl 内の数値予測子をカテゴリカルとして扱うには、fitrnet の名前と値の引数 CategoricalPredictors を使用してカテゴリカル予測子を指定します。Tbl に種類の異なる予測子変数 (数値および categorical データ型など) が混在し、X が数値行列である場合、predict でエラーがスローされます。

    • テーブルの場合

      • predict は、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。

      • テーブル (たとえば Tbl) を使用して Mdl に学習をさせた場合、X 内のすべての予測子変数は変数名およびデータ型が、Mdl に学習させた (Mdl.PredictorNames に格納されている) 変数と同じでなければなりません。ただし、X の列の順序が Tbl の列の順序に対応する必要はありません。また、TblX に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict はこれらを無視します。

      • 数値行列を使用して Mdl に学習をさせる場合、Mdl.PredictorNames 内の予測子名と X 内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定するには、fitrnet の名前と値の引数 PredictorNames を使用します。X 内の予測子変数はすべて数値ベクトルでなければなりません。X に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict はこれらを無視します。

    Mdl に学習させるときに fitrnet"Standardize",true を設定した場合、予測子データの数値列が対応する平均および標準偏差を使用して標準化されます。

    メモ

    観測値が列に対応するように予測子行列を配置して "ObservationsIn","columns" を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して "ObservationsIn","columns" を指定することはできません。

    データ型: single | double | table

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

    例: predict(Mdl,X,"ObservationsIn","columns") は、予測子データの列が観測値に対応することを示します。

    予測子データにおける観測値の次元。"rows" または "columns" として指定します。

    メモ

    観測値が列に対応するように予測子行列を配置して "ObservationsIn","columns" を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して "ObservationsIn","columns" を指定することはできません。

    データ型: char | string

    R2023b 以降

    予測子に欠損値がある観測値に使用する予測した応答値。"median""mean"、または数値スカラーとして指定します。

    説明
    "median"predict は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の中央値を使用します。
    "mean"predict は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の平均値を使用します。
    数値スカラーpredict は、予測子に欠損値がある観測値について予測した応答値として、この値を使用します。

    例: "PredictionForMissingValue","mean"

    例: "PredictionForMissingValue",NaN

    データ型: single | double | char | string

    代替機能

    Simulink ブロック

    Simulink® にニューラル ネットワーク回帰モデルの予測を統合するには、Statistics and Machine Learning Toolbox™ ライブラリにある RegressionNeuralNetwork Predict ブロックを使用するか、MATLAB® Function ブロックを関数 predict と共に使用します。例については、RegressionNeuralNetwork Predict ブロックの使用による応答の予測MATLAB Function ブロックの使用によるクラス ラベルの予測を参照してください。

    使用するアプローチを判断する際は、以下を考慮してください。

    • Statistics and Machine Learning Toolbox ライブラリ ブロックを使用する場合、固定小数点ツール (Fixed-Point Designer)を使用して浮動小数点モデルを固定小数点に変換できます。

    • MATLAB Function ブロックを関数 predict と共に使用する場合は、可変サイズの配列に対するサポートを有効にしなければなりません。

    • MATLAB Function ブロックを使用する場合、予測の前処理や後処理のために、同じ MATLAB Function ブロック内で MATLAB 関数を使用することができます。

    拡張機能

    バージョン履歴

    R2021a で導入

    すべて展開する