メインコンテンツ

RegressionNeuralNetwork

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

R2021a 以降

    説明

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

    作成

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

    プロパティ

    すべて展開する

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

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

    ニューラル ネットワーク モデルの全結合層のサイズ。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは空になります。この場合、モデルのニューラル ネットワーク アーキテクチャを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは正の整数ベクトルになります。LayerSizesi 番目の要素がニューラル ネットワーク モデルの i 番目の全結合層の出力数です。この場合、LayerSizes には最終全結合層のサイズは含まれません。この層の出力は常に応答変数ごとに 1 つです。

    データ型: single | double

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

    全結合層の学習済みの層の重み。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは空になります。この場合、モデルの学習可能なパラメーターを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは cell 配列になります。cell 配列のエントリ i が全結合層 i の層の重みに対応します。たとえば、Mdl.LayerWeights{1} は、モデル Mdl の最初の全結合層についての重みを返します。この場合、LayerWeights には最終全結合層の重みが含まれます。

    データ型: cell

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

    全結合層の学習済みの層のバイアス。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは空になります。この場合、モデルの学習可能なパラメーターを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは cell 配列になります。cell 配列のエントリ i が全結合層 i の層のバイアスに対応します。たとえば、Mdl.LayerBiases{1} は、モデル Mdl の最初の全結合層についてのバイアスを返します。この場合、LayerBiases には最終全結合層のバイアスが含まれます。

    データ型: cell

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

    ニューラル ネットワーク モデルの全結合層の活性化関数。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは空になります。この場合、モデルのニューラル ネットワーク アーキテクチャを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは文字ベクトルまたは文字ベクトルの cell 配列になります。

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

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

    Activations が文字ベクトルまたは文字ベクトルの cell 配列の場合、値は次の表のようになります。

    説明
    "relu"

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

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

    "tanh"

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

    "sigmoid"

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

    f(x)=11+ex

    "none"

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

    データ型: char | cell

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

    最終全結合層の活性化関数。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは空になります。この場合、モデルのニューラル ネットワーク アーキテクチャを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは 'none' になります。

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

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

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

    収束制御のプロパティ

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

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

    構造体のフィールドは次のとおりです。

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

    ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、ValidationChecks の値は常に NaN になります。

    データ型: struct

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

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

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

    ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、table に TimeValidationChecks の列は含まれません。

    データ型: 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

    応答のプロパティ

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

    応答変数の名前。文字ベクトルまたは文字ベクトルの cell 配列として返されます。

    データ型: char | cell

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

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

    データ型: single | double

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

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

    データ型: char | function_handle

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

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

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

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

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

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

    データ型: double

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

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

    データ型: logical

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

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

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

    データ型: single | double

    オブジェクト関数

    すべて展開する

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

    すべて折りたたむ

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

    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: [1×1 struct]
              TrainingHistory: [708×7 table]
    
    
      Properties, Methods
    
    

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

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

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

    Deep Learning Toolbox™ を使用してカスタムのニューラル ネットワーク アーキテクチャを指定します。

    全結合層が直列に接続されたニューラル ネットワークを指定するには、LayerSizes 引数などの引数を使用してニューラル ネットワーク アーキテクチャを構成します。さらに複雑なアーキテクチャをもつニューラル ネットワーク (スキップ接続をもつニューラル ネットワークなど) の場合は、名前と値の引数 Networkdlnetwork オブジェクトを使用してアーキテクチャを指定できます。

    carbig データ セットを読み込みます。

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

    いずれかの配列に欠損値があるデータの行を削除します。

    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.2);
    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);

    次の特性をもつニューラル ネットワーク アーキテクチャを定義します。

    • 予測子の数と一致する入力サイズをもつ特徴入力層。

    • 3 つの全結合層とそれに続く ReLU 層が直列に接続され、全結合層の出力サイズは 12、2 番目と 3 番目の全結合層の後には加算層がある。

    • 2 番目と 3 番目の全結合層についてのスキップ接続。加算層を使用。

    • 応答の数と一致する出力サイズをもつ最終全結合層。

    inputSize = size(XTrain,2);
    outputSize = size(YTrain,2);
    
    net = dlnetwork;
    
    layers = [
        featureInputLayer(inputSize)
        fullyConnectedLayer(12)
        reluLayer(Name="relu1")
    
        fullyConnectedLayer(12)
    
        additionLayer(2,Name="add2")
        reluLayer(Name="relu2")
    
        fullyConnectedLayer(12)
        additionLayer(2,Name="add3")
        reluLayer
    
        fullyConnectedLayer(outputSize)];
    
    net = addLayers(net,layers);
    net = connectLayers(net,"relu1","add2/in2");
    net = connectLayers(net,"relu2","add3/in2");

    ニューラル ネットワーク アーキテクチャをプロットで可視化します。

    figure
    plot(net)

    Figure contains an axes object. The axes object contains an object of type graphplot.

    ニューラル ネットワーク回帰モデルに学習させます。

    Mdl = fitrnet(XTrain,YTrain,Network=net,Standardize=true)
    Mdl = 
      RegressionNeuralNetwork
                 ResponseName: 'Y'
        CategoricalPredictors: []
            ResponseTransform: 'none'
              NumObservations: 319
                   LayerSizes: []
                  Activations: ''
        OutputLayerActivation: ''
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [1000×5 table]
    
      View network information using dlnetwork.
    
    
      Properties, Methods
    
    

    検定の平均二乗誤差 (MSE) を計算して、テスト セットで回帰モデルの性能を評価します。値が小さいほど、予測精度が高いことを示します。

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

    拡張機能

    すべて展開する

    バージョン履歴

    R2021a で導入

    すべて展開する