メインコンテンツ

loss

回帰ニューラル ネットワークの損失

R2021a 以降

    説明

    L = loss(Mdl,Tbl,ResponseVarName) は、table Tbl 内の予測子データと table 変数 ResponseVarName 内の応答値を使用して、学習させた回帰ニューラル ネットワーク Mdl の回帰損失を返します。既定では、回帰損失は平均二乗誤差 (MSE) です。

    L = loss(Mdl,Tbl,Y) は、table Tbl 内の予測子データと Y 内の応答値を使用して、モデル Mdl の回帰損失を返します。

    L = loss(Mdl,X,Y) は、予測子データ XY 内の対応する応答値を使用して、学習させた回帰ニューラル ネットワーク Mdl の回帰損失を返します。

    L = loss(___,Name=Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、予測子データの列が観測値に対応するように指定したり、損失関数を指定したり、観測値の重みを与えることができます。

    すべて折りたたむ

    回帰ニューラル ネットワーク モデルのテスト セットの平均二乗誤差 (MSE) を計算します。

    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 に設定します。

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

    テスト セットの MSE を計算します。MSE の値が小さいほど、パフォーマンスが優れていることを示します。

    testMSE = loss(Mdl,tblTest,"Systolic")
    testMSE = 22.2447
    

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

    標本ファイル 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 を除くすべての予測子を使用して学習させたモデルを使用することを検討します。

    R2024b 以降

    複数の応答変数をもつ回帰ニューラル ネットワークを作成します。

    carbig データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。DisplacementHorsepower などの予測子変数と応答変数の Acceleration および MPG が格納された table を作成します。table の最初の 8 行を表示します。

    load carbig
    cars = table(Displacement,Horsepower,Model_Year, ...
        Origin,Weight,Acceleration,MPG);
    head(cars)
        Displacement    Horsepower    Model_Year    Origin     Weight    Acceleration    MPG
        ____________    __________    __________    _______    ______    ____________    ___
    
            307            130            70        USA         3504           12        18 
            350            165            70        USA         3693         11.5        15 
            318            150            70        USA         3436           11        18 
            304            150            70        USA         3433           12        16 
            302            140            70        USA         3449         10.5        17 
            429            198            70        USA         4341           10        15 
            454            220            70        USA         4354            9        14 
            440            215            70        USA         4312          8.5        14 
    

    cars から table に欠損値がある行を削除します。

    cars = rmmissing(cars);

    米国製かどうかに基づいて、自動車を分類します。

    cars.Origin = categorical(cellstr(cars.Origin));
    cars.Origin = mergecats(cars.Origin,["France","Japan",...
        "Germany","Sweden","Italy","England"],"NotUSA");

    データを学習セットとテスト セットに分割します。観測値の約 85% をニューラル ネットワーク モデルの学習に使用し、観測値の約 15% を学習済みモデルの新しいデータでの性能のテストに使用します。cvpartition を使用してデータを分割します。

    rng("default") % For reproducibility
    c = cvpartition(height(cars),"Holdout",0.15);
    carsTrain = cars(training(c),:);
    carsTest = cars(test(c),:);

    学習データ carsTrainfitrnet 関数に渡して、多重応答ニューラル ネットワーク回帰モデルに学習させます。より良い結果を得るために、予測子データを標準化するように指定します。

    Mdl = fitrnet(carsTrain,["Acceleration","MPG"], ...
        Standardize=true)
    Mdl = 
      RegressionNeuralNetwork
               PredictorNames: {'Displacement'  'Horsepower'  'Model_Year'  'Origin'  'Weight'}
                 ResponseName: {'Acceleration'  'MPG'}
        CategoricalPredictors: 4
            ResponseTransform: 'none'
              NumObservations: 334
                   LayerSizes: 10
                  Activations: 'relu'
        OutputLayerActivation: 'none'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [1000×7 table]
    
    
      Properties, Methods
    
    

    Mdl は学習させた RegressionNeuralNetwork モデルです。ドット表記を使用して Mdl のプロパティにアクセスできます。たとえば、Mdl.ConvergenceInfo と指定すると、モデルの収束についての詳細情報を取得できます。

    検定の平均二乗誤差 (MSE) を計算して、テスト セットで回帰モデルの性能を評価します。MSE の値が小さいほど、パフォーマンスが優れていることを示します。名前と値の引数 OutputType"per-response" に設定して、各応答変数の損失を個別に返します。

    testMSE = loss(Mdl,carsTest,["Acceleration","MPG"], ...
        OutputType="per-response")
    testMSE = 1×2
    
        1.5341    4.8245
    
    

    テスト セット内の観測値に対する応答値を予測します。予測された応答値を table として返します。

    predictedY = predict(Mdl,carsTest,OutputType="table")
    predictedY=58×2 table
        Acceleration     MPG  
        ____________    ______
    
           9.3612       13.567
           15.655       21.406
           17.921       17.851
           11.139       13.433
           12.696        10.32
           16.498       17.977
           16.227       22.016
           12.165       12.926
           12.691       12.072
           12.424       14.481
           16.974       22.152
           15.504       24.955
           11.068       13.874
           11.978       12.664
           14.926       10.134
           15.638       24.839
          ⋮
    
    

    入力引数

    すべて折りたたむ

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

    標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用の追加列と観測値の重み用の列を Tbl に含めることができます。Tbl には、Mdl を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

    • Mdl を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName または Y を指定する必要はありません。

    • table に格納されている標本データを使用して Mdl に学習をさせた場合、loss の入力データも table に含まれていなければなりません。

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

    データ型: table

    応答変数の名前。Tbl 内の変数の名前として指定します。各応答変数は数値ベクトルでなければなりません。

    ResponseVarName は、文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定しなければなりません。たとえば、応答変数が TblTbl.Y として格納されている場合、ResponseVarName"Y" として指定します。それ以外の場合、TblY の列は予測子として扱われます。

    データ型: char | string | cell

    応答データ。数値のベクトル、行列、または table として指定します。

    • Y がベクトルの場合、Y の長さは X または Tbl の観測値の数と等しくなければなりません。

    • Y が行列または table の場合、Y と予測子データ (X または Tbl) の行数が同じでなければなりません。

    データ型: single | double | table

    予測子データ。数値行列として指定します。既定では、loss は、X の各行が 1 つの観測値に、各列が 1 つの予測子変数に対応すると見なします。

    メモ

    観測値が列に対応するように予測子行列を配置して ObservationsIn="columns" を指定すると、計算時間が大幅に短縮される可能性があります。

    XY の観測値の数は同じでなければなりません。

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

    データ型: single | double

    名前と値の引数

    すべて折りたたむ

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

    例: loss(Mdl,Tbl,"Response",Weights="W") は、table Tbl 内の変数 Response および W をそれぞれ応答値および観測値の重みとして使用するように指定します。

    損失関数。"mse" または関数ハンドルとして指定します。

    • "mse" — 重み付けされた平均二乗誤差。

    • 関数ハンドル — カスタム損失関数を指定するには、関数ハンドルを使用します。関数は次の形式でなければなりません。

      lossval = lossfun(Y,YFit,W)

      • 出力引数 lossval は浮動小数点スカラーです。

      • 関数名 (lossfun) を指定します。

      • Mdl が 1 つの応答変数をもつモデルの場合、Y は観測応答の長さ n の数値ベクトルです。ここで、nTbl または X の観測値の数です。Mdl が複数の応答変数をもつモデルの場合、Y は観測応答の nk 列の数値行列です。ここで、k は応答変数の数です。

      • YFit は、対応する予測応答の長さ n の数値ベクトルまたは nk 列の数値行列です。YFit のサイズは Y のサイズと一致していなければなりません。

      • W は、観測値の重みの n 行 1 列の数値ベクトルです。

    例: LossFun=@lossfun

    データ型: char | string | function_handle

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

    メモ

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

    データ型: char | string

    R2024b 以降

    出力損失のタイプ。"average" または "per-response" として指定します。

    説明
    "average"loss は、すべての応答変数で損失値の平均を求めてスカラー値を返します。
    "per-response"loss は、1 つの応答変数の損失を各要素とするベクトルを返します。

    例: OutputType="per-response"

    データ型: char | string

    R2023b 以降

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

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

    観測された応答値または観測値の重みが観測値にない場合、その観測値は loss による損失の計算に使用されません。

    例: PredictionForMissingValue="omitted"

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

    R2024b 以降

    損失の計算前に応答データを標準化するためのフラグ。数値または logical の 0 (false) または 1 (true) として指定します。StandardizeResponsestrue に設定すると、各応答変数が学習データの対応する変数の平均値と標準偏差によってセンタリングおよびスケーリングされます。

    スケールが大きく異なる応答変数が複数あり、OutputType"average" の場合、StandardizeResponsestrue として指定します。応答変数が 1 つだけの場合は応答データを標準化しないでください。

    例: StandardizeResponses=true

    データ型: single | double | logical

    観測値の重み。非負の数値ベクトルまたは Tbl 内の変数の名前を指定します。ソフトウェアは、X または Tbl の各観測値に、Weights の対応する値で重みを付けます。Weights の長さは、X または Tbl の観測値の数と等しくなければなりません。

    入力データを table Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトル WTbl.W として格納されている場合、"W" として指定します。

    既定の設定では、Weightsones(n,1) です。nX または Tbl の観測値数です。

    重みを指定した場合、loss は加重回帰損失を計算し、合計が 1 になるように重みを正規化します。

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

    出力引数

    すべて折りたたむ

    回帰損失。数値スカラーまたは数値ベクトルとして返されます。回帰損失のタイプは LossFun によって異なります。

    Mdl が 1 つの応答変数をもつモデルの場合、L は数値スカラーです。Mdl が複数の応答変数をもつモデルの場合、L のサイズと解釈は OutputType によって異なります。

    拡張機能

    すべて展開する

    バージョン履歴

    R2021a で導入

    すべて展開する