メインコンテンツ

fitcnet

ニューラル ネットワーク分類モデルの学習

R2021a 以降

説明

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

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

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

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

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

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

[Mdl,AggregateOptimizationResults] = fitcnet(___) は、名前と値の引数 OptimizeHyperparametersHyperparameterOptimizationOptions が指定されている場合に、ハイパーパラメーターの最適化の結果が格納された AggregateOptimizationResults も返します。HyperparameterOptimizationOptionsConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この構文を使用すると、交差検証損失ではなくコンパクトなモデル サイズに基づいて最適化したり、オプションは同じでも制約範囲は異なる複数の一連の最適化問題を実行したりできます。

すべて折りたたむ

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

標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。データ セットの最初の数行をプレビューします。

creditrating = readtable("CreditRating_Historical.dat");
head(creditrating)
     ID      WC_TA     RE_TA     EBIT_TA    MVE_BVTD    S_TA     Industry    Rating 
    _____    ______    ______    _______    ________    _____    ________    _______

    62394     0.013     0.104     0.036      0.447      0.142        3       {'BB' }
    48608     0.232     0.335     0.062      1.969      0.281        8       {'A'  }
    42444     0.311     0.367     0.074      1.935      0.366        1       {'A'  }
    48631     0.194     0.263     0.062      1.017      0.228        4       {'BBB'}
    43768     0.121     0.413     0.057      3.647      0.466       12       {'AAA'}
    39255    -0.117    -0.799      0.01      0.179      0.082        4       {'CCC'}
    62236     0.087     0.158     0.049      0.816      0.324        2       {'BBB'}
    39354     0.005     0.181     0.034      2.597      0.388        7       {'AA' }

変数 ID の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID))creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 Industrycategorical 変数に変換します。

creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);

応答変数 Ratingcategorical 変数に変換します。

creditrating.Rating = categorical(creditrating.Rating, ...
    ["AAA","AA","A","BBB","BB","B","CCC"]);

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

rng("default") % For reproducibility of the partition
c = cvpartition(creditrating.Rating,"Holdout",0.20);
trainingIndices = training(c); % Indices for the training set
testIndices = test(c); % Indices for the test set
creditTrain = creditrating(trainingIndices,:);
creditTest = creditrating(testIndices,:);

学習データ creditTrain を関数 fitcnet に渡して、ニューラル ネットワーク分類器に学習させます。

Mdl = fitcnet(creditTrain,"Rating")
Mdl = 
  ClassificationNeuralNetwork
           PredictorNames: {'WC_TA'  'RE_TA'  'EBIT_TA'  'MVE_BVTD'  'S_TA'  'Industry'}
             ResponseName: 'Rating'
    CategoricalPredictors: 6
               ClassNames: [AAA    AA    A    BBB    BB    B    CCC]
           ScoreTransform: 'none'
          NumObservations: 3146
               LayerSizes: 10
              Activations: 'relu'
    OutputLayerActivation: 'softmax'
                   Solver: 'LBFGS'
          ConvergenceInfo: [1×1 struct]
          TrainingHistory: [1000×7 table]


  Properties, Methods

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

テスト セットの分類誤差を計算して、テスト セットで分類器の性能を評価します。混同行列を使用して結果を可視化します。

testAccuracy = 1 - loss(Mdl,creditTest,"Rating", ...
    "LossFun","classiferror")
testAccuracy = 
0.7977
confusionchart(creditTest.Rating,predict(Mdl,creditTest))

Figure contains an object of type ConfusionMatrixChart.

ニューラル ネットワークの全結合層を構成します。

レーダー信号のデータを含む ionosphere データ セットを読み込みます。X に予測子データが格納されており、応答変数の Y にレーダー信号が良好 ("g") か不良 ("b") かを表す値が格納されます。

load ionosphere

層化ホールドアウト分割を使用して、データを学習データ (XTrain および YTrain) とテスト データ (XTest および YTest) に分割します。観測値の約 30% をテスト用に予約し、残りの観測値を学習に使用します。

rng("default") % For reproducibility of the partition
cvp = cvpartition(Y,"Holdout",0.3);
XTrain = X(training(cvp),:);
YTrain = Y(training(cvp));
XTest = X(test(cvp),:);
YTest = Y(test(cvp));

ニューラル ネットワーク分類器に学習させます。最初の全結合層の出力数を 35、2 番目の全結合層の出力数を 20 に指定します。既定では、どちらの層でも正規化線形ユニット (ReLU) 活性化関数が使用されます。全結合層の活性化関数は、名前と値の引数 Activations を使用して変更できます。

Mdl = fitcnet(XTrain,YTrain, ...
    "LayerSizes",[35 20])
Mdl = 
  ClassificationNeuralNetwork
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
          NumObservations: 246
               LayerSizes: [35 20]
              Activations: 'relu'
    OutputLayerActivation: 'softmax'
                   Solver: 'LBFGS'
          ConvergenceInfo: [1×1 struct]
          TrainingHistory: [47×7 table]


  Properties, Methods

MdlLayerWeights プロパティと LayerBiases プロパティを使用して、学習させた分類器の全結合層の重みとバイアスにアクセスします。各プロパティの最初の 2 つの要素が最初の 2 つの全結合層の値に対応し、3 番目の要素が分類用のソフトマックス活性化関数をもつ最終全結合層の値に対応します。たとえば、2 番目の全結合層の重みとバイアスを表示します。

Mdl.LayerWeights{2}
ans = 20×35

    0.0481    0.2501   -0.1535   -0.0934    0.0760   -0.0579   -0.2465    1.0411    0.3712   -1.2007    1.1162    0.4296    0.4045    0.5005    0.8839    0.4624   -0.3154    0.3454   -0.0487    0.2648    0.0732    0.5773    0.4286    0.0881    0.9468    0.2981    0.5534    1.0518   -0.0224    0.6894    0.5527    0.7045   -0.6124    0.2145   -0.0790
   -0.9489   -1.8343    0.5510   -0.5751   -0.8726    0.8815    0.0203   -1.6379    2.0315    1.7599   -1.4153   -1.4335   -1.1638   -0.1715    1.1439   -0.7661    1.1230   -1.1982   -0.5409   -0.5821   -0.0627   -0.7038   -0.0817   -1.5773   -1.4671    0.2053   -0.7931   -1.6201   -0.1737   -0.7762   -0.3063   -0.8771    1.5134   -0.4611   -0.0649
   -0.1910    0.0246   -0.3511    0.0097    0.3160   -0.0693    0.2270   -0.0783   -0.1626   -0.3478    0.2765    0.4179    0.0727   -0.0314   -0.1798   -0.0583    0.1375   -0.1876    0.2518    0.2137    0.1497    0.0395    0.2859   -0.0905    0.4325   -0.2012    0.0388   -0.1441   -0.1431   -0.0249   -0.2200    0.0860   -0.2076    0.0132    0.1737
   -0.0415   -0.0059   -0.0753   -0.1477   -0.1621   -0.1762    0.2164    0.1710   -0.0610   -0.1402    0.1452    0.2890    0.2872   -0.2616   -0.4204   -0.2831   -0.1901    0.0036    0.0781   -0.0826    0.1588   -0.2782    0.2510   -0.1069   -0.2692    0.2306    0.2521    0.0306    0.2524   -0.4218    0.2478    0.2343   -0.1031    0.1037    0.1598
    1.1848    1.6142   -0.1352    0.5774    0.5491    0.0103    0.0209    0.7219   -0.8643   -0.5578    1.3595    1.5385    1.0015    0.7416   -0.4342    0.2279    0.5667    1.1589    0.7100    0.1823    0.4171    0.7051    0.0794    1.3267    1.2659    0.3197    0.3947    0.3436   -0.1415    0.6607    1.0071    0.7726   -0.2840    0.8801    0.0848
    0.2486   -0.2920   -0.0004    0.2806    0.2987   -0.2709    0.1473   -0.2580   -0.0499   -0.0755    0.2000    0.1535   -0.0285   -0.0520   -0.2523   -0.2505   -0.0437   -0.2323    0.2023    0.2061   -0.1365    0.0744    0.0344   -0.2891    0.2341   -0.1556    0.1459    0.2533   -0.0583    0.0243   -0.2949   -0.1530    0.1546   -0.0340   -0.1562
   -0.0516    0.0640    0.1824   -0.0675   -0.2065   -0.0052   -0.1682   -0.1520    0.0060    0.0450    0.0813   -0.0234    0.0657    0.3219   -0.1871    0.0658   -0.2103    0.0060   -0.2831   -0.1811   -0.0988    0.2378   -0.0761    0.1714   -0.1596   -0.0011    0.0609    0.4003    0.3687   -0.2879    0.0910    0.0604   -0.2222   -0.2735   -0.1155
   -0.6192   -0.7804   -0.0506   -0.4205   -0.2584   -0.2020   -0.0008    0.0534    1.0185   -0.0307   -0.0539   -0.2020    0.0368   -0.1847    0.0886   -0.4086   -0.4648   -0.3785    0.1542   -0.5176   -0.3207    0.1893   -0.0313   -0.5297   -0.1261   -0.2749   -0.6152   -0.5914   -0.3089    0.2432   -0.3955   -0.1711    0.1710   -0.4477    0.0718
    0.5049   -0.1362   -0.2218    0.1637   -0.1282   -0.1008    0.1445    0.4527   -0.4887    0.0503    0.1453    0.1316   -0.3311   -0.1081   -0.7699    0.4062   -0.1105   -0.0855    0.0630   -0.1469   -0.2533    0.3976    0.0418    0.5294    0.3982    0.1027   -0.0973   -0.1282    0.2491    0.0425    0.0533    0.1578   -0.8403   -0.0535   -0.0048
    1.1109   -0.0466    0.4044    0.6366    0.1863    0.5660    0.2839    0.8793   -0.5497    0.0057    0.3468    0.0980    0.3364    0.4669    0.1466    0.7883   -0.1743    0.4444    0.4535    0.1521    0.7476    0.2246    0.4473    0.2829    0.8881    0.4666    0.6334    0.3105    0.9571    0.2808    0.6483    0.1180   -0.4558    1.2486    0.2453
   -1.8572   -2.6653   -0.2140   -0.3477   -0.8055    0.9079    0.6366   -1.3961    1.7287    0.7673   -1.8550   -1.7492   -1.3679   -0.3315    2.7078   -0.7556    0.0769   -1.5157   -0.4442   -0.6340    0.2048   -1.0457   -0.1914   -1.6244   -1.7866   -0.6572   -1.8200   -1.3674   -0.6874   -1.1299   -0.0000   -1.9709    0.7340   -0.4415   -0.3320
    0.2370    0.8540   -0.7814   -0.2181   -0.0569    0.0027   -0.2945    0.1143   -0.6404   -0.4251    0.5823    0.5555    0.4856    0.1239    0.3043    0.1653   -0.2534    0.0117    0.3500   -0.0883    0.4188    0.1499    0.2924    1.0637    0.7403    0.0144   -0.5028    0.9141   -0.1405   -0.3842    0.6864   -0.0071   -0.1437    0.2459   -0.1786
   -0.4045   -1.0484   -0.1285   -0.4945   -0.3934   -0.0459   -0.2790   -0.0375    1.5520   -0.5361    0.3359   -0.5839   -0.4385   -0.6225   -1.1123   -0.5139    0.9128   -0.4074   -0.3080   -1.1164   -0.5790   -0.0578   -0.7154   -0.5121   -0.3480    0.3290   -0.2253    0.1340   -0.4615    0.1242   -0.8776    0.3386   -0.0865   -0.2834    0.0347
    0.0617   -0.1042   -0.1774   -0.0899   -0.0925   -0.3826   -0.0153    0.1875    0.1134   -0.0190   -0.1245    0.0485   -0.1353    0.0801   -0.6564   -0.2706   -0.3851   -0.0657   -0.0888   -0.3534   -0.0382   -0.1895   -0.1363   -0.4116   -0.2031   -0.1712   -0.1507   -0.1233   -0.3996   -0.0849   -0.2433   -0.1504   -0.1387   -0.1659    0.0534
    0.2469    0.8184   -0.7969    0.3706    0.0860    0.6381   -0.3027    0.5547    0.0410   -0.5412    1.4578    1.1429    0.6856    0.3181    0.8661    0.4728   -0.0410    0.8727    0.3093    0.6220    0.2403    0.1572    0.4424    0.4320    0.3807   -0.0664    0.5451    1.1958   -0.0054   -0.0761    0.6085    0.5600    0.2312    0.8952    0.3766
      ⋮

Mdl.LayerBiases{2}
ans = 20×1

    0.6147
    0.1891
   -0.2767
   -0.2977
    1.3655
    0.0347
    0.1509
   -0.4839
   -0.3960
    0.9248
   -0.5636
    0.1190
   -0.5285
   -0.3493
    1.7387
      ⋮

最終全結合層の出力は 2 つで、応答変数内のクラスごとに 1 つずつとなります。層の出力の数は、層の重みと層のバイアスの最初の次元に対応します。

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

     2    20

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

     2     1

学習させた分類器の性能を推定するには、Mdl のテスト セットの分類誤差を計算します。

testError = loss(Mdl,XTest,YTest, ...
    "LossFun","classiferror")
testError = 
0.0774
accuracy = 1 - testError
accuracy = 
0.9226

Mdl でテスト セットの観測値の約 92% が正確に分類されています。

R2025a 以降

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

レーダー信号のデータを含む ionosphere データ セットを読み込みます。X に予測子データが格納されており、応答変数の Y にレーダー信号が良好 ("g") か不良 ("b") かを表す値が格納されます。

load ionosphere

層化ホールドアウト分割を使用して、データを学習データ (XTrain および YTrain) とテスト データ (XTest および YTest) に分割します。観測値の約 30% をテスト用に予約し、残りの観測値を学習に使用します。

rng("default") % For reproducibility of the partition
cvp = cvpartition(Y,Holdout=0.3);
XTrain = X(training(cvp),:);
YTrain = Y(training(cvp));
XTest = X(test(cvp),:);
YTest = Y(test(cvp));

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

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

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

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

  • クラスの数と一致する出力サイズをもつ最終全結合層、その後にソフトマックス層。

inputSize = size(XTrain,2);
outputSize = numel(unique(YTrain));

net = dlnetwork;

layers = [
    featureInputLayer(inputSize)
    fullyConnectedLayer(30)
    leakyReluLayer(Name="lrelu1")

    fullyConnectedLayer(30)

    additionLayer(2,Name="add2")
    leakyReluLayer(Name="lrelu2")

    fullyConnectedLayer(30)
    additionLayer(2,Name="add3")
    leakyReluLayer

    fullyConnectedLayer(outputSize)
    softmaxLayer];

net = addLayers(net,layers);
net = connectLayers(net,"lrelu1","add2/in2");
net = connectLayers(net,"lrelu2","add3/in2");

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

figure
plot(net)

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

ニューラル ネットワーク分類器に学習させます。

Mdl = fitcnet(XTrain,YTrain,Network=net,Standardize=true)
Mdl = 
  ClassificationNeuralNetwork
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
          NumObservations: 246
               LayerSizes: []
              Activations: ''
    OutputLayerActivation: ''
                   Solver: 'LBFGS'
          ConvergenceInfo: [1×1 struct]
          TrainingHistory: [30×5 table]

  View network information using dlnetwork.


  Properties, Methods

学習させた分類器の性能を推定するには、テスト セットの分類誤差を計算します。

testError = loss(Mdl,XTest,YTest, ...
    LossFun="classiferror")
testError = 
0.0774

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

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

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

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

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

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

Mdl = fitcnet(tblTrain,"Smoker", ...
    "ValidationData",tblValidation, ...
    "Verbose",1);
|==========================================================================================|
| Iteration  | Train Loss | Gradient   | Step       | Iteration  | Validation | Validation |
|            |            |            |            | Time (sec) | Loss       | Checks     |
|==========================================================================================|
|           1|    2.602935|   26.866935|    0.262009|    0.030615|    2.793048|           0|
|           2|    1.470816|   42.594723|    0.058323|    0.005396|    1.247046|           0|
|           3|    1.299292|   25.854432|    0.034910|    0.001701|    1.507857|           1|
|           4|    0.710465|   11.629107|    0.013616|    0.003241|    0.889157|           0|
|           5|    0.647783|    2.561740|    0.005753|    0.007162|    0.766728|           0|
|           6|    0.645541|    0.681579|    0.001000|    0.000800|    0.776072|           1|
|           7|    0.639611|    1.544692|    0.007013|    0.001238|    0.776320|           2|
|           8|    0.604189|    5.045676|    0.064190|    0.000329|    0.744919|           0|
|           9|    0.565364|    5.851552|    0.068845|    0.000341|    0.694226|           0|
|          10|    0.391994|    8.377717|    0.560480|    0.000351|    0.425466|           0|
|==========================================================================================|
| Iteration  | Train Loss | Gradient   | Step       | Iteration  | Validation | Validation |
|            |            |            |            | Time (sec) | Loss       | Checks     |
|==========================================================================================|
|          11|    0.383843|    0.630246|    0.110270|    0.000827|    0.428487|           1|
|          12|    0.369289|    2.404750|    0.084395|    0.000408|    0.405728|           0|
|          13|    0.357839|    6.220679|    0.199197|    0.000383|    0.378480|           0|
|          14|    0.344974|    2.752717|    0.029013|    0.000389|    0.367279|           0|
|          15|    0.333747|    0.711398|    0.074513|    0.001102|    0.348499|           0|
|          16|    0.327763|    0.804818|    0.122178|    0.000388|    0.330237|           0|
|          17|    0.327702|    0.778169|    0.009810|    0.000315|    0.329095|           0|
|          18|    0.327277|    0.020615|    0.004377|    0.000322|    0.329141|           1|
|          19|    0.327273|    0.010018|    0.003313|    0.000373|    0.328773|           0|
|          20|    0.327268|    0.019497|    0.000805|    0.000536|    0.328831|           1|
|==========================================================================================|
| Iteration  | Train Loss | Gradient   | Step       | Iteration  | Validation | Validation |
|            |            |            |            | Time (sec) | Loss       | Checks     |
|==========================================================================================|
|          21|    0.327228|    0.113983|    0.005397|    0.001457|    0.329085|           2|
|          22|    0.327138|    0.240166|    0.012159|    0.000348|    0.329406|           3|
|          23|    0.326865|    0.428912|    0.036841|    0.000323|    0.329952|           4|
|          24|    0.325797|    0.255227|    0.139585|    0.000330|    0.331246|           5|
|          25|    0.325181|    0.758050|    0.135868|    0.000858|    0.332035|           6|
|==========================================================================================|

各反復における学習クロスエントロピー損失と検証クロスエントロピー損失を比較するプロットを作成します。既定では、fitcnet はオブジェクト MdlTrainingHistory プロパティに損失の情報を格納します。この情報にドット表記を使用してアクセスできます。

iteration = Mdl.TrainingHistory.Iteration;
trainLosses = Mdl.TrainingHistory.TrainingLoss;
valLosses = Mdl.TrainingHistory.ValidationLoss;

plot(iteration,trainLosses,iteration,valLosses)
legend(["Training","Validation"])
xlabel("Iteration")
ylabel("Cross-Entropy Loss")

Figure contains an axes object. The axes object with xlabel Iteration, ylabel Cross-Entropy Loss contains 2 objects of type line. These objects represent Training, Validation.

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

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

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

標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。データ セットの最初の数行をプレビューします。

creditrating = readtable("CreditRating_Historical.dat");
head(creditrating)
     ID      WC_TA     RE_TA     EBIT_TA    MVE_BVTD    S_TA     Industry    Rating 
    _____    ______    ______    _______    ________    _____    ________    _______

    62394     0.013     0.104     0.036      0.447      0.142        3       {'BB' }
    48608     0.232     0.335     0.062      1.969      0.281        8       {'A'  }
    42444     0.311     0.367     0.074      1.935      0.366        1       {'A'  }
    48631     0.194     0.263     0.062      1.017      0.228        4       {'BBB'}
    43768     0.121     0.413     0.057      3.647      0.466       12       {'AAA'}
    39255    -0.117    -0.799      0.01      0.179      0.082        4       {'CCC'}
    62236     0.087     0.158     0.049      0.816      0.324        2       {'BBB'}
    39354     0.005     0.181     0.034      2.597      0.388        7       {'AA' }

変数 ID の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID))creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 Industrycategorical 変数に変換します。

creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);

応答変数 Ratingcategorical 変数に変換します。

creditrating.Rating = categorical(creditrating.Rating, ...
    ["AAA","AA","A","BBB","BB","B","CCC"]);

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

rng("default")
cvp = cvpartition(creditrating.Rating,"KFold",5);

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

1/size(creditrating,1)
ans = 2.5432e-04
lambda = (0:0.5:5)*1e-4;
cvloss = zeros(length(lambda),1);

for i = 1:length(lambda)
    cvMdl = fitcnet(creditrating,"Rating","Lambda",lambda(i), ...
        "CVPartition",cvp,"Standardize",true);
    cvloss(i) = kfoldLoss(cvMdl,"LossFun","classiferror");
end

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

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

Figure contains an axes object. The axes object with xlabel Regularization Strength, ylabel Cross-Validation Loss contains an object of type line.

[~,idx] = min(cvloss);
bestLambda = lambda(idx)
bestLambda = 5.0000e-05

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

Mdl = fitcnet(creditrating,"Rating","Lambda",bestLambda, ...
    "Standardize",true)
Mdl = 
  ClassificationNeuralNetwork
           PredictorNames: {'WC_TA'  'RE_TA'  'EBIT_TA'  'MVE_BVTD'  'S_TA'  'Industry'}
             ResponseName: 'Rating'
    CategoricalPredictors: 6
               ClassNames: [AAA    AA    A    BBB    BB    B    CCC]
           ScoreTransform: 'none'
          NumObservations: 3932
               LayerSizes: 10
              Activations: 'relu'
    OutputLayerActivation: 'softmax'
                   Solver: 'LBFGS'
          ConvergenceInfo: [1×1 struct]
          TrainingHistory: [1000×7 table]


  Properties, Methods

OptimizeHyperparameters 引数を使用してニューラル ネットワーク分類器に学習させ、結果の分類器を改善します。この引数を使用すると、fitcnet はベイズ最適化を使用し、問題のある一部のハイパーパラメーターに対して交差検証損失を最小化します。

標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。データ セットの最初の数行をプレビューします。

creditrating = readtable("CreditRating_Historical.dat");
head(creditrating)
     ID      WC_TA     RE_TA     EBIT_TA    MVE_BVTD    S_TA     Industry    Rating 
    _____    ______    ______    _______    ________    _____    ________    _______

    62394     0.013     0.104     0.036      0.447      0.142        3       {'BB' }
    48608     0.232     0.335     0.062      1.969      0.281        8       {'A'  }
    42444     0.311     0.367     0.074      1.935      0.366        1       {'A'  }
    48631     0.194     0.263     0.062      1.017      0.228        4       {'BBB'}
    43768     0.121     0.413     0.057      3.647      0.466       12       {'AAA'}
    39255    -0.117    -0.799      0.01      0.179      0.082        4       {'CCC'}
    62236     0.087     0.158     0.049      0.816      0.324        2       {'BBB'}
    39354     0.005     0.181     0.034      2.597      0.388        7       {'AA' }

変数 ID の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID))creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 Industrycategorical 変数に変換します。

creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);

応答変数 Ratingcategorical 変数に変換します。

creditrating.Rating = categorical(creditrating.Rating, ...
    ["AAA","AA","A","BBB","BB","B","CCC"]);

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

rng("default") % For reproducibility of the partition
c = cvpartition(creditrating.Rating,"Holdout",0.20);
trainingIndices = training(c); % Indices for the training set
testIndices = test(c); % Indices for the test set
creditTrain = creditrating(trainingIndices,:);
creditTest = creditrating(testIndices,:);

学習データ creditTrain を関数 fitcnet に渡してニューラル ネットワーク分類器に学習させ、OptimizeHyperparameters 引数を含めます。再現性を得るために、HyperparameterOptimizationOptions 構造体 の AcquisitionFunctionName"expected-improvement-plus" に設定します。より適切な解を得るために、最適化のステップ数を既定値の 30 ではなく 100 に設定します。fitcnet は、既定の設定ではベイズ最適化を実行します。グリッド探索またはランダム探索を使用するために、HyperparameterOptimizationOptionsOptimizer フィールドを設定します。

rng("default") % For reproducibility
Mdl = fitcnet(creditTrain,"Rating","OptimizeHyperparameters","auto", ...
    "HyperparameterOptimizationOptions", ...
    struct("AcquisitionFunctionName","expected-improvement-plus", ...
    "MaxObjectiveEvaluations",100))
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|    1 | Best   |     0.55944 |      0.6624 |     0.55944 |     0.55944 |         none |         true |      0.05834 |  3                    |
|    2 | Best   |     0.21297 |      10.953 |     0.21297 |     0.22674 |         relu |         true |   5.0811e-08 | [  1  25]             |
|    3 | Accept |     0.74189 |     0.51791 |     0.21297 |     0.21333 |      sigmoid |         true |      0.57986 |  126                  |
|    4 | Accept |      0.4501 |     0.65455 |     0.21297 |     0.21319 |         tanh |        false |     0.018683 |  10                   |
|    5 | Accept |     0.45359 |      7.4426 |     0.21297 |     0.21318 |         relu |         true |   0.00037859 | [ 44   1   2]         |
|    6 | Accept |     0.30896 |      72.623 |     0.21297 |     0.21303 |         relu |         true |   4.0364e-09 | [175 183]             |
|    7 | Accept |     0.21424 |      7.0269 |     0.21297 |     0.21364 |         relu |         true |   4.1256e-08 |  1                    |
|    8 | Accept |     0.74189 |     0.19974 |     0.21297 |     0.21254 |         tanh |        false |      0.37071 | [ 10   3   3]         |
|    9 | Accept |     0.21774 |      10.829 |     0.21297 |     0.21352 |         relu |         true |   1.6265e-06 | [  3   5]             |
|   10 | Best   |     0.21265 |      9.6793 |     0.21265 |     0.21274 |         relu |         true |   9.6739e-05 | [  1   3   6]         |
|   11 | Accept |     0.74189 |     0.15813 |     0.21265 |     0.21218 |         relu |         true |       1.4153 |  27                   |
|   12 | Best   |     0.20947 |      7.8527 |     0.20947 |     0.20948 |         relu |         true |   4.7245e-07 | [  2   3   6]         |
|   13 | Accept |     0.23268 |      9.5702 |     0.20947 |     0.20952 |         tanh |        false |   3.4777e-08 |  10                   |
|   14 | Accept |     0.22441 |      13.989 |     0.20947 |     0.20952 |         tanh |        false |   1.4574e-05 | [ 11   2   9]         |
|   15 | Accept |     0.26732 |      69.975 |     0.20947 |     0.20954 |         tanh |        false |   3.6034e-07 | [291  10]             |
|   16 | Accept |     0.23427 |      7.0366 |     0.20947 |     0.20954 |         relu |        false |   3.2585e-09 |  1                    |
|   17 | Accept |     0.21488 |      26.038 |     0.20947 |     0.20954 |         relu |        false |   8.2337e-06 | [  1   2  93]         |
|   18 | Accept |     0.26224 |      47.701 |     0.20947 |     0.20955 |         relu |        false |   2.4128e-07 | [274   1]             |
|   19 | Accept |     0.74189 |     0.20321 |     0.20947 |     0.20955 |         relu |        false |     0.060533 | [  8   3]             |
|   20 | Accept |     0.43643 |      7.7327 |     0.20947 |     0.20949 |         relu |        false |    2.558e-07 | [  1  17   2]         |
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|   21 | Accept |     0.50858 |      4.0815 |     0.20947 |     0.20949 |         relu |        false |     0.017314 | [  8  82  93]         |
|   22 | Accept |     0.49714 |      8.0331 |     0.20947 |     0.20946 |         tanh |        false |     0.014033 | [225  17   9]         |
|   23 | Accept |     0.28608 |      82.071 |     0.20947 |     0.20947 |         relu |        false |   1.4036e-07 | [263  14 275]         |
|   24 | Accept |     0.26891 |      55.681 |     0.20947 |     0.19753 |         relu |        false |   2.9418e-05 | [135  11 192]         |
|   25 | Accept |     0.25175 |      69.479 |     0.20947 |     0.20948 |         relu |         true |   3.0659e-06 | [  5 150 186]         |
|   26 | Accept |     0.27018 |      45.668 |     0.20947 |     0.20144 |         relu |        false |   3.1943e-09 | [261   4]             |
|   27 | Accept |     0.22568 |      32.734 |     0.20947 |     0.20943 |         relu |         true |   1.1294e-06 | [  9   1 147]         |
|   28 | Accept |     0.21392 |      7.9387 |     0.20947 |     0.20941 |         tanh |        false |   8.9536e-07 |  1                    |
|   29 | Accept |     0.21901 |      51.491 |     0.20947 |     0.20937 |         tanh |        false |   1.2889e-07 | [  3   2 197]         |
|   30 | Accept |     0.21519 |       12.24 |     0.20947 |     0.20934 |         relu |        false |   0.00035024 | [  1  36   9]         |
|   31 | Accept |      0.2775 |      3.8553 |     0.20947 |     0.20934 |         tanh |        false |    0.0002159 | [  1   2]             |
|   32 | Accept |     0.21615 |      11.204 |     0.20947 |     0.20932 |         relu |        false |   4.3753e-05 | [  1  23   5]         |
|   33 | Accept |     0.21647 |      56.854 |     0.20947 |     0.20931 |         tanh |        false |   3.4689e-09 | [  1 268   4]         |
|   34 | Accept |     0.27463 |      53.603 |     0.20947 |     0.20937 |         relu |        false |   2.2259e-06 | [286  34]             |
|   35 | Accept |      0.3042 |      46.781 |     0.20947 |     0.20933 |         relu |         true |   1.1227e-07 |  281                  |
|   36 | Accept |     0.42912 |      29.189 |     0.20947 |     0.20939 |         relu |        false |   0.00076968 | [284   2   8]         |
|   37 | Accept |     0.21488 |      10.309 |     0.20947 |     0.20939 |         tanh |         true |   4.0099e-09 | [  1   3   4]         |
|   38 | Accept |     0.21774 |      7.3039 |     0.20947 |     0.20939 |         tanh |         true |   2.7818e-06 |  1                    |
|   39 | Accept |     0.30896 |      99.307 |     0.20947 |     0.20939 |         tanh |         true |   1.7536e-07 | [292   9 158]         |
|   40 | Accept |     0.52066 |      10.635 |     0.20947 |     0.20939 |         tanh |         true |    0.0096088 | [  1 161  24]         |
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|   41 | Accept |     0.21392 |      7.3746 |     0.20947 |     0.20939 |         tanh |         true |   3.5001e-08 |  1                    |
|   42 | Accept |     0.21742 |       11.47 |     0.20947 |      0.2094 |      sigmoid |        false |   3.5109e-09 | [  1  19]             |
|   43 | Accept |     0.25652 |      71.051 |     0.20947 |     0.20939 |      sigmoid |        false |   1.7677e-07 | [297   2]             |
|   44 | Accept |      0.2136 |      81.345 |     0.20947 |     0.20939 |      sigmoid |        false |   1.0104e-05 | [  1  95 272]         |
|   45 | Accept |     0.21488 |      7.9797 |     0.20947 |     0.20939 |      sigmoid |        false |   4.9812e-07 |  1                    |
|   46 | Accept |     0.74189 |     0.19233 |     0.20947 |     0.20938 |      sigmoid |        false |     0.014036 |  1                    |
|   47 | Accept |      0.2206 |      98.161 |     0.20947 |     0.20948 |      sigmoid |        false |   1.6413e-07 | [  4 144 271]         |
|   48 | Accept |     0.21551 |      56.403 |     0.20947 |     0.20938 |         tanh |         true |   5.3046e-08 | [  1 263]             |
|   49 | Accept |     0.21869 |      52.317 |     0.20947 |     0.20931 |         relu |        false |   0.00012348 | [  1  20 297]         |
|   50 | Accept |     0.24793 |      68.619 |     0.20947 |     0.20931 |      sigmoid |        false |   3.3564e-09 | [288   1  24]         |
|   51 | Accept |     0.24412 |      49.246 |     0.20947 |      0.2093 |      sigmoid |        false |   4.5434e-06 | [ 50  20 166]         |
|   52 | Accept |     0.21488 |      4.5457 |     0.20947 |     0.20931 |         none |        false |   7.8998e-09 | [  1   5]             |
|   53 | Accept |     0.22028 |      31.073 |     0.20947 |     0.20931 |         none |        false |   1.5483e-07 | [132  41  15]         |
|   54 | Accept |     0.22028 |      37.148 |     0.20947 |     0.20931 |         none |        false |    5.909e-09 | [271  16]             |
|   55 | Accept |     0.21615 |      3.7849 |     0.20947 |     0.20931 |         none |        false |   5.9842e-06 |  1                    |
|   56 | Accept |     0.21456 |      4.6696 |     0.20947 |     0.20931 |         none |        false |   2.9016e-07 |  1                    |
|   57 | Accept |     0.21615 |       39.25 |     0.20947 |     0.20932 |         none |        false |    0.0002184 | [246 194]             |
|   58 | Accept |      0.2206 |      23.229 |     0.20947 |     0.20931 |         none |        false |   1.1092e-05 |  277                  |
|   59 | Accept |      0.3007 |     0.58966 |     0.20947 |      0.2093 |         none |        false |    0.0048807 | [  1   3]             |
|   60 | Accept |     0.22155 |      1.3952 |     0.20947 |     0.20947 |         none |        false |   9.8985e-05 |  1                    |
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|   61 | Accept |     0.21996 |      20.233 |     0.20947 |     0.20931 |         none |         true |   3.1814e-09 | [297  16]             |
|   62 | Accept |     0.21488 |      1.8467 |     0.20947 |     0.20947 |         none |         true |   6.7267e-08 | [  1   7  13]         |
|   63 | Accept |     0.22028 |      63.616 |     0.20947 |     0.20932 |         none |         true |   3.7479e-07 | [227 157]             |
|   64 | Accept |     0.21964 |      81.089 |     0.20947 |     0.20947 |         none |         true |   3.3729e-08 | [236 263 240]         |
|   65 | Accept |       0.226 |        58.8 |     0.20947 |     0.20947 |      sigmoid |         true |   3.2435e-09 | [  3 268  16]         |
|   66 | Accept |     0.28512 |      62.087 |     0.20947 |     0.20947 |      sigmoid |         true |   1.6061e-07 | [293   1]             |
|   67 | Accept |     0.74189 |     0.39413 |     0.20947 |     0.20947 |         none |        false |       31.159 | [292  12]             |
|   68 | Accept |     0.30833 |      56.986 |     0.20947 |     0.20947 |      sigmoid |         true |   3.2135e-09 |  285                  |
|   69 | Accept |      0.2206 |      4.3217 |     0.20947 |     0.20927 |         relu |         true |   1.3908e-05 |  1                    |
|   70 | Accept |     0.21519 |      47.818 |     0.20947 |     0.20935 |      sigmoid |         true |    3.634e-08 | [  1 221  16]         |
|   71 | Accept |     0.21488 |      4.2978 |     0.20947 |     0.20935 |         none |         true |   4.2772e-09 | [  1  15 116]         |
|   72 | Accept |     0.22123 |      35.165 |     0.20947 |     0.20929 |         none |        false |    1.772e-05 | [  6 270]             |
|   73 | Accept |     0.21488 |      17.014 |     0.20947 |     0.20926 |         none |         true |   5.6831e-06 | [  1 123]             |
|   74 | Accept |     0.21964 |      16.494 |     0.20947 |     0.20929 |         none |         true |    1.584e-05 |  278                  |
|   75 | Accept |     0.21424 |      10.535 |     0.20947 |     0.20929 |      sigmoid |         true |   4.1488e-06 | [  1  18]             |
|   76 | Accept |     0.21583 |      15.623 |     0.20947 |      0.2068 |      sigmoid |         true |   5.3271e-07 | [  1   4  45]         |
|   77 | Accept |     0.23045 |      53.687 |     0.20947 |     0.20933 |      sigmoid |         true |    2.799e-05 |  295                  |
|   78 | Accept |     0.21424 |      49.711 |     0.20947 |     0.20927 |      sigmoid |        false |   1.5769e-06 | [  1 290]             |
|   79 | Accept |     0.24317 |      23.256 |     0.20947 |     0.20695 |      sigmoid |         true |   9.9752e-05 | [  1   2  75]         |
|   80 | Accept |     0.74189 |     0.59847 |     0.20947 |     0.20646 |         tanh |         true |       31.477 | [276   1]             |
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|   81 | Accept |     0.21265 |      8.0742 |     0.20947 |     0.20633 |      sigmoid |        false |   2.3742e-08 |  1                    |
|   82 | Accept |     0.21964 |      10.426 |     0.20947 |     0.20625 |         none |         true |   2.4884e-06 | [ 28  19]             |
|   83 | Accept |     0.22028 |      1.3151 |     0.20947 |      0.2062 |         none |         true |    7.322e-05 |  1                    |
|   84 | Accept |     0.24857 |      61.832 |     0.20947 |     0.20615 |         tanh |        false |   3.2805e-09 | [246   6]             |
|   85 | Accept |     0.26828 |      57.879 |     0.20947 |     0.20612 |         tanh |         true |   3.3231e-05 |  268                  |
|   86 | Accept |      0.2651 |      39.828 |     0.20947 |       0.206 |         tanh |         true |    2.978e-05 | [  1 211   1]         |
|   87 | Accept |     0.22092 |      9.3782 |     0.20947 |     0.20593 |         none |        false |   3.4358e-08 | [  6  10   8]         |
|   88 | Accept |     0.21551 |      9.2736 |     0.20947 |     0.20895 |         relu |         true |   6.6466e-07 | [  1   8]             |
|   89 | Accept |     0.32295 |      8.2648 |     0.20947 |     0.20834 |         relu |         true |   3.6643e-09 | [  1  29   4]         |
|   90 | Accept |     0.21615 |      10.897 |     0.20947 |     0.20844 |         tanh |        false |   5.9606e-06 | [  1   9]             |
|   91 | Accept |     0.21933 |      11.781 |     0.20947 |      0.2083 |         none |        false |   1.1645e-06 | [ 22  50]             |
|   92 | Accept |     0.21805 |      25.108 |     0.20947 |     0.20814 |         none |         true |   0.00017742 | [300  49]             |
|   93 | Accept |     0.21901 |      12.868 |     0.20947 |     0.20803 |         none |         true |   3.8704e-05 | [ 23   9  45]         |
|   94 | Accept |     0.21488 |      8.2557 |     0.20947 |     0.20803 |         none |         true |   5.7435e-07 | [  1   3  25]         |
|   95 | Accept |     0.32517 |      50.563 |     0.20947 |     0.20776 |         tanh |         true |   3.1834e-09 |  274                  |
|   96 | Accept |     0.21488 |      10.904 |     0.20947 |     0.20801 |         tanh |         true |   4.5154e-07 | [  1  16]             |
|   97 | Accept |     0.21392 |       11.16 |     0.20947 |     0.20803 |         none |        false |   3.1889e-09 | [ 15  32   1]         |
|   98 | Accept |     0.21583 |      20.833 |     0.20947 |     0.20983 |         relu |         true |   1.8928e-07 | [  1  61]             |
|   99 | Accept |     0.21329 |      7.1721 |     0.20947 |     0.21001 |      sigmoid |         true |    5.836e-09 |  1                    |
|  100 | Accept |     0.21996 |      3.3651 |     0.20947 |     0.21027 |         none |         true |   1.0486e-08 |  11                   |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 100 reached.
Total function evaluations: 100
Total elapsed time: 2719.497 seconds
Total objective function evaluation time: 2661.8987

Best observed feasible point:
    Activations    Standardize      Lambda      LayerSizes 
    ___________    ___________    __________    ___________

       relu           true        4.7245e-07    2    3    6

Observed objective function value = 0.20947
Estimated objective function value = 0.21027
Function evaluation time = 7.8527

Best estimated feasible point (according to models):
    Activations    Standardize      Lambda      LayerSizes 
    ___________    ___________    __________    ___________

       relu           true        4.7245e-07    2    3    6

Estimated objective function value = 0.21027
Estimated function evaluation time = 11.1905

Figure contains an axes object. The axes object with title Min objective vs. Number of function evaluations, xlabel Function evaluations, ylabel Min objective contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

Mdl = 
  ClassificationNeuralNetwork
                       PredictorNames: {'WC_TA'  'RE_TA'  'EBIT_TA'  'MVE_BVTD'  'S_TA'  'Industry'}
                         ResponseName: 'Rating'
                CategoricalPredictors: 6
                           ClassNames: [AAA    AA    A    BBB    BB    B    CCC]
                       ScoreTransform: 'none'
                      NumObservations: 3146
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]
                           LayerSizes: [2 3 6]
                          Activations: 'relu'
                OutputLayerActivation: 'softmax'
                               Solver: 'LBFGS'
                      ConvergenceInfo: [1×1 struct]
                      TrainingHistory: [1000×7 table]


  Properties, Methods

Mdl は学習させた ClassificationNeuralNetwork 分類器です。このモデルは、最適な観測実行可能点ではなく、最適な推定実行可能点に対応します (この区分の詳細については、bestPoint を参照してください)。ドット表記を使用して Mdl のプロパティにアクセスできます。たとえば、Mdl.HyperparameterOptimizationResults と指定すると、ニューラル ネットワーク モデルの最適化についての詳細情報を取得できます。

テスト データ セットで、モデルの分類精度を求めます。混同行列を使用して結果を可視化します。

modelAccuracy = 1 - loss(Mdl,creditTest,"Rating", ...
    "LossFun","classiferror")
modelAccuracy = 0.8040
confusionchart(creditTest.Rating,predict(Mdl,creditTest))

Figure contains an object of type ConfusionMatrixChart.

このモデルでは、真のクラスから 1 単位以内にすべての予測クラスが含まれています。つまり、すべての予測で格付けが 1 つしか離れていません。

OptimizeHyperparameters 引数を使用してニューラル ネットワーク分類器に学習させ、結果の分類器の精度を改善します。関数 hyperparameters を使用して、使用する層数および層のサイズの範囲に既定より大きい値を指定します。

標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。

creditrating = readtable("CreditRating_Historical.dat");

変数 ID の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID))creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 Industrycategorical 変数に変換します。

creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);

応答変数 Ratingcategorical 変数に変換します。

creditrating.Rating = categorical(creditrating.Rating, ...
    ["AAA","AA","A","BBB","BB","B","CCC"]);

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

rng("default") % For reproducibility of the partition
c = cvpartition(creditrating.Rating,"Holdout",0.20);
trainingIndices = training(c); % Indices for the training set
testIndices = test(c); % Indices for the test set
creditTrain = creditrating(trainingIndices,:);
creditTest = creditrating(testIndices,:);

Rating 応答を当てはめるこの問題に利用可能なハイパーパラメーターをリストします。

params = hyperparameters("fitcnet",creditTrain,"Rating");
for ii = 1:length(params)
    disp(ii);disp(params(ii))
end
     1

  optimizableVariable with properties:

         Name: 'NumLayers'
        Range: [1 3]
         Type: 'integer'
    Transform: 'none'
     Optimize: 1

     2

  optimizableVariable with properties:

         Name: 'Activations'
        Range: {'relu'  'tanh'  'sigmoid'  'none'}
         Type: 'categorical'
    Transform: 'none'
     Optimize: 1

     3

  optimizableVariable with properties:

         Name: 'Standardize'
        Range: {'true'  'false'}
         Type: 'categorical'
    Transform: 'none'
     Optimize: 1

     4

  optimizableVariable with properties:

         Name: 'Lambda'
        Range: [3.1786e-09 31.7864]
         Type: 'real'
    Transform: 'log'
     Optimize: 1

     5

  optimizableVariable with properties:

         Name: 'LayerWeightsInitializer'
        Range: {'glorot'  'he'}
         Type: 'categorical'
    Transform: 'none'
     Optimize: 0

     6

  optimizableVariable with properties:

         Name: 'LayerBiasesInitializer'
        Range: {'zeros'  'ones'}
         Type: 'categorical'
    Transform: 'none'
     Optimize: 0

     7

  optimizableVariable with properties:

         Name: 'Layer_1_Size'
        Range: [1 300]
         Type: 'integer'
    Transform: 'log'
     Optimize: 1

     8

  optimizableVariable with properties:

         Name: 'Layer_2_Size'
        Range: [1 300]
         Type: 'integer'
    Transform: 'log'
     Optimize: 1

     9

  optimizableVariable with properties:

         Name: 'Layer_3_Size'
        Range: [1 300]
         Type: 'integer'
    Transform: 'log'
     Optimize: 1

    10

  optimizableVariable with properties:

         Name: 'Layer_4_Size'
        Range: [1 300]
         Type: 'integer'
    Transform: 'log'
     Optimize: 0

    11

  optimizableVariable with properties:

         Name: 'Layer_5_Size'
        Range: [1 300]
         Type: 'integer'
    Transform: 'log'
     Optimize: 0

既定の 1 ~ 3 より多くの層を試すために、NumLayers (最適化可能な変数 1) の範囲を許容される最大サイズ [1 5] に設定します。また、Layer_4_Size および Layer_5_Size (それぞれ最適化可能な変数 10 および 11) を最適化されるように設定します。

params(1).Range = [1 5];
params(10).Optimize = true;
params(11).Optimize = true;

すべての層のサイズは、範囲 (最適化可能な変数 7 ~ 11) を既定値 [1 300] ではなく [1 400] に設定します。

for ii = 7:11
    params(ii).Range = [1 400];
end

学習データ creditTrain を関数 fitcnet に渡してニューラル ネットワーク分類器に学習させ、params に設定した OptimizeHyperparameters 引数を含めます。再現性を得るために、HyperparameterOptimizationOptions 構造体 の AcquisitionFunctionName"expected-improvement-plus" に設定します。より適切な解を得るために、最適化のステップ数を既定値の 30 ではなく 100 に設定します。

rng("default") % For reproducibility
Mdl = fitcnet(creditTrain,"Rating","OptimizeHyperparameters",params, ...
    "HyperparameterOptimizationOptions", ...
    struct("AcquisitionFunctionName","expected-improvement-plus", ...
    "MaxObjectiveEvaluations",100))
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|    1 | Best   |     0.74189 |     0.32605 |     0.74189 |     0.74189 |      sigmoid |         true |      0.68961 | [104   1   5   3   1] |
|    2 | Best   |      0.2225 |      79.214 |      0.2225 |     0.24316 |         relu |         true |   0.00058564 | [ 38 208 162]         |
|    3 | Accept |     0.63891 |      15.162 |      0.2225 |     0.22698 |      sigmoid |         true |   1.9768e-06 | [  1  25   1 287   7] |
|    4 | Best   |     0.21996 |      39.338 |     0.21996 |     0.22345 |         none |        false |   1.3353e-06 |  320                  |
|    5 | Accept |     0.74189 |     0.13266 |     0.21996 |     0.21999 |         relu |         true |       2.7056 | [  1   2   1]         |
|    6 | Accept |     0.29466 |      110.23 |     0.21996 |        0.22 |         relu |         true |   1.0503e-06 | [301  31 400]         |
|    7 | Accept |     0.68722 |      5.3887 |     0.21996 |     0.21999 |         relu |         true |       0.0113 | [ 97   5  56]         |
|    8 | Accept |     0.29116 |      78.242 |     0.21996 |     0.21998 |         relu |         true |   7.5665e-05 | [311  93   3]         |
|    9 | Accept |      0.3007 |      90.496 |     0.21996 |     0.21999 |         relu |         true |   5.6564e-08 | [ 29 375  84]         |
|   10 | Best   |     0.21138 |      84.357 |     0.21138 |     0.21129 |         relu |         true |    0.0002307 | [  1 102 350]         |
|   11 | Accept |     0.74189 |     0.14744 |     0.21138 |      0.2115 |         none |        false |       30.105 |  3                    |
|   12 | Accept |     0.21392 |       7.445 |     0.21138 |     0.21149 |         none |        false |   3.2104e-09 |  3                    |
|   13 | Accept |     0.21233 |      37.435 |     0.21138 |     0.21151 |         none |        false |   4.7078e-08 | [292   2]             |
|   14 | Accept |     0.21488 |       12.59 |     0.21138 |     0.21156 |         none |        false |   6.6064e-08 | [  7   1 227]         |
|   15 | Accept |     0.30642 |      138.77 |     0.21138 |     0.21148 |         relu |         true |   1.5819e-05 | [137 164 319  49]     |
|   16 | Accept |     0.74189 |     0.43973 |     0.21138 |     0.21149 |         relu |         true |      0.54894 | [  1 392  16]         |
|   17 | Accept |     0.22123 |      112.55 |     0.21138 |     0.21153 |         relu |         true |   2.2254e-05 | [  2 385 175]         |
|   18 | Accept |     0.22028 |      111.52 |     0.21138 |     0.21149 |         none |        false |   1.5532e-07 | [ 69  72 218 288]     |
|   19 | Accept |     0.21933 |      74.082 |     0.21138 |     0.21147 |         none |        false |   3.8718e-09 | [ 23 172 251]         |
|   20 | Accept |     0.21964 |       198.9 |     0.21138 |     0.21121 |         none |        false |   2.9122e-06 | [ 61 351 305]         |
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|   21 | Accept |     0.21837 |      49.152 |     0.21138 |     0.21121 |         none |        false |   8.3868e-05 | [379   2  21  17]     |
|   22 | Accept |     0.21774 |       11.13 |     0.21138 |     0.21514 |         none |        false |   3.7014e-05 | [  1 103]             |
|   23 | Accept |     0.21583 |      30.655 |     0.21138 |     0.21511 |         none |        false |    0.0013675 | [245  11  82 111  25] |
|   24 | Accept |     0.22187 |      47.861 |     0.21138 |      0.2151 |         none |        false |   0.00035852 | [143   7   2   6 399] |
|   25 | Accept |      0.2206 |      7.3635 |     0.21138 |     0.21151 |         none |        false |   1.3924e-08 |  4                    |
|   26 | Accept |     0.22028 |      72.206 |     0.21138 |     0.21133 |         none |        false |   0.00029756 | [ 36 322  65  57   5] |
|   27 | Accept |     0.22028 |      24.303 |     0.21138 |     0.21149 |         none |         true |   3.5432e-09 | [186   7  99]         |
|   28 | Accept |     0.28258 |      287.57 |     0.21138 |     0.21641 |         relu |         true |   0.00015562 | [127 381 376]         |
|   29 | Accept |     0.21964 |      29.214 |     0.21138 |     0.21644 |         none |         true |   1.1567e-07 | [ 24 130 100]         |
|   30 | Accept |     0.21615 |      38.832 |     0.21138 |     0.21645 |         none |         true |   1.3591e-05 | [ 27   2 300]         |
|   31 | Accept |     0.25429 |      8.9728 |     0.21138 |     0.21011 |         none |         true |    0.0011686 | [ 38  21 182  15   1] |
|   32 | Accept |     0.74189 |     0.31341 |     0.21138 |     0.21137 |         none |         true |      0.21395 | [  2  90   1   9  98] |
|   33 | Accept |     0.21392 |      9.1485 |     0.21138 |     0.20991 |         none |         true |   0.00013584 | [  1   8   2  42]     |
|   34 | Accept |     0.21488 |      2.4616 |     0.21138 |     0.20915 |         none |         true |    1.429e-08 | [  1   9   2   3]     |
|   35 | Accept |     0.21488 |      24.297 |     0.21138 |     0.20837 |         none |         true |    1.343e-06 | [  1 267]             |
|   36 | Accept |     0.32168 |      26.448 |     0.21138 |     0.20862 |         relu |        false |   3.5696e-07 | [  1   2  51   9  75] |
|   37 | Accept |     0.29943 |      2.9924 |     0.21138 |     0.20852 |         relu |        false |   0.00015229 |  1                    |
|   38 | Accept |     0.74189 |     0.94839 |     0.21138 |     0.20881 |         relu |        false |     0.063654 | [236 110   6]         |
|   39 | Accept |     0.28671 |      52.298 |     0.21138 |     0.20818 |         relu |        false |   8.8086e-06 | [319  13]             |
|   40 | Accept |      0.2438 |      29.767 |     0.21138 |     0.20839 |      sigmoid |        false |   4.5197e-09 | [ 70  10   7]         |
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|   41 | Accept |     0.24189 |      64.101 |     0.21138 |     0.20807 |      sigmoid |        false |   2.9475e-07 | [ 57  19 163   6]     |
|   42 | Accept |     0.22282 |      40.946 |     0.21138 |      0.2078 |      sigmoid |        false |   5.2093e-05 | [  1 233]             |
|   43 | Accept |     0.74189 |      1.8331 |     0.21138 |     0.20938 |      sigmoid |        false |    0.0038636 | [337  39   1]         |
|   44 | Accept |     0.22155 |      17.147 |     0.21138 |      0.2091 |      sigmoid |        false |   7.0303e-06 | [  1  11  34   2]     |
|   45 | Accept |     0.21901 |      10.607 |     0.21138 |     0.20932 |         tanh |        false |   7.6416e-08 | [  3   4]             |
|   46 | Accept |     0.21933 |      33.754 |     0.21138 |     0.20899 |         tanh |        false |   2.9788e-06 | [  2   2  67  22]     |
|   47 | Accept |     0.22123 |      91.481 |     0.21138 |     0.20872 |         tanh |        false |   0.00030544 | [368  54]             |
|   48 | Accept |     0.74189 |     0.45871 |     0.21138 |     0.20997 |         tanh |        false |     0.024399 | [  1  60  26]         |
|   49 | Accept |     0.24348 |      153.78 |     0.21138 |     0.21154 |         tanh |        false |      4.2e-05 | [336 169   2   9   2] |
|   50 | Accept |     0.27781 |      151.87 |     0.21138 |     0.21008 |         tanh |        false |   4.7612e-07 | [346 204  20]         |
|   51 | Accept |     0.21488 |      55.554 |     0.21138 |     0.20963 |         tanh |        false |   3.4829e-09 | [  1 232]             |
|   52 | Accept |     0.21488 |      156.21 |     0.21138 |     0.20988 |         tanh |         true |   2.4638e-08 | [  1   7  68 139 362] |
|   53 | Accept |     0.25842 |      54.398 |     0.21138 |     0.20963 |         tanh |         true |    8.926e-07 | [ 11   5 209]         |
|   54 | Accept |     0.26891 |      66.331 |     0.21138 |      0.2093 |         tanh |         true |   3.4368e-09 | [247   4   5  17]     |
|   55 | Accept |     0.21488 |      151.58 |     0.21138 |     0.20932 |         tanh |         true |    0.0005921 | [  1  76 177 312]     |
|   56 | Accept |     0.51335 |      11.191 |     0.21138 |     0.20974 |         tanh |         true |     0.025861 | [398  25]             |
|   57 | Accept |      0.2117 |      11.729 |     0.21138 |      0.2091 |         tanh |         true |   5.6188e-05 | [  2   1  11]         |
|   58 | Accept |     0.28481 |      63.324 |     0.21138 |     0.20906 |         relu |        false |   3.2827e-09 | [383  13  40]         |
|   59 | Accept |      0.2438 |      125.61 |     0.21138 |     0.20878 |         tanh |         true |    0.0001805 | [346  14 292   2]     |
|   60 | Accept |     0.21583 |      8.8331 |     0.21138 |      0.2083 |         tanh |        false |   1.4495e-08 |  1                    |
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|   61 | Accept |     0.21456 |      40.705 |     0.21138 |     0.20843 |         tanh |        false |   0.00012835 | [  1 135]             |
|   62 | Accept |     0.29085 |      105.56 |     0.21138 |     0.20768 |      sigmoid |        false |   1.7946e-05 | [330  94   1]         |
|   63 | Accept |     0.21424 |      78.388 |     0.21138 |     0.20729 |      sigmoid |        false |   4.1216e-08 | [  1  81   8 284]     |
|   64 | Accept |     0.21456 |      103.52 |     0.21138 |     0.20732 |         none |         true |   0.00016065 | [389   7 221   2 396] |
|   65 | Accept |     0.36332 |     0.83293 |     0.21138 |     0.21536 |         none |        false |    0.0099272 | [  1   9  29]         |
|   66 | Accept |     0.21678 |      64.484 |     0.21138 |      0.2131 |         none |         true |   4.2307e-05 | [154 221   4]         |
|   67 | Accept |     0.25556 |      97.467 |     0.21138 |     0.20741 |         tanh |         true |   7.0323e-08 | [  3  30 384   1]     |
|   68 | Accept |     0.22028 |      45.907 |     0.21138 |     0.20745 |         none |         true |   1.3544e-06 | [363  18]             |
|   69 | Accept |     0.21996 |      21.112 |     0.21138 |     0.20744 |         none |         true |   2.0831e-08 | [350  30]             |
|   70 | Accept |     0.21615 |      57.611 |     0.21138 |     0.20721 |         tanh |         true |    8.562e-06 | [  1  11 200   4  29] |
|   71 | Accept |     0.29784 |      65.684 |     0.21138 |     0.20755 |      sigmoid |         true |   3.1815e-09 |  342                  |
|   72 | Accept |     0.74189 |     0.14283 |     0.21138 |     0.20695 |         tanh |         true |       31.449 |  2                    |
|   73 | Accept |      0.2225 |      11.234 |     0.21138 |     0.21304 |         relu |         true |   3.2834e-09 | [  3   2]             |
|   74 | Accept |     0.31278 |      20.754 |     0.21138 |     0.20495 |         tanh |        false |    1.099e-08 | [ 30  41]             |
|   75 | Accept |     0.21392 |      20.019 |     0.21138 |     0.20461 |         tanh |        false |   3.5172e-07 | [  1  18   8  29]     |
|   76 | Accept |     0.21488 |      44.322 |     0.21138 |     0.21285 |         tanh |         true |    0.0001681 | [  1  64   1  83  21] |
|   77 | Accept |     0.30356 |      31.829 |     0.21138 |     0.20648 |         tanh |         true |   3.2255e-05 | [ 32  25  41  25]     |
|   78 | Accept |     0.21488 |      12.306 |     0.21138 |     0.20648 |         none |        false |   8.7968e-07 | [  1  15  45   8]     |
|   79 | Accept |     0.21265 |      14.523 |     0.21138 |     0.20629 |         tanh |         true |   3.1927e-09 | [  1  20  14]         |
|   80 | Accept |      0.2136 |      17.849 |     0.21138 |      0.2077 |         relu |         true |   0.00022487 | [  1   6   3  38  45] |
|============================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  Activations |  Standardize |       Lambda |            LayerSizes |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |                       |
|============================================================================================================================================|
|   81 | Accept |     0.25175 |      86.445 |     0.21138 |     0.20757 |      sigmoid |        false |   2.8027e-08 | [372  14   2]         |
|   82 | Accept |     0.21488 |      3.9545 |     0.21138 |     0.21286 |         none |         true |   3.2854e-09 | [  1   4  98]         |
|   83 | Accept |     0.21933 |      6.6782 |     0.21138 |       0.214 |         none |         true |   7.8092e-05 | [ 32  11]             |
|   84 | Accept |     0.21901 |       255.5 |     0.21138 |     0.21402 |         none |        false |   1.1069e-05 | [246 278 381   6   7] |
|   85 | Accept |     0.21869 |      46.923 |     0.21138 |     0.20835 |         none |         true |   2.5019e-07 | [380   7   5]         |
|   86 | Accept |     0.21424 |      7.6385 |     0.21138 |     0.20716 |         relu |         true |   2.3756e-06 |  1                    |
|   87 | Accept |     0.22155 |      11.623 |     0.21138 |     0.20866 |         tanh |         true |   0.00031371 | [  1  13]             |
|   88 | Accept |     0.74189 |      0.8902 |     0.21138 |     0.20838 |      sigmoid |        false |       30.269 | [  1 214  10 198]     |
|   89 | Accept |     0.28353 |      80.644 |     0.21138 |     0.20816 |      sigmoid |        false |   2.7729e-07 | [  1 239   1   7  88] |
|   90 | Accept |     0.21424 |      75.378 |     0.21138 |     0.20825 |      sigmoid |        false |   6.4753e-09 | [  1   5  40 311]     |
|   91 | Accept |     0.21615 |      52.965 |     0.21138 |     0.20845 |         tanh |        false |   1.1159e-07 | [  1  13 175]         |
|   92 | Accept |     0.21519 |      14.358 |     0.21138 |     0.20859 |         none |        false |   5.6623e-06 | [  1  31  27  24]     |
|   93 | Accept |     0.21297 |      17.457 |     0.21138 |     0.21432 |         tanh |         true |   7.9886e-09 | [  1   7  35]         |
|   94 | Accept |     0.21615 |      43.228 |     0.21138 |     0.20911 |         none |         true |   6.0944e-06 | [  3  61  11  90  83] |
|   95 | Accept |     0.25683 |       11.12 |     0.21138 |     0.20918 |         tanh |        false |   2.8053e-05 | [  1  10   1]         |
|   96 | Accept |     0.32676 |      53.385 |     0.21138 |     0.21405 |         relu |         true |   3.4352e-09 | [315   2   8]         |
|   97 | Accept |     0.21933 |       9.813 |     0.21138 |     0.20966 |         none |        false |   1.5781e-08 |  41                   |
|   98 | Accept |     0.34488 |      72.967 |     0.21138 |     0.20338 |         relu |         true |   3.2814e-09 | [  1  21   2  75 348] |
|   99 | Accept |     0.21583 |      227.25 |     0.21138 |     0.20342 |         none |         true |   1.3976e-08 | [  2 260 237 130 346] |
|  100 | Accept |      0.2136 |      94.144 |     0.21138 |     0.20316 |         tanh |        false |   3.7209e-07 | [  1  42   1   2 359] |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 100 reached.
Total function evaluations: 100
Total elapsed time: 5308.1522 seconds
Total objective function evaluation time: 5250.0671

Best observed feasible point:
    Activations    Standardize     Lambda        LayerSizes   
    ___________    ___________    _________    _______________

       relu           true        0.0002307    1    102    350

Observed objective function value = 0.21138
Estimated objective function value = 0.20316
Function evaluation time = 84.3573

Best estimated feasible point (according to models):
    Activations    Standardize     Lambda        LayerSizes   
    ___________    ___________    _________    _______________

       relu           true        0.0002307    1    102    350

Estimated objective function value = 0.20316
Estimated function evaluation time = 73.1472

Figure contains an axes object. The axes object with title Min objective vs. Number of function evaluations, xlabel Function evaluations, ylabel Min objective contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

Mdl = 
  ClassificationNeuralNetwork
                       PredictorNames: {'WC_TA'  'RE_TA'  'EBIT_TA'  'MVE_BVTD'  'S_TA'  'Industry'}
                         ResponseName: 'Rating'
                CategoricalPredictors: 6
                           ClassNames: [AAA    AA    A    BBB    BB    B    CCC]
                       ScoreTransform: 'none'
                      NumObservations: 3146
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]
                           LayerSizes: [1 102 350]
                          Activations: 'relu'
                OutputLayerActivation: 'softmax'
                               Solver: 'LBFGS'
                      ConvergenceInfo: [1×1 struct]
                      TrainingHistory: [1000×7 table]


  Properties, Methods

テスト データ セットで、モデルの分類精度を求めます。混同行列を使用して結果を可視化します。

testAccuracy = 1 - loss(Mdl,creditTest,"Rating", ...
    "LossFun","classiferror")
testAccuracy = 0.8015
confusionchart(creditTest.Rating,predict(Mdl,creditTest))

Figure contains an object of type ConfusionMatrixChart.

このモデルでは、真のクラスから 1 単位以内にすべての予測クラスが含まれています。つまり、すべての予測で格付けが 1 つしか離れていません。

入力引数

すべて折りたたむ

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

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

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

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

応答変数の名前。Tbl 内の変数の名前で指定します。

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

応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。

名前と値の引数 ClassNames を使用してクラスの順序を指定することをお勧めします。

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

モデルの学習に使用するクラス ラベル。数値ベクトル、categorical ベクトル、logical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列として指定します。

  • Y が文字配列である場合、クラス ラベルの各要素は配列の 1 つの行に対応しなければなりません。

  • Y の長さは Tbl または X の行数と等しくなければなりません。

  • 名前と値の引数 ClassNames を使用してクラスの順序を指定することをお勧めします。

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

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

既定では、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} 内の値)

  • 事前確率 (Prior の値) が 0 であるクラス ラベル

名前と値の引数

すべて展開する

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

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

ニューラル ネットワークのオプション

すべて展開する

ニューラル ネットワーク モデルの全結合層のサイズ。次の値のいずれかとして指定します。

  • 正の整数のベクトル — LayerSizesi 番目の要素は、ニューラル ネットワーク モデルの i 番目の全結合層の出力数です。LayerSizes には最終全結合層のサイズは含まれません。詳細については、ニューラル ネットワークの構造を参照してください。

  • [] (R2025a 以降)Network 引数で指定されたニューラル ネットワーク アーキテクチャを使用します。

Network[] の場合、既定値は 10 です。そうでない場合、既定値は [] となります。Network 引数を使用してニューラル ネットワーク アーキテクチャを指定する場合、LayerSizes[] でなければなりません。

例: LayerSizes=[100 25 10]

ニューラル ネットワーク モデルの全結合層の活性化関数。次の値のいずれかとして指定します。

  • string スカラーまたは文字ベクトル — モデルの最終全結合層を除くそれぞれの全結合層に、指定した活性化関数を使用します。最終全結合層の活性化関数は常にソフトマックスです。詳細については、ニューラル ネットワークの構造を参照してください。

  • string 配列または文字ベクトルの cell 配列 — モデルの i 番目の全結合層に Activationsi 番目の要素を使用します。

  • "" (R2025a 以降)Network 引数で指定されたニューラル ネットワーク アーキテクチャを使用します。

次の値を 1 つ以上使用して活性化関数を指定します。

説明
"relu"

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

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

"tanh"

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

"sigmoid"

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

f(x)=11+ex

"none"

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

Network[] の場合、既定値は "relu" です。そうでない場合、既定値は [] となります。Network 引数を使用してニューラル ネットワーク アーキテクチャを指定する場合、Activations"" でなければなりません。

例: Activations="sigmoid"

例: Activations=["relu","tanh"]

全結合層の重みを初期化する関数。次の値のいずれかとして指定します。

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

  • "he" — He 初期化子[2]を使用して重みを初期化します。He 初期化子では、それぞれの層について、ゼロ平均で分散が 2/I の正規分布から標本を抽出します。I は層の入力サイズです。

  • "" (R2025a 以降)Network 引数の層で指定されている初期化子を使用して重みを初期化します。

Network[] の場合、既定値は "glorot" です。それ以外の場合、既定値は "" です。Network 引数を使用してニューラル ネットワーク アーキテクチャを指定した場合、LayerWeightsInitializer 引数の値を変更してはなりません。

例: LayerWeightsInitializer="he"

データ型: char | string

全結合層の初期バイアスのタイプ。次の値のいずれかとして指定します。

  • "zeros" — 0 のベクトルでバイアスを初期化します。

  • "ones" — 1 のベクトルでバイアスを初期化します。

  • "" (R2025a 以降)Network 引数の層で指定されている初期化子を使用してバイアスを初期化します。

Network[] の場合、既定値は "zeros" です。それ以外の場合、既定値は "" です。Network 引数を使用してニューラル ネットワーク アーキテクチャを指定した場合、LayerBiasesInitializer 引数の値を変更してはなりません。

例: LayerBiasesInitializer="ones"

データ型: char | string

R2025a 以降

カスタムのニューラル ネットワーク アーキテクチャ。次の値のいずれかとして指定します。

  • [] — ニューラル ネットワーク アーキテクチャと LayerSizesActivationsLayerWeightsInitializer、および LayerBiasesInitializer の引数で定義される層の構成を使用します。

  • 層配列 (Deep Learning Toolbox™ が必要) — 層配列で指定されたニューラル ネットワーク アーキテクチャを使用します。利用可能な層の一覧については、深層学習層の一覧 (Deep Learning Toolbox)を参照してください。

  • dlnetwork オブジェクト (Deep Learning Toolbox が必要) — dlnetwork (Deep Learning Toolbox) オブジェクトで指定されたニューラル ネットワーク アーキテクチャを使用します。

層配列と dlnetwork の入力の場合、ネットワークの入力として、入力データの予測子の数と一致する入力サイズをもつ単一の特徴入力層が必要です。ネットワークの出力サイズは応答の数と一致しなければなりません。LayerSizesActivationsLayerWeightsInitializer、および LayerBiasesInitializer の各引数は変更しないでください。

この引数はカテゴリカル予測子をもつ入力データをサポートしていません。

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

メモ

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

例: ObservationsIn="columns"

データ型: char | string

正則化項の強度。非負のスカラーを指定します。最小化のための目的関数は、クロスエントロピー損失関数とリッジ (L2) ペナルティ項から作成されます。

例: Lambda=1e-4

データ型: single | double

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

例: Standardize=true

データ型: single | double | logical

収束制御オプション

すべて展開する

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

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

既定では、StoreHistorytrue に設定され、診断情報が fitcnetMdl 内に格納されます。診断情報にアクセスするには 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

初期ステップ サイズ。正のスカラーまたは "auto" として指定します。既定では、fitcnet は、モデルの学習に使用されるヘッシアンの初期近似の決定に初期ステップ サイズを使用しません (学習ソルバーを参照)。ただし、初期ステップ サイズ s0 を指定すると、逆ヘッシアンの初期近似は s00I になります。0 は初期勾配ベクトル、I は単位行列です。

fitcnet で自動的に初期ステップ サイズを決定するには、値を "auto" として指定します。この場合、関数で s0=0.5η0+0.1 を使用して初期ステップ サイズが自動的に決定されます。s0 は初期ステップ ベクトル、η0 は制約がない初期の重みとバイアスのベクトルです。

例: InitialStepSize="auto"

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

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

学習ルーチンが正常に収束したかどうかに関係なく、学習済みのモデルが返されます。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 と同じ方向で格納されている mp 列または pm 列の行列でなければなりません。学習データ X の予測子変数と ValidationData{1} の予測子変数は対応していなければなりません。同様に、予測子データの予測子 table Tbl を使用する場合、ValidationData{1} は、Tbl に含まれるものと同じ予測子変数を格納していなければなりません。ValidationData{1} と予測子データの観測値の数が同じである必要はありません。

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

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

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

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

メモ

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

例: ValidationFrequency=5

データ型: single | double

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

例: ValidationPatience=10

データ型: single | double

その他の分類オプション

すべて展開する

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

説明
正の整数のベクトル

ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。

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

logical ベクトル

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

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

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

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

例: CategoricalPredictors="all"

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

学習に使用するクラスの名前。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。ClassNames のデータ型は Tbl 内の応答変数または Y と同じでなければなりません。

ClassNames が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

ClassNames の使用目的は次のとおりです。

  • 学習時のクラスの順序を指定する。

  • クラスの順序に対応する入力または出力引数の次元の順序を指定する。たとえば、Cost の次元の順序や predict によって返される分類スコアの列の順序を指定するために ClassNames を使用します。

  • 学習用にクラスのサブセットを選択する。たとえば、Y に含まれているすべての異なるクラス名の集合が ["a","b","c"] であるとします。クラス "a" および "c" のみの観測値を使用してモデルに学習をさせるには、ClassNames=["a","c"] を指定します。

ClassNames の既定値は、Tbl 内の応答変数または Y に含まれているすべての異なるクラス名の集合です。

例: ClassNames=["b","g"]

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

R2023a 以降

誤分類のコスト。正方行列または構造体配列を指定します。

  • 正方行列 Cost を指定した場合、Cost(i,j) は真のクラスが i である点をクラス j に分類するコストです。つまり、行は真のクラスに、列は予測クラスに対応します。Cost の対応する行と列についてクラスの順序を指定するには、名前と値の引数 ClassNames も設定します。

  • 構造体 S を指定する場合、次の 2 つのフィールドが必要です。

    • S.ClassNames: Y と同じデータ型のクラス名を表す変数を含む。

    • S.ClassificationCosts。行と列の順序が S.ClassNames と同じコスト行列。

Cost の既定値は ones(K) – eye(K) です。K は異なるクラスの個数です。

例: Cost=[0 1; 2 0]

データ型: single | double | struct

予測子変数名。一意な名前の 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 を使用して学習に使用する予測子変数を選択できます。つまり、fitcnet は、学習中に PredictorNames の予測子変数と応答変数のみを使用します。

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

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

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

例: PredictorNames=["SepalLength","SepalWidth","PetalLength","PetalWidth"]

データ型: string | cell

R2023a 以降

事前クラス確率。次の表の値として指定します。

説明
"empirical"クラスの事前確率は、Y のクラスの相対的頻度です。
"uniform"クラスの事前確率はいずれも 1/K (K はクラス数) となります。
数値ベクトル各要素はクラスの事前確率です。Mdl.ClassNames に従って要素を並べ替えるか、名前と値の引数 ClassNames を使用して順序を指定します。要素は合計が 1 になるように正規化されます。
構造体

構造体 S には 2 つのフィールドがあります。

  • S.ClassNames: Y と同じ型の変数のクラス名が格納されます。

  • S.ClassProbs: 対応する事前確率のベクトルが格納されます。要素は合計が 1 になるように正規化されます。

Network 引数を使用してニューラル ネットワーク アーキテクチャを指定する場合、Prior"empirical" でなければなりません。

例: Prior=struct(ClassNames=["b","g"],ClassProbs=1:2)

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

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

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

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

例: ResponseName="response"

データ型: char | string

スコア変換。文字ベクトル、string スカラー、または関数ハンドルとして指定します。

次の表は、使用可能な文字ベクトルおよび string スカラーをまとめています。

説明
"doublelogit"1/(1 + e–2x)
"invlogit"log(x / (1 – x))
"ismax"最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する
"logit"1/(1 + ex)
"none" または "identity"x (変換なし)
"sign"x < 0 のとき –1
x = 0 のとき 0
x > 0 のとき 1
"symmetric"2x – 1
"symmetricismax"最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する
"symmetriclogit"2/(1 + ex) – 1

MATLAB 関数またはユーザー定義関数の場合は、スコア変換用の関数ハンドルを使用します。関数ハンドルは、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。

例: ScoreTransform="logit"

データ型: char | string | function_handle

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

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

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

Inf の重みはサポートされません。Network 引数を使用してニューラル ネットワーク アーキテクチャを指定する場合、Weights は 1 のベクトルでなければなりません。

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

メモ

交差検証の名前と値の引数は、名前と値の引数 OptimizeHyperparameters と一緒には使用できません。OptimizeHyperparameters の場合の交差検証は、名前と値の引数 HyperparameterOptimizationOptions を使用することのみによって変更できます。

交差検証オプション

すべて展開する

交差検証分類器に学習させるためのフラグ。"on" または "off" として指定します。

"on" を指定すると、10 の分割を使用して交差検証分類器の学習が実行されます。

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

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

例: Crossval="on"

データ型: char | string

交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する 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"

データ型: char | string

ハイパーパラメーター最適化オプション

すべて展開する

最適化するパラメーター。次のいずれかを指定します。

  • "none" — 最適化を行いません。

  • "auto"["Activations","Lambda","LayerSizes","Standardize"] を使用します。

  • "all" — すべての使用可能パラメーターを最適化します。

  • 使用可能パラメーター名の string 配列または cell 配列。

  • optimizableVariable オブジェクトのベクトル。通常は hyperparameters の出力です。

最適化では、パラメーターを変化させることにより、fitcnet の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値の引数 HyperparameterOptimizationOptions を使用します。HyperparameterOptimizationOptions を使用すると、ConstraintType オプションと ConstraintBounds オプションを設定することにより、交差検証損失の代わりに (コンパクトな) モデル サイズを最適化の目的として使用できます。

メモ

OptimizeHyperparameters の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、OptimizeHyperparameters"auto" に設定すると、fitcnet"auto" オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。

モデルのハイパーパラメーターを最適化するには、Network 引数は [] でなければなりません。fitcnet では、以下のパラメーターを使用できます。

  • Activationsfitcnet は集合 ["relu","tanh","sigmoid","none"] に対して Activations を最適化します。

  • Lambdafitcnet は範囲 [1e-5,1e5]/NumObservations の連続値に対して Lambda を最適化します。値は対数変換された範囲内で一様に選択されます。

  • LayerBiasesInitializerfitcnet は 2 つの値 ["zeros","ones"] に対して LayerBiasesInitializer を最適化します。

  • LayerWeightsInitializerfitcnet は 2 つの値 ["glorot","he"] に対して LayerWeightsInitializer を最適化します。

  • LayerSizesfitcnet は、3 つの値 12、および 3 に対して、最終全結合層を除く全結合層を最適化します。fitcnet は、対数スケールで標本抽出された 1300 の層のサイズに対して、各全結合層を個別に最適化します。

    メモ

    LayerSizes 引数を使用する場合、反復表示には関連する各層のサイズが表示されます。たとえば、全結合層の現在の数が 3 で、この 3 つの層のサイズがそれぞれ 107944 である場合、反復表示にはこの反復の LayerSizes[10 79 44] として表示されます。

    メモ

    5 つの全結合層、または層の異なる範囲のサイズにアクセスするには、hyperparameters を使用して最適化可能なパラメーターおよび範囲を選択します。

  • Standardizefitcnet は 2 つの値 [true,false] に対して Standardize を最適化します。

既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable オブジェクトのベクトルを渡します。例として、次のコードは NumLayers の範囲を [1 5] に設定し、Layer_4_Size および Layer_5_Size を最適化します。

load fisheriris
params = hyperparameters("fitcnet",meas,species);
params(1).Range = [1 5];
params(10).Optimize = true;
params(11).Optimize = true;

OptimizeHyperparameters の値として params を渡します。既定以外のパラメーターを使用した例については、ニューラル ネットワーク分類器の最適化のカスタマイズを参照してください。

既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は誤分類率です。反復表示を制御するには、名前と値の引数 HyperparameterOptimizationOptionsVerbose オプションを設定します。プロットを制御するには、名前と値の引数 HyperparameterOptimizationOptionsShowPlots フィールドを設定します。

例については、OptimizeHyperparameters を使用したニューラル ネットワーク分類器の改善を参照してください。

例: OptimizeHyperparameters="auto"

最適化のオプション。HyperparameterOptimizationOptions オブジェクトまたは構造体として指定します。この引数を指定すると、名前と値の引数 OptimizeHyperparameters の効果が変化します。HyperparameterOptimizationOptions を指定する場合、OptimizeHyperparameters も指定しなければなりません。オプションはいずれも任意です。ただし、AggregateOptimizationResults を返すには ConstraintBoundsConstraintType を設定しなければなりません。構造体で設定できるオプションは HyperparameterOptimizationOptions オブジェクトと同じです。

オプション既定の設定
Optimizer
  • "bayesopt" — ベイズ最適化を使用。内部的には bayesopt が呼び出されます。

  • "gridsearch" — 次元ごとに NumGridDivisions の値があるグリッド探索を使用。"gridsearch" では、グリッドからの一様な非復元抽出により、無作為な順序で探索します。最適化後、sortrows(Mdl.HyperparameterOptimizationResults) コマンドを使用してグリッド順の table を取得できます。

  • "randomsearch"MaxObjectiveEvaluations 個の点で無作為に探索。

"bayesopt"
ConstraintBounds

N 個の最適化問題の制約範囲。N 行 2 列の数値行列または [] として指定します。ConstraintBounds の列には最適化問題の下限と上限の値が含まれます。ConstraintBounds を数値ベクトルとして指定すると、ConstraintBounds の 2 列目に値が代入され、1 列目にはゼロが代入されます。ConstraintBounds を指定する場合、ConstraintType も指定しなければなりません。

[]
ConstraintTarget

最適化問題の制約ターゲット。"matlab" または "coder" として指定します。ConstraintBoundsConstraintType[] の場合に ConstraintTarget を設定すると、ConstraintTarget[] に設定されます。ConstraintTargetConstraintType の値により、目的関数と制約関数が決まります。詳細については、HyperparameterOptimizationOptions を参照してください。

ConstraintBoundsConstraintType を指定する場合の既定値は "matlab" です。そうでない場合、既定値は [] となります。
ConstraintType

最適化問題の制約タイプ。"size" または "loss" として指定します。ConstraintType を指定する場合、ConstraintBounds も指定しなければなりません。ConstraintTargetConstraintType の値により、目的関数と制約関数が決まります。詳細については、HyperparameterOptimizationOptions を参照してください。

[]
AcquisitionFunctionName

獲得関数のタイプ:

  • "expected-improvement-per-second-plus"

  • "expected-improvement"

  • "expected-improvement-plus"

  • "expected-improvement-per-second"

  • "lower-confidence-bound"

  • "probability-of-improvement"

目的関数の実行時に最適化が決まるので、名前に per-second が含まれている獲得関数は、再現性がある結果を生成しません。名前に plus が含まれている獲得関数は、領域を過剰利用している場合に動作を変更します。詳細は、獲得関数のタイプを参照してください。

"expected-improvement-per-second-plus"
MaxObjectiveEvaluations目的関数評価の最大数。ConstraintBounds を使用して最適化問題を複数指定する場合、MaxObjectiveEvaluations の値は各最適化問題に個別に適用されます。"bayesopt" および "randomsearch" の場合は 30"gridsearch" の場合はグリッド全体
MaxTime

最適化の制限時間。非負の実数スカラーとして指定します。制限時間の単位は、tictoc によって測定される秒です。MaxTime の値にかかわらず、少なくとも 1 回は最適化反復が実行されます。MaxTime は関数評価を中断させないため、実行時間が MaxTime を超える可能性があります。ConstraintBounds を使用して最適化問題を複数指定する場合、制限時間は各最適化問題に個別に適用されます。

Inf
NumGridDivisionsOptimizer="gridsearch" における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このオプションは無視されます。10
ShowPlots最適化の進行状況のプロットを表示するかどうかを示す logical 値。このオプションが true の場合、最適な観測された目的関数値が反復回数に対してプロットされます。ベイズ最適化を使用する場合 (Optimizer="bayesopt")、最適な推定された目的関数値もプロットされます。最適な観測された目的関数値および最適な推定された目的関数値は、反復表示の BestSoFar (observed) 列および BestSoFar (estim.) 列の値にそれぞれ対応しています。これらの値は、Mdl.HyperparameterOptimizationResults のプロパティ ObjectiveMinimumTrace および EstimatedObjectiveMinimumTrace で確認できます。問題にベイズ最適化の最適化パラメーターが 1 つまたは 2 つある場合、ShowPlots はパラメーターに対する目的関数のモデルもプロットします。true
SaveIntermediateResults最適化の結果を保存するかどうかを示す logical 値。このオプションが true の場合、"BayesoptResults" という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。ConstraintBounds を使用して最適化問題を複数指定する場合、ワークスペース変数は "AggregateBayesoptResults" という名前の AggregateBayesianOptimization オブジェクトになります。false
Verbose

コマンド ラインにおける表示レベル:

  • 0 — 反復表示なし

  • 1 — 反復表示あり

  • 2 — 反復表示と追加情報

詳細については、bayesopt の名前と値の引数 Verbose およびベイズ最適化の使用による分類器の当てはめの最適化の例を参照してください。

1
UseParallelベイズ最適化を並列実行するかどうかを示す logical 値。並列実行には Parallel Computing Toolbox™ が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。false
Repartition

反復ごとに交差検証を再分割するかどうかを示す論理値。このオプションが false の場合、オプティマイザーは単一の分割を最適化に使用します。

分割ノイズが考慮されるので、通常は値を true にすると最も確実な結果が得られます。ただし、true で最適な結果を得るには、2 倍以上の関数評価が必要になります。

false
次の 3 つのオプションのいずれか 1 つのみを指定してください。
CVPartitioncvpartition によって作成された cvpartition オブジェクト交差検証オプションが指定されていない場合は KFold=5
Holdoutホールドアウトの比率を表す範囲 (0,1) のスカラー
KFold1 より大きい整数

例: HyperparameterOptimizationOptions=struct(UseParallel=true)

出力引数

すべて折りたたむ

学習させたニューラル ネットワーク分類器。ClassificationNeuralNetwork モデル オブジェクトまたは ClassificationPartitionedModel モデル オブジェクトとして返されます。

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

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

OptimizeHyperparameters を指定して HyperparameterOptimizationOptionsConstraintType オプションと ConstraintBounds オプションを設定している場合、Mdl はモデル オブジェクトの N 行 1 列の cell 配列になります。ここで、NConstraintBounds の行数と等しくなります。いずれの最適化問題からも実行可能なモデルが得られない場合、cell 配列の各値が [] になります。

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

複数の最適化問題についての最適化の結果の集計。AggregateBayesianOptimization オブジェクトとして返されます。AggregateOptimizationResults を返すには、OptimizeHyperparametersHyperparameterOptimizationOptions を指定しなければなりません。HyperparameterOptimizationOptionsConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この出力の生成方法を示す例については、Hyperparameter Optimization with Multiple Constraint Boundsを参照してください。

詳細

すべて折りたたむ

ヒント

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

  • モデルに学習をさせた後で、新しいデータについてラベルを予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。

アルゴリズム

すべて折りたたむ

参照

[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 で導入

すべて展開する