Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

fitrnet

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

    説明

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

    Mdl = fitrnet(Tbl,ResponseVarName) は、table Tbl 内の予測子と table 変数 ResponseVarName 内の応答値を使用して学習させたニューラル ネットワーク回帰モデル Mdl を返します。

    Mdl = fitrnet(Tbl,formula) は、table Tbl 内の標本データを使用して学習させたニューラル ネットワーク回帰モデルを返します。formula は、Mdl の当てはめに使用する応答および Tbl 内の予測子変数サブセットの説明モデルです。

    Mdl = fitrnet(Tbl,Y) は、table Tbl 内の予測子変数とベクトル Y 内の応答値を使用してニューラル ネットワーク回帰モデルを返します。

    Mdl = fitrnet(X,Y) は、行列 X 内の予測子とベクトル Y 内の応答値を使用して学習させたニューラル ネットワーク回帰モデルを返します。

    Mdl = fitrnet(___,Name,Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、名前と値の引数 LayerSizesActivations を指定して、全結合層の出力の数や活性化関数を調整できます。

    すべて折りたたむ

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

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

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

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

    rng("default") % For reproducibility of the data partition
    c = cvpartition(length(MPG),"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: 'linear'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [1000×7 table]
    
    
      Properties, Methods
    
    

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

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

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

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

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

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

    データを学習データ (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: 318
                   LayerSizes: [30 10]
                  Activations: 'relu'
        OutputLayerActivation: 'linear'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [1000×7 table]
    
    
      Properties, Methods
    
    

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

    Mdl.LayerWeights{1}
    ans = 30×4
    
       -1.0617    0.1287    0.0797    0.4648
       -0.6497   -1.4565   -2.6026    2.6962
       -0.6420    0.2744   -0.0234   -0.0252
       -1.9727   -0.4665   -0.5833    0.9371
       -0.4373    0.1607    0.3930    0.7859
        0.5091   -0.0032   -0.6503   -1.6694
        0.0123   -0.2624   -2.2928   -1.0965
       -0.1386    1.2747    0.4085    0.5395
       -0.1755    1.5641   -3.1896   -1.1336
        0.4401    0.4942    1.8957   -1.1617
          ⋮
    
    
    Mdl.LayerBiases{1}
    ans = 30×1
    
       -1.3086
       -1.6205
       -0.7815
        1.5382
       -0.5256
        1.2394
       -2.3078
       -1.0709
       -1.8898
        1.9443
          ⋮
    
    

    最終全結合層の出力は 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 = 17.2022
    

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

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

    学習プロセスの各反復でニューラル ネットワークの検証損失を計算します。検証損失が妥当な値まで小さくなったら、その時点で学習プロセスを早期に停止します。

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

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

    データを学習セット tblTrain と検証セット tblValidation に分割します。観測値の約 30% が検証データ用に予約され、残りの観測値が学習データ セットに使用されます。

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

    学習セットを使用してニューラル ネットワーク回帰モデルに学習させます。tblTrain の列 Systolic を応答変数として指定します。検証セットを使用して各反復でモデルを評価します。名前と値の引数 Verbose を使用して、各反復で学習データを表示するように指定します。既定では、検証損失が 6 回連続でそれまでに計算された検証損失の最小値以上になると、その時点で学習プロセスが早期に終了します。検証損失が最小値以上になる許容回数を変更するには、名前と値の引数 ValidationPatience を指定します。

    Mdl = fitrnet(tblTrain,"Systolic", ...
        "ValidationData",tblValidation, ...
        "Verbose",1);
    |==========================================================================================|
    | Iteration  | Train Loss | Gradient   | Step       | Iteration  | Validation | Validation |
    |            |            |            |            | Time (sec) | Loss       | Checks     |
    |==========================================================================================|
    |           1|  516.021993| 3220.880047|    0.644473|    0.005193|  568.289202|           0|
    |           2|  313.056754|  229.931405|    0.067026|    0.002658|  304.023695|           0|
    |           3|  308.461807|  277.166516|    0.011122|    0.001363|  296.935608|           0|
    |           4|  262.492770|  844.627934|    0.143022|    0.000531|  240.559640|           0|
    |           5|  169.558740| 1131.714363|    0.336463|    0.000652|  152.531663|           0|
    |           6|   89.134368|  362.084104|    0.382677|    0.001059|   83.147478|           0|
    |           7|   83.309729|  994.830303|    0.199923|    0.000515|   76.634122|           0|
    |           8|   70.731524|  327.637362|    0.041366|    0.000361|   66.421750|           0|
    |           9|   66.650091|  124.369963|    0.125232|    0.000380|   65.914063|           0|
    |          10|   66.404753|   36.699328|    0.016768|    0.000363|   65.357335|           0|
    |==========================================================================================|
    | Iteration  | Train Loss | Gradient   | Step       | Iteration  | Validation | Validation |
    |            |            |            |            | Time (sec) | Loss       | Checks     |
    |==========================================================================================|
    |          11|   66.357143|   46.712988|    0.009405|    0.001130|   65.306106|           0|
    |          12|   66.268225|   54.079264|    0.007953|    0.001023|   65.234391|           0|
    |          13|   65.788550|   99.453225|    0.030942|    0.000436|   64.869708|           0|
    |          14|   64.821095|  186.344649|    0.048078|    0.000295|   64.191533|           0|
    |          15|   62.353896|  319.273873|    0.107160|    0.000290|   62.618374|           0|
    |          16|   57.836593|  447.826470|    0.184985|    0.000287|   60.087065|           0|
    |          17|   51.188884|  524.631067|    0.253062|    0.000287|   56.646294|           0|
    |          18|   41.755601|  189.072516|    0.318515|    0.000286|   49.046823|           0|
    |          19|   37.539854|   78.602559|    0.382284|    0.000290|   44.633562|           0|
    |          20|   36.845322|  151.837884|    0.211286|    0.000286|   47.291367|           1|
    |==========================================================================================|
    | Iteration  | Train Loss | Gradient   | Step       | Iteration  | Validation | Validation |
    |            |            |            |            | Time (sec) | Loss       | Checks     |
    |==========================================================================================|
    |          21|   36.218289|   62.826818|    0.142748|    0.000362|   46.139104|           2|
    |          22|   35.776921|   53.606315|    0.215188|    0.000321|   46.170460|           3|
    |          23|   35.729085|   24.400342|    0.060096|    0.001023|   45.318023|           4|
    |          24|   35.622031|    9.602277|    0.121153|    0.000289|   45.791861|           5|
    |          25|   35.573317|   10.735070|    0.126854|    0.000291|   46.062826|           6|
    |==========================================================================================|
    

    各反復における学習平均二乗誤差 (MSE) と検証 MSE を比較するプロットを作成します。既定では、fitrnet はオブジェクト MdlTrainingHistory プロパティに損失の情報を格納します。この情報にドット表記を使用してアクセスできます。

    iteration = Mdl.TrainingHistory.Iteration;
    trainLosses = Mdl.TrainingHistory.TrainingLoss;
    valLosses = Mdl.TrainingHistory.ValidationLoss;
    plot(iteration,trainLosses,iteration,valLosses)
    legend(["Training","Validation"])
    xlabel("Iteration")
    ylabel("Mean Squared Error")

    検証 MSE が最小になる対応する反復を確認します。最終的に返されるモデル Mdl は、この反復で学習させたモデルになります。

    [~,minIdx] = min(valLosses);
    iteration(minIdx)
    ans = 19
    

    ニューラル ネットワーク モデルの交差検証損失をさまざまな正則化強度で評価し、モデルの性能が最も高くなる対応する正則化強度を選択します。

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

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

    5 分割交差検証用に cvpartition オブジェクトを作成します。cvp を使用して、各分割の観測値の数がほぼ同じになるようにデータを 5 つの分割に分割します。分割の再現性を得るため、乱数シードを既定値に設定します。

    rng("default")
    n = size(cars,1);
    cvp = cvpartition(n,"KFold",5);

    さまざまな正則化強度でニューラル ネットワーク回帰モデルの交差検証平均二乗誤差 (MSE) を計算します。1/n に基づく正則化強度を試します。n は観測値の数です。ニューラル ネットワーク モデルに学習させる前にデータを標準化するように指定します。

    1/n
    ans = 0.0026
    
    lambda = (0:0.5:5)*1e-3;
    cvloss = zeros(length(lambda),1);
    for i = 1:length(lambda)
        cvMdl = fitrnet(cars,"MPG","Lambda",lambda(i), ...
            "CVPartition",cvp,"Standardize",true);
        cvloss(i) = kfoldLoss(cvMdl);
    end

    結果をプロットします。最小の交差検証 MSE に対応する正則化強度を求めます。

    plot(lambda,cvloss)
    xlabel("Regularization Strength")
    ylabel("Cross-Validation Loss")

    [~,idx] = min(cvloss);
    bestLambda = lambda(idx)
    bestLambda = 0
    

    正則化強度 bestLambda を使用してニューラル ネットワーク回帰モデルに学習させます。

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

    入力引数

    すべて折りたたむ

    モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

    • Tbl に応答変数が含まれている場合に Tbl 内の他の変数をすべて予測子として使用するには、ResponseVarName を使用して応答変数を指定します。

    • Tbl に応答変数が含まれている場合に Tbl 内の他の変数の一部のみを予測子として使用するには、formula を使用して式を指定します。

    • Tbl に応答変数が含まれていない場合は、Y を使用して応答変数を指定します。応答変数の長さと Tbl の行数は等しくなければなりません。

    データ型: table

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

    ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 YTblTbl.Y として格納されている場合、'Y' を指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は Y を含めてすべて予測子として扱われます。

    データ型: char | string

    応答変数および予測子変数サブセットの説明モデル。'Y~x1+x2+x3' という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Y は応答変数を、x1x2 および x3 は予測子変数を表します。

    モデルに学習をさせるための予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。

    式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。

    データ型: char | string

    応答データ。数値ベクトルとして指定します。Y の長さは X または Tbl の観測値の数と等しくなければなりません。

    データ型: single | double

    モデルの学習に使用する予測子データ。数値行列として指定します。

    既定では、X の各行が 1 つの観測値として扱われ、各列が 1 つの予測子として扱われます。

    Y の長さと X の観測値数は同じでなければなりません。

    予測子の名前を X に表示される順序で指定するには、名前と値の引数 PredictorNames を使用します。

    メモ

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

    データ型: single | double

    メモ

    ソフトウェアは、NaN、空の文字ベクトル ('')、空の string ("")、<missing>、および <undefined> の要素を欠損値として扱い、以下のいずれかの特性をもつ観測値を削除します。

    • 応答の欠損値 (たとえば、Y または ValidationData{2})

    • 予測子の観測値 (たとえば、X または ValidationData{1} の行) 内の少なくとも 1 つの欠損値

    • NaN 値または重み 0 (たとえば、Weights または ValidationData{3} 内の値)

    名前と値のペアの引数

    オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

    例: fitrnet(X,Y,'LayerSizes',[10 10],'Activations',["relu","tanh"]) は、2 つの全結合層をもつニューラル ネットワークを作成するように指定します。出力はそれぞれ 10 個です。最初の層では正規化線形ユニット (ReLU) 活性化関数を使用し、2 番目の層では双曲線正接活性化関数を使用します。
    ニューラル ネットワークのオプション

    すべて折りたたむ

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

    LayerSizes には最終全結合層のサイズは含まれません。詳細については、ニューラル ネットワークの構造を参照してください。

    例: 'LayerSizes',[100 25 10]

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

    説明
    'relu'

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

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

    'tanh'

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

    'sigmoid'

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

    f(x)=11+ex

    'none'

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

    • 活性化関数を 1 つだけ指定した場合は、Activations がニューラル ネットワーク モデルの最終全結合層を除くすべての全結合層の活性化関数になります (ニューラル ネットワークの構造を参照)。

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

    例: 'Activations','sigmoid'

    全結合層の重みを初期化する関数。'glorot' または 'he' として指定します。

    説明
    'glorot'Glorot 初期化子[1] (Xavier 初期化子とも呼ばれます) で重みを初期化します。Glorot 初期化子では、それぞれの層について、ゼロ平均で分散が 2/(I+O) の一様分布から個別に標本を抽出します。I は層の入力サイズ、O は出力サイズです。
    'he'He 初期化子[2]で重みを初期化します。He 初期化子では、それぞれの層について、ゼロ平均で分散が 2/I の正規分布から標本を抽出します。I は層の入力サイズです。

    例: 'LayerWeightsFunction','he'

    全結合層の初期バイアスのタイプ。'zeros' または 'ones' として指定します。

    • 'zeros' を指定すると、各全結合層の初期バイアスが 0 になります。

    • 'ones' を指定すると、各全結合層の初期バイアスが 1 になります。

    例: 'LayerBiasesInitializer','ones'

    データ型: char | string

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

    メモ

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

    例: 'ObservationsIn','columns'

    データ型: char | string

    正則化項の強度。非負のスカラーを指定します。最小化のための目的関数は、平均二乗誤差 (MSE) 損失関数とリッジ (L2) ペナルティ項から作成されます。

    例: 'Lambda',1e-4

    データ型: single | double

    予測子データを標準化するためのフラグ。数値または logical の 0 (false) または 1 (true) として指定します。Standardizetrue に設定すると、各数値予測子変数が対応する列の平均値と標準偏差によってセンタリングおよびスケーリングされます。ソフトウェアは、カテゴリカル予測子を標準化しません。

    例: 'Standardize',true

    データ型: single | double | logical

    収束制御オプション

    すべて折りたたむ

    詳細レベル。0 または 1 として指定します。名前と値の引数 'Verbose' は、fitrnet がコマンド ラインに表示する診断情報の量を制御します。

    説明
    0fitrnet は診断情報を表示しません。
    1fitrnet は診断情報を定期的に表示します。

    既定では、StoreHistorytrue に設定され、診断情報が fitrnetMdl 内に格納されます。診断情報にアクセスするには Mdl.TrainingHistory を使用します。

    例: 'Verbose',1

    データ型: single | double

    詳細出力の頻度 (コマンド ウィンドウに出力するまでの反復回数)。正の整数スカラーとして指定します。値 1 は、1 回の反復ごとに診断情報を出力することを示します。

    メモ

    この名前と値の引数を使用するには、Verbose1 に設定します。

    例: 'VerboseFrequency',5

    データ型: single | double

    学習履歴を格納するためのフラグ。数値または logical の 0 (false) または 1 (true) として指定します。StoreHistorytrue に設定すると、診断情報が Mdl 内に格納され、Mdl.TrainingHistory を使用してアクセスできます。

    例: 'StoreHistory',false

    データ型: single | double | logical

    学習の最大反復回数。正の整数スカラーとして指定します。

    学習ルーチンが正常に収束したかどうかに関係なく、学習済みのモデルが返されます。Mdl.ConvergenceInfo に収束情報が格納されます。

    例: 'IterationLimit',1e8

    データ型: single | double

    勾配の絶対許容誤差。非負のスカラーとして指定します。

    学習の反復 t における損失関数を t、反復 t における重みとバイアスに関する損失関数の勾配を t、初期点における損失関数の勾配を 0 とします。max|t|aGradientTolerance (a=max(1,min|t|,max|0|)) になると、学習プロセスが終了します。

    例: 'GradientTolerance',1e-5

    データ型: single | double

    損失の許容誤差。非負のスカラーとして指定します。

    いずれかの反復において損失が LossTolerance より小さくなると、学習プロセスが終了します。

    例: 'LossTolerance',1e-8

    データ型: single | double

    ステップ サイズの許容誤差。非負のスカラーとして指定します。

    いずれかの反復においてステップ サイズが StepTolerance より小さくなると、学習プロセスが終了します。

    例: 'StepTolerance',1e-4

    データ型: single | double

    学習の収束を検出するための検証データ。cell 配列または table として指定します。

    学習プロセスにおいて、ValidationData を使用して検証損失が定期的に推定されます。検証損失が連続して増加した回数が ValidationPatience の回数を超えると、その時点で学習が終了します。

    応答変数を含む予測子データの table Tbl を使用する場合、ValidationData を table として指定できます。この場合、ValidationData は、Tbl 内に含まれるものと同じ予測子および応答を格納していなければなりません。ソフトウェアは、Tbl が重さのベクトルを含む場合であっても、観測値に重みを適用することはありません。重みを指定するには、ValidationData を cell 配列として指定しなければなりません。

    ValidationData を cell 配列として指定する場合、次の形式でなければなりません。

    • ValidationData{1} は、予測子データと同じデータ型および方向でなければなりません。つまり、予測子行列 X を使用する場合、ValidationData{1} は、予測子データが X と同じ方向で格納されている m 行 p 列または p 行 m 列の行列でなければなりません。学習データ X の予測子変数と ValidationData{1} の予測子変数は対応していなければなりません。同様に、予測子データの予測子 table Tbl を使用する場合、ValidationData{1} は、Tbl に含まれるものと同じ予測子変数を格納していなければなりません。ValidationData{1} と予測子データの観測値の数が同じである必要はありません。

    • ValidationData{2} は応答変数 (Y または ResponseVarName) のデータ型および形式と一致しなければなりません。ValidationData{2} が応答の配列である場合、その要素数は ValidationData{1} にある観測値の数と同じでなければなりません。ValidationData{1} が table である場合、ValidationData{2} はその table 内の応答変数の名前とすることができます。同じ ResponseVarName または formula を使用する場合、ValidationData{2}[] として指定できます。

    • 必要に応じて、ValidationData{3} を観測値の重みについての m 次元の数値ベクトル、または観測値の重みを含むテーブル ValidationData{1} 内の変数名として指定できます。検証データに関する重みは、合計が 1 になるように正規化されます。

    ValidationData を指定し、コマンド ラインで検証損失を表示するには、Verbose1 に設定します。

    検証の評価の間隔 (反復回数)。正の整数スカラーとして指定します。値 1 は、1 回の反復ごとに検証メトリクスを評価することを示します。

    メモ

    この名前と値の引数を使用するには、ValidationData を指定しなければなりません。

    例: 'ValidationFrequency',5

    データ型: single | double

    検証の評価の停止条件。非負の整数スカラーとして指定します。検証損失が ValidationPatience 回連続でそれまでに計算された検証損失の最小値以上になると、その時点で学習が停止します。Mdl.TrainingHistory をチェックすると、検証損失が連続で最小値以上になっている現在までの回数 (Validation Checks) を確認できます。

    例: 'ValidationPatience',10

    データ型: single | double

    他の回帰のオプション

    すべて折りたたむ

    カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。説明は、予測子データの行に観測値、列に予測子があると仮定しています。

    説明
    正の整数のベクトル

    ベクトルの各エントリは、カテゴリカル変数が含まれている予測子データの列に対応するインデックス値です。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。

    fitrnet が入力変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。応答変数、観測値の重み変数、および関数で使用されないその他の変数は、'CategoricalPredictors' 値でカウントされません。

    logical ベクトル

    true というエントリは、予測子データの対応する列がカテゴリカル変数であることを意味します。ベクトルの長さは p です。

    文字行列行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
    文字ベクトルの cell 配列または string 配列配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。
    'all'すべての予測子がカテゴリカルです。

    既定では、予測子データがテーブル (Tbl) 内にある場合、fitrnet は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、fitrnet はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 'CategoricalPredictors' を使用してそれらを指定します。

    特定されたカテゴリカル予測子に対して、fitrnet はカテゴリカル変数に順序が設定されていないか順序が設定されているかに応じて、2 つの異なる方式を使用してダミー変数を作成します。順序付けのないカテゴリカル変数の場合、fitrnet は、そのカテゴリカル変数の各レベルについて 1 つずつダミー変数を作成します。順序付けされたカテゴリカル変数の場合、fitrnet は、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。

    例: 'CategoricalPredictors','all'

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

    予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。'PredictorNames' の機能は、学習データの提供方法によって決まります。

    • XY を指定した場合、'PredictorNames' を使用して X 内の予測子変数に名前を割り当てることができます。

      • PredictorNames 内の名前の順序は、X の予測子の順序に一致しなければなりません。X が既定の方向 (行に観測値、列に予測子) をもつと仮定すると、PredictorNames{1}X(:,1) の名前、PredictorNames{2}X(:,2) の名前 (以下同様) になります。また、size(X,2)numel(PredictorNames) は等しくなければなりません。

      • 既定では PredictorNames{'x1','x2',...} です。

    • Tbl が与えられた場合、'PredictorNames' を使用して学習に使用する予測子変数を選択できます。つまり、fitrnet は、学習中に PredictorNames の予測子変数と応答変数のみを使用します。

      • PredictorNamesTbl.Properties.VariableNames のサブセットでなければならず、応答変数の名前を含めることはできません。

      • 既定では、すべての予測子変数の名前が PredictorNames に格納されます。

      • 'PredictorNames'formula の両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。

    例: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

    データ型: string | cell

    応答変数名。文字ベクトルまたは string スカラーとして指定します。

    • Y を指定した場合、'ResponseName' を使用して応答変数の名前を指定できます。

    • ResponseVarName または formula を指定した場合、'ResponseName' を使用することはできません。

    例: 'ResponseName','response'

    データ型: char | string

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

    入力データをテーブル Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みのベクトル WTbl.W として格納されている場合、'W' として指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は W を含めてすべて予測子として扱われます。

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

    fitrnet は合計が 1 になるように重みを正規化します。

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

    交差検証オプション

    すべて折りたたむ

    交差検証済みモデルに学習させるためのフラグ。'on' または 'off' として指定します。

    'on' を指定すると、10 の分割を使用して交差検証済みモデルの学習が実行されます。

    名前と値の引数 CVPartitionHoldoutKFold、または Leaveout を使用すると、この交差検証の設定をオーバーライドできます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値の引数は、一度に 1 つだけです。

    または、後で Mdlcrossval に渡して交差検証を実行します。

    例: 'Crossval','on'

    データ型: char | string

    交差検証分割。cvpartition で作成した cvpartition 分割オブジェクトとして指定します。分割オブジェクトは、交差検証のタイプと、学習セットおよび検証セットのインデックス付けを指定します。

    交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

    例: cvp = cvpartition(500,'KFold',5) を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、'CVPartition',cvp を使用して交差検証済みモデルを指定できます。

    ホールドアウト検証に使用されるデータの比率。(0,1) の範囲のスカラー値として指定します。'Holdout',p を指定した場合、以下の手順が実行されます。

    1. p*100% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。

    2. コンパクトな学習済みモデルを交差検証済みモデルの Trained プロパティに格納する。

    交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

    例: 'Holdout',0.1

    データ型: double | single

    交差検証済みモデルで使用する分割の数。1 より大きい正の整数値として指定します。'KFold',k を指定した場合、以下の手順が実行されます。

    1. データを無作為に k 個のセットに分割する。

    2. 各セットについて、そのセットを検定データとして確保し、他の k – 1 個のセットを使用してモデルに学習をさせる。

    3. k 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている k 行 1 列の cell ベクトルに格納する。

    交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

    例: 'KFold',5

    データ型: single | double

    Leave-one-out 法の交差検証のフラグ。'on' または 'off' として指定します。'Leaveout','on' を指定した場合、n 個の観測値 (n は、モデルの NumObservations プロパティで指定される、欠損観測値を除外した観測値の個数) のそれぞれについて以下の手順が実行されます。

    1. いずれかの観測値を検証データとして確保し、他の n - 1 個の観測値を使用してモデルに学習をさせる。

    2. n 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている n 行 1 列の cell ベクトルに格納する。

    交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

    例: 'Leaveout','on'

    出力引数

    すべて折りたたむ

    学習させたニューラル ネットワーク回帰モデル。RegressionNeuralNetwork オブジェクトまたは RegressionPartitionedModel オブジェクトとして返されます。

    名前と値の引数 CrossValCVPartitionHoldoutKFoldLeaveout のいずれかを設定した場合、MdlRegressionPartitionedModel オブジェクトになります。それ以外の場合、MdlRegressionNeuralNetwork モデルです。

    Mdl のプロパティを参照するには、ドット表記を使用します。

    詳細

    すべて折りたたむ

    ニューラル ネットワークの構造

    既定のニューラル ネットワーク回帰モデルの層構造は次のとおりです。

    構造説明

    Default neural network regression model structure, with one customizable fully connected layer with a ReLU activation

    入力 — この層は Tbl または X の予測子データに対応します。

    最初の全結合層 — この層の出力数は既定では 10 です。

    • 名前と値の引数 LayerSizes を指定して、この層を大きくしたり、全結合層をネットワークにさらに追加したりできます。

    • この層の重みとバイアスは、MdlMdl.LayerWeights{1} プロパティと Mdl.LayerBiases{1} プロパティでそれぞれ確認できます。

    ReLU 活性化関数 — この活性化関数は fitrnet で最初の全結合層に適用されます。

    • 活性化関数は、名前と値の引数 Activations を指定して変更できます。

    最終全結合層 — この層の出力数は 1 です。

    • この層の重みとバイアスは、MdlMdl.LayerWeights{end} プロパティと Mdl.LayerBiases{end} プロパティでそれぞれ確認できます。

    出力 — この層は予測応答値に対応します。

    この層構造の回帰ニューラル ネットワーク モデルで予測を返す例については、回帰ニューラル ネットワーク モデルの層の構造を使用した予測を参照してください。

    ヒント

    • 数値予測子は可能であれば常に標準化します (Standardize を参照)。標準化を行うと、予測子を測定するスケールの影響を受けなくなります。

    アルゴリズム

    すべて折りたたむ

    学習ソルバー

    fitrnet では、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno 準ニュートン アルゴリズム (LBFGS) [3]が損失関数の最小化手法として使用され、平均二乗誤差 (MSE) が最小化されます。

    参照

    [1] Glorot, Xavier, and Yoshua Bengio. “Understanding the difficulty of training deep feedforward neural networks.” In Proceedings of the thirteenth international conference on artificial intelligence and statistics, pp. 249–256. 2010.

    [2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. “Delving deep into rectifiers: Surpassing human-level performance on imagenet classification.” In Proceedings of the IEEE international conference on computer vision, pp. 1026–1034. 2015.

    [3] Nocedal, J. and S. J. Wright. Numerical Optimization, 2nd ed., New York: Springer, 2006.

    R2021a で導入