Main Content

RegressionNeuralNetwork

回帰用のニューラル ネットワーク モデル

R2021a 以降

    説明

    RegressionNeuralNetwork オブジェクトは、回帰用の全結合の学習済みフィードフォワード ニューラル ネットワークです。ニューラル ネットワークの最初の全結合層にはネットワーク入力 (予測子データ X) からの結合があり、後続の各層には前の層からの結合があります。各全結合層では、入力に重み行列 (LayerWeights) が乗算されてからバイアス ベクトル (LayerBiases) が加算されます。最終層を除く各全結合層の後には活性化関数 (Activations および OutputLayerActivation) が続きます。最終全結合層によってネットワークの出力、つまり予測応答値が生成されます。詳細については、ニューラル ネットワークの構造を参照してください。

    作成

    RegressionNeuralNetwork オブジェクトの作成には fitrnet を使用します。

    プロパティ

    すべて展開する

    ニューラル ネットワークのプロパティ

    この プロパティ は読み取り専用です。

    ニューラル ネットワーク モデル内の全結合層のサイズ。正の整数ベクトルとして返されます。LayerSizes の i 番目の要素は、ニューラル ネットワーク モデルの i 番目の全結合層の出力数です。

    LayerSizes には最終全結合層のサイズは含まれません。この層の出力は常に 1 つです。

    データ型: single | double

    この プロパティ は読み取り専用です。

    全結合層の学習済みの層の重み。cell 配列として返されます。cell 配列内の i 番目のエントリは、i 番目の全結合層の層の重みに対応します。たとえば、Mdl.LayerWeights{1} は、モデル Mdl の最初の全結合層についての重みを返します。

    LayerWeights には最終全結合層の重みが含まれます。

    データ型: cell

    この プロパティ は読み取り専用です。

    全結合層の学習済みの層のバイアス。cell 配列として返されます。cell 配列内の i 番目のエントリは、i 番目の全結合層の層のバイアスに対応します。たとえば、Mdl.LayerBiases{1} は、モデル Mdl の最初の全結合層についてのバイアスを返します。

    LayerBiases には最終全結合層のバイアスが含まれます。

    データ型: cell

    この プロパティ は読み取り専用です。

    ニューラル ネットワーク モデルの全結合層の活性化関数。次の表の値をもつ文字ベクトルまたは文字ベクトルの cell 配列として返されます。

    説明
    'relu'

    正規化線形ユニット (ReLU) 関数 — 各入力要素に対して、0 より小さい値については 0 に設定するという次のしきい値演算を実行します。

    f(x)={x,x00,x<0

    'tanh'

    双曲線正接 (tanh) 関数 — 各入力要素に関数 tanh を適用します。

    'sigmoid'

    シグモイド関数 — 各入力要素に対して次の演算を実行します。

    f(x)=11+ex

    'none'

    恒等関数 — 変換を実行せずに、各入力要素を次のようにそのまま返します。f(x) = x

    • Activations に活性化関数が 1 つだけ含まれている場合は、ニューラル ネットワーク モデルの最終全結合層を除くすべての全結合層の活性化関数になります。最終全結合層には活性化関数はありません (OutputLayerActivation)。

    • Activations が活性化関数の配列の場合は、i 番目の要素がニューラル ネットワーク モデルの i 番目の層の活性化関数になります。

    データ型: char | cell

    この プロパティ は読み取り専用です。

    最終全結合層の活性化関数。'none' として返されます。

    この プロパティ は読み取り専用です。

    RegressionNeuralNetwork モデルの学習に使用されたパラメーター値。NeuralNetworkParams オブジェクトとして返されます。ModelParameters には、回帰ニューラル ネットワーク モデルの学習に使用された名前と値の引数などのパラメーター値が格納されます。

    ModelParameters のプロパティにアクセスするには、ドット表記を使用します。たとえば、モデル Mdl の全結合層の重みの初期化に使用する関数にアクセスするには Mdl.ModelParameters.LayerWeightsInitializer を使用します。

    収束制御のプロパティ

    この プロパティ は読み取り専用です。

    収束情報。構造体配列として返されます。

    フィールド説明
    Iterationsニューラル ネットワーク モデルの学習に使用された学習反復の数
    TrainingLoss返されたモデルの学習平均二乗誤差 (MSE) (モデル MdlresubLoss(Mdl))
    Gradient返されたモデルに対応する反復における重みとバイアスに関する損失関数の勾配
    Step返されたモデルに対応する反復におけるステップ サイズ
    Timeすべての反復に費やした合計時間 (秒)
    ValidationLoss返されたモデルの検証 MSE
    ValidationChecks検証損失が連続で検証損失の最小値以上になった最大回数
    ConvergenceCriterion収束の基準
    HistoryTrainingHistory を参照

    データ型: struct

    この プロパティ は読み取り専用です。

    学習履歴。table として返されます。

    説明
    Iteration学習反復
    TrainingLossこの反復におけるモデルの学習平均二乗誤差 (MSE)
    Gradientこの反復における重みとバイアスに関する損失関数の勾配
    Stepこの反復におけるステップ サイズ
    Timeこの反復に費やした時間 (秒)
    ValidationLossこの反復におけるモデルの検証 MSE
    ValidationChecks検証損失が連続で検証損失の最小値以上になっている現在までの回数

    データ型: table

    この プロパティ は読み取り専用です。

    ニューラル ネットワーク モデルの学習に使用されたソルバー。'LBFGS' として返されます。fitrnet による RegressionNeuralNetwork モデルの作成では、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno 準ニュートン アルゴリズム (LBFGS) が損失関数の最小化手法として使用され、平均二乗誤差 (MSE) が最小化されます。

    予測子のプロパティ

    この プロパティ は読み取り専用です。

    予測子変数名。文字ベクトルの cell 配列として返されます。PredictorNames の要素の順序は、予測子名が学習データに現れる順序に対応します。

    データ型: cell

    この プロパティ は読み取り専用です。

    カテゴリカル予測子のインデックス。正の整数のベクトルとして返されます。予測子データの行に観測値が含まれていると仮定すると、CategoricalPredictors には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値が格納されます。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

    データ型: double

    この プロパティ は読み取り専用です。

    展開された予測子名。文字ベクトルの cell 配列として返されます。モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNamesPredictorNames と同じです。

    データ型: cell

    R2023b 以降

    この プロパティ は読み取り専用です。

    予測子の平均。数値ベクトルとして返されます。ニューラル ネットワーク モデルに学習させるときに Standardize1 または true に設定した場合、ベクトル Mu の長さは展開された予測子の数と等しくなります (ExpandedPredictorNames を参照)。展開されたカテゴリカル予測子に対応するダミー変数については、ベクトルに値 0 が格納されます。

    ニューラル ネットワーク モデルに学習させるときに Standardize0 または false に設定した場合、Mu の値は空ベクトル ([]) になります。

    データ型: double

    R2023b 以降

    この プロパティ は読み取り専用です。

    予測子の標準偏差。数値ベクトルとして返されます。ニューラル ネットワーク モデルに学習させるときに Standardize1 または true に設定した場合、ベクトル Sigma の長さは展開された予測子の数と等しくなります (ExpandedPredictorNames を参照)。展開されたカテゴリカル予測子に対応するダミー変数については、ベクトルに値 1 が格納されます。

    ニューラル ネットワーク モデルに学習させるときに Standardize0 または false に設定した場合、Sigma の値は空ベクトル ([]) になります。

    データ型: double

    この プロパティ は読み取り専用です。

    ニューラル ネットワーク モデルの学習に使用された標準化されていない予測子。数値行列または table として返されます。X では、fitrnet を呼び出したときの名前と値の引数 ObservationsIn の値に応じて、元の向きで行または列に観測値が格納されます。

    データ型: single | double | table

    応答のプロパティ

    この プロパティ は読み取り専用です。

    応答変数名。文字ベクトルとして返されます。

    データ型: char

    この プロパティ は読み取り専用です。

    モデルの学習に使用された応答値。数値ベクトルとして返されます。Y の各行は、X の対応する観測値の応答値を表します。

    データ型: single | double

    応答変換関数。'none' または関数ハンドルを指定します。ResponseTransform は、生の応答値を変換する方法を表します。

    MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。たとえば、Mdl.ResponseTransform = @function を入力できます。ここで function は、元の応答の数値ベクトルを受け入れ、変換した応答が格納されている同じサイズの数値ベクトルを返します。

    データ型: char | function_handle

    その他のデータのプロパティ

    この プロパティ は読み取り専用です。

    ハイパーパラメーターの交差検証最適化。ハイパーパラメーターおよび関連する値が含まれているテーブルまたは BayesianOptimization オブジェクトを指定します。モデルを作成するときに名前と値のペアの引数 'OptimizeHyperparameters' が空以外であった場合、このプロパティは空以外になります。HyperparameterOptimizationResults の値は、モデル作成時の構造体 HyperparameterOptimizationOptionsOptimizer フィールドの設定によって変化します。

    Optimizer フィールドの値HyperparameterOptimizationResults の値
    'bayesopt' (既定の設定)BayesianOptimization クラスのオブジェクト
    'gridsearch' または 'randomsearch'使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル

    この プロパティ は読み取り専用です。

    X および Y に格納されている学習データ内の観測値の個数。正の数値スカラーとして返されます。

    データ型: double

    この プロパティ は読み取り専用です。

    モデルに格納されている元の学習データの観測値。logical ベクトルとして返されます。このプロパティは、XY にすべての観測値が格納される場合は空になります。

    データ型: logical

    この プロパティ は読み取り専用です。

    モデルの学習に使用された観測値の重み。n 行 1 列の数値ベクトルとして返されます。n は観測値の個数 (NumObservations) です。

    W の要素の合計が 1 になるように、名前と値の引数 Weights で指定された観測値の重みが正規化されます。

    データ型: single | double

    オブジェクト関数

    すべて展開する

    compact機械学習モデルのサイズの縮小
    crossval機械学習モデルの交差検証
    limeLocal Interpretable Model-agnostic Explanations (LIME)
    partialDependence部分依存の計算
    plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
    shapleyシャープレイ値
    loss回帰ニューラル ネットワークの損失
    predict回帰ニューラル ネットワークの使用による応答の予測
    resubLoss再代入回帰損失
    resubPredict学習済み回帰モデルを使用した学習データについての応答の予測

    すべて折りたたむ

    ニューラル ネットワーク回帰モデルに学習させ、テスト セットでモデルの性能を評価します。

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

    load carbig
    cars = table(Acceleration,Displacement,Horsepower, ...
        Model_Year,Origin,Weight,MPG);

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

    cars = rmmissing(cars);

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

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

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

    rng("default") % For reproducibility of the data partition
    c = cvpartition(height(cars),"Holdout",0.20);
    trainingIdx = training(c); % Training set indices
    carsTrain = cars(trainingIdx,:);
    testIdx = test(c); % Test set indices
    carsTest = cars(testIdx,:);

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

    Mdl = fitrnet(carsTrain,"MPG","Standardize",true)
    Mdl = 
      RegressionNeuralNetwork
               PredictorNames: {'Acceleration'  'Displacement'  'Horsepower'  'Model_Year'  'Origin'  'Weight'}
                 ResponseName: 'MPG'
        CategoricalPredictors: 5
            ResponseTransform: 'none'
              NumObservations: 314
                   LayerSizes: 10
                  Activations: 'relu'
        OutputLayerActivation: 'none'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1x1 struct]
              TrainingHistory: [708x7 table]
    
    
    

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

    検定の平均二乗誤差 (MSE) を計算して、テスト セットで回帰モデルの性能を評価します。MSE の値が小さいほど、パフォーマンスが優れていることを示します。

    testMSE = loss(Mdl,carsTest,"MPG")
    testMSE = 7.1092
    

    全結合層のサイズなど、ニューラル ネットワーク回帰モデルの構造を指定します。

    carbig データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。予測子変数 AccelerationCylinders などが含まれている行列 X を作成します。応答変数 MPG を変数 Y に保存します。

    load carbig
    X = [Acceleration Cylinders Displacement Weight];
    Y = MPG;

    X および Y からいずれかの配列に欠損値がある行を削除します。

    R = rmmissing([X Y]);
    X = R(:,1:end-1);
    Y = R(:,end);

    データを学習データ (XTrain および YTrain) とテスト データ (XTest および YTest) に分割します。観測値の約 20% を検定用に予約し、残りの観測値を学習に使用します。

    rng("default") % For reproducibility of the partition
    c = cvpartition(length(Y),"Holdout",0.20);
    trainingIdx = training(c); % Indices for the training set
    XTrain = X(trainingIdx,:);
    YTrain = Y(trainingIdx);
    testIdx = test(c); % Indices for the test set
    XTest = X(testIdx,:);
    YTest = Y(testIdx);

    ニューラル ネットワーク回帰モデルに学習させます。予測子データを標準化するように指定し、最初の全結合層の出力数を 30、2 番目の全結合層の出力数を 10 に指定します。既定では、どちらの層でも正規化線形ユニット (ReLU) 活性化関数が使用されます。全結合層の活性化関数は、名前と値の引数 Activations を使用して変更できます。

    Mdl = fitrnet(XTrain,YTrain,"Standardize",true, ...
        "LayerSizes",[30 10])
    Mdl = 
      RegressionNeuralNetwork
                 ResponseName: 'Y'
        CategoricalPredictors: []
            ResponseTransform: 'none'
              NumObservations: 319
                   LayerSizes: [30 10]
                  Activations: 'relu'
        OutputLayerActivation: 'none'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1x1 struct]
              TrainingHistory: [1000x7 table]
    
    
    

    MdlLayerWeights プロパティと LayerBiases プロパティを使用して、学習させたモデルの全結合層の重みとバイアスにアクセスします。各プロパティの最初の 2 つの要素が最初の 2 つの全結合層の値に対応し、3 番目の要素が回帰用の最終全結合層の値に対応します。たとえば、最初の全結合層の重みとバイアスを表示します。

    Mdl.LayerWeights{1}
    ans = 30×4
    
        0.0123    0.0117   -0.0094    0.1175
       -0.4081   -0.7849   -0.7201   -2.1720
        0.6041    0.1680   -2.3952    0.0934
       -3.2332   -2.8360   -1.8264   -1.5723
        0.5851    1.5370    1.4623    0.6742
       -0.2106    1.2830   -1.7489   -1.5556
        0.4800    0.1012   -1.0044   -0.7959
        1.8015   -0.5272   -0.7670    0.7496
       -1.1428   -0.9902    0.2436    1.2288
       -0.0833   -2.4265    0.8388    1.8597
          ⋮
    
    
    Mdl.LayerBiases{1}
    ans = 30×1
    
       -0.4450
       -0.8751
       -0.3872
       -1.1345
        0.4499
       -2.1555
        2.2111
        1.2040
       -1.4595
        0.4639
          ⋮
    
    

    最終全結合層の出力は 1 つです。層の出力の数は、層の重みと層のバイアスの最初の次元に対応します。

    size(Mdl.LayerWeights{end})
    ans = 1×2
    
         1    10
    
    
    size(Mdl.LayerBiases{end})
    ans = 1×2
    
         1     1
    
    

    学習させたモデルの性能を推定するには、Mdl のテスト セットの平均二乗誤差 (MSE) を計算します。MSE の値が小さいほど、パフォーマンスが優れていることを示します。

    testMSE = loss(Mdl,XTest,YTest)
    testMSE = 18.3681
    

    テスト セットの予測応答値と実際の応答値を比較します。予測されるガロンあたりの走行マイル数 (MPG) を縦軸に、実際の MPG を横軸にしてプロットします。基準線上にある点は予測が正しいことを示します。優れたモデルでは、生成された予測が線の近くに分布します。

    testPredictions = predict(Mdl,XTest);
    plot(YTest,testPredictions,".")
    hold on
    plot(YTest,YTest)
    hold off
    xlabel("True MPG")
    ylabel("Predicted MPG")

    Figure contains an axes object. The axes object with xlabel True MPG, ylabel Predicted MPG contains 2 objects of type line. One or more of the lines displays its values using only markers

    拡張機能

    バージョン履歴

    R2021a で導入

    すべて展開する