fitcnet
構文
説明
fitcnet
は、全結合のフィードフォワード ニューラル ネットワークなど、分類用のニューラル ネットワークの学習に使用します。全結合のフィードフォワード ネットワークでは、最初の全結合層にネットワーク入力 (予測子データ) からの結合があり、後続の各層に前の層からの結合があります。各全結合層では、入力に重み行列が乗算されてからバイアス ベクトルが加算されます。各全結合層の後には活性化関数が続きます。最終全結合層とそれに続くソフトマックス活性化関数によってネットワークの出力、つまり分類スコア (事後確率) および予測ラベルが生成されます。詳細については、ニューラル ネットワークの構造を参照してください。
は、table Mdl
= fitcnet(Tbl
,ResponseVarName
)Tbl
内の予測子と table 変数 ResponseVarName
内のクラス ラベルを使用して学習させたニューラル ネットワーク分類モデル Mdl
を返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、名前と値の引数 Mdl
= fitcnet(___,Name=Value
)LayerSizes
や Activations
を指定して、全結合層の出力の数や活性化関数を調整できます。
[
は、名前と値の引数 Mdl
,AggregateOptimizationResults
] = fitcnet(___)OptimizeHyperparameters
と HyperparameterOptimizationOptions
が指定されている場合に、ハイパーパラメーターの最適化の結果が格納された AggregateOptimizationResults
も返します。HyperparameterOptimizationOptions
の ConstraintType
オプションと 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 から削除し、変数 Industry
を categorical
変数に変換します。
creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);
応答変数 Rating
を categorical
変数に変換します。
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))
ニューラル ネットワークの全結合層を構成します。
レーダー信号のデータを含む 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
Mdl
の LayerWeights
プロパティと 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)
ニューラル ネットワーク分類器に学習させます。
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
はオブジェクト Mdl
の TrainingHistory
プロパティに損失の情報を格納します。この情報にドット表記を使用してアクセスできます。
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")
検証損失が最小になる対応する反復を確認します。最終的に返されるモデル 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 から削除し、変数 Industry
を categorical
変数に変換します。
creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);
応答変数 Rating
を categorical
変数に変換します。
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")
[~,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 から削除し、変数 Industry
を categorical
変数に変換します。
creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);
応答変数 Rating
を categorical
変数に変換します。
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
は、既定の設定ではベイズ最適化を実行します。グリッド探索またはランダム探索を使用するために、HyperparameterOptimizationOptions
の Optimizer
フィールドを設定します。
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
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))
このモデルでは、真のクラスから 1 単位以内にすべての予測クラスが含まれています。つまり、すべての予測で格付けが 1 つしか離れていません。
OptimizeHyperparameters
引数を使用してニューラル ネットワーク分類器に学習させ、結果の分類器の精度を改善します。関数 hyperparameters
を使用して、使用する層数および層のサイズの範囲に既定より大きい値を指定します。
標本ファイル CreditRating_Historical.dat
を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。
creditrating = readtable("CreditRating_Historical.dat");
変数 ID
の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID))
は creditrating
に含まれる観測値の数に等しい)、変数 ID
は予測子としては適切ではありません。変数 ID
を table から削除し、変数 Industry
を categorical
変数に変換します。
creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);
応答変数 Rating
を categorical
変数に変換します。
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
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))
このモデルでは、真のクラスから 1 単位以内にすべての予測クラスが含まれています。つまり、すべての予測で格付けが 1 つしか離れていません。
入力引数
モデルを学習させるために使用する標本データ。table として指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl
に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Tbl
に応答変数が含まれている場合にTbl
内の他の変数をすべて予測子として使用するには、ResponseVarName
を使用して応答変数を指定します。Tbl
に応答変数が含まれている場合にTbl
内の他の変数の一部のみを予測子として使用するには、formula
を使用して式を指定します。Tbl
に応答変数が含まれていない場合は、Y
を使用して応答変数を指定します。応答変数の長さとTbl
の行数は等しくなければなりません。
応答変数の名前。Tbl
内の変数の名前で指定します。
ResponseVarName
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 Y
が Tbl.Y
として格納されている場合、"Y"
として指定します。それ以外の場合、モデルを学習させるときに、Tbl
の列は Y
を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y
が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。
名前と値の引数 ClassNames
を使用してクラスの順序を指定することをお勧めします。
データ型: char
| string
応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3"
という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Y
は応答変数を、x1
、x2
および x3
は予測子変数を表します。
モデルに学習をさせるための予測子として Tbl
内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula
に現れない Tbl
内の変数は使用されません。
式の変数名は Tbl
の変数名 (Tbl.Properties.VariableNames
) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname
を使用して Tbl
の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName
を使用してそれらを変換できます。
データ型: char
| string
モデルの学習に使用するクラス ラベル。数値ベクトル、categorical ベクトル、logical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列として指定します。
Y
が文字配列である場合、クラス ラベルの各要素は配列の 1 つの行に対応しなければなりません。名前と値の引数
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 番目の層では双曲線正接活性化関数を使用します。
ニューラル ネットワークのオプション
ニューラル ネットワーク モデルの全結合層のサイズ。次の値のいずれかとして指定します。
正の整数のベクトル —
LayerSizes
の i 番目の要素は、ニューラル ネットワーク モデルの i 番目の全結合層の出力数です。LayerSizes
には最終全結合層のサイズは含まれません。詳細については、ニューラル ネットワークの構造を参照してください。[]
(R2025a 以降) —Network
引数で指定されたニューラル ネットワーク アーキテクチャを使用します。
Network
が []
の場合、既定値は 10
です。そうでない場合、既定値は []
となります。Network
引数を使用してニューラル ネットワーク アーキテクチャを指定する場合、LayerSizes
は []
でなければなりません。
例: LayerSizes=[100 25 10]
ニューラル ネットワーク モデルの全結合層の活性化関数。次の値のいずれかとして指定します。
string スカラーまたは文字ベクトル — モデルの最終全結合層を除くそれぞれの全結合層に、指定した活性化関数を使用します。最終全結合層の活性化関数は常にソフトマックスです。詳細については、ニューラル ネットワークの構造を参照してください。
string 配列または文字ベクトルの cell 配列 — モデルの i 番目の全結合層に
Activations
の i 番目の要素を使用します。""
(R2025a 以降) —Network
引数で指定されたニューラル ネットワーク アーキテクチャを使用します。
次の値を 1 つ以上使用して活性化関数を指定します。
値 | 説明 |
---|---|
"relu" | 正規化線形ユニット (ReLU) 関数 — 各入力要素に対して、0 より小さい値については 0 に設定するという次のしきい値演算を実行します。 |
"tanh" | 双曲線正接 (tanh) 関数 — 各入力要素に関数 |
"sigmoid" | シグモイド関数 — 各入力要素に対して次の演算を実行します。 |
"none" | 恒等関数 — 変換を実行せずに、各入力要素を次のようにそのまま返します。f(x) = x |
Network
が []
の場合、既定値は "relu"
です。そうでない場合、既定値は []
となります。Network
引数を使用してニューラル ネットワーク アーキテクチャを指定する場合、Activations
は ""
でなければなりません。
例: Activations="sigmoid"
例: Activations=["relu","tanh"]
全結合層の重みを初期化する関数。次の値のいずれかとして指定します。
Network
が []
の場合、既定値は "glorot"
です。それ以外の場合、既定値は ""
です。Network
引数を使用してニューラル ネットワーク アーキテクチャを指定した場合、LayerWeightsInitializer
引数の値を変更してはなりません。
例: LayerWeightsInitializer="he"
データ型: char
| string
全結合層の初期バイアスのタイプ。次の値のいずれかとして指定します。
"zeros"
— 0 のベクトルでバイアスを初期化します。"ones"
— 1 のベクトルでバイアスを初期化します。""
(R2025a 以降) —Network
引数の層で指定されている初期化子を使用してバイアスを初期化します。
Network
が []
の場合、既定値は "zeros"
です。それ以外の場合、既定値は ""
です。Network
引数を使用してニューラル ネットワーク アーキテクチャを指定した場合、LayerBiasesInitializer
引数の値を変更してはなりません。
例: LayerBiasesInitializer="ones"
データ型: char
| string
R2025a 以降
カスタムのニューラル ネットワーク アーキテクチャ。次の値のいずれかとして指定します。
[]
— ニューラル ネットワーク アーキテクチャとLayerSizes
、Activations
、LayerWeightsInitializer
、およびLayerBiasesInitializer
の引数で定義される層の構成を使用します。層配列 (Deep Learning Toolbox™ が必要) — 層配列で指定されたニューラル ネットワーク アーキテクチャを使用します。利用可能な層の一覧については、深層学習層の一覧 (Deep Learning Toolbox)を参照してください。
dlnetwork
オブジェクト (Deep Learning Toolbox が必要) —dlnetwork
(Deep Learning Toolbox) オブジェクトで指定されたニューラル ネットワーク アーキテクチャを使用します。
層配列と dlnetwork
の入力の場合、ネットワークの入力として、入力データの予測子の数と一致する入力サイズをもつ単一の特徴入力層が必要です。ネットワークの出力サイズは応答の数と一致しなければなりません。LayerSizes
、Activations
、LayerWeightsInitializer
、および LayerBiasesInitializer
の各引数は変更しないでください。
この引数はカテゴリカル予測子をもつ入力データをサポートしていません。
予測子データにおける観測値の次元。"rows"
または "columns"
として指定します。
メモ
観測値が列に対応するように予測子行列を配置して ObservationsIn="columns"
を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して ObservationsIn="columns"
を指定することはできません。
例: ObservationsIn="columns"
データ型: char
| string
正則化項の強度。非負のスカラーを指定します。最小化のための目的関数は、クロスエントロピー損失関数とリッジ (L2) ペナルティ項から作成されます。
例: Lambda=1e-4
データ型: single
| double
予測子データを標準化するためのフラグ。数値または logical の 0
(false
) または 1
(true
) として指定します。Standardize
を true
に設定すると、各数値予測子変数が対応する列の平均値と標準偏差によってセンタリングおよびスケーリングされます。ソフトウェアは、カテゴリカル予測子を標準化しません。
例: Standardize=true
データ型: single
| double
| logical
収束制御オプション
詳細レベル。0
または 1
として指定します。名前と値の引数 Verbose
は、fitcnet
がコマンド ラインに表示する診断情報の量を制御します。
値 | 説明 |
---|---|
0 | fitcnet は診断情報を表示しません。 |
1 | fitcnet は診断情報を定期的に表示します。 |
既定では、StoreHistory
が true
に設定され、診断情報が fitcnet
で Mdl
内に格納されます。診断情報にアクセスするには Mdl.TrainingHistory
を使用します。
例: Verbose=1
データ型: single
| double
詳細出力の頻度 (コマンド ウィンドウに出力するまでの反復回数)。正の整数スカラーとして指定します。値 1 は、1 回の反復ごとに診断情報を出力することを示します。
メモ
この名前と値の引数を使用するには、Verbose
を 1
に設定します。
例: VerboseFrequency=5
データ型: single
| double
学習履歴を格納するためのフラグ。数値または logical の 0
(false
) または 1
(true
) として指定します。StoreHistory
を true
に設定すると、診断情報が Mdl
内に格納され、Mdl.TrainingHistory
を使用してアクセスできます。
例: StoreHistory=false
データ型: single
| double
| logical
初期ステップ サイズ。正のスカラーまたは "auto"
として指定します。既定では、fitcnet
は、モデルの学習に使用されるヘッシアンの初期近似の決定に初期ステップ サイズを使用しません (学習ソルバーを参照)。ただし、初期ステップ サイズ を指定すると、逆ヘッシアンの初期近似は になります。 は初期勾配ベクトル、 は単位行列です。
fitcnet
で自動的に初期ステップ サイズを決定するには、値を "auto"
として指定します。この場合、関数で を使用して初期ステップ サイズが自動的に決定されます。 は初期ステップ ベクトル、 は制約がない初期の重みとバイアスのベクトルです。
例: InitialStepSize="auto"
データ型: single
| double
| char
| string
学習の最大反復回数。正の整数スカラーとして指定します。
学習ルーチンが正常に収束したかどうかに関係なく、学習済みのモデルが返されます。Mdl.ConvergenceInfo
に収束情報が格納されます。
例: IterationLimit=1e8
データ型: single
| double
勾配の絶対許容誤差。非負のスカラーとして指定します。
学習の反復 t における損失関数を 、反復 t における重みとバイアスに関する損失関数の勾配を 、初期点における損失関数の勾配を とします。 () になると、学習プロセスが終了します。
例: GradientTolerance=1e-5
データ型: single
| double
損失の許容誤差。非負のスカラーとして指定します。
いずれかの反復において損失が LossTolerance
より小さくなると、学習プロセスが終了します。
例: LossTolerance=1e-8
データ型: single
| double
ステップ サイズの許容誤差。非負のスカラーとして指定します。
いずれかの反復においてステップ サイズが StepTolerance
より小さくなると、学習プロセスが終了します。
例: StepTolerance=1e-4
データ型: single
| double
学習の収束を検出するための検証データ。cell 配列または table として指定します。
学習プロセスにおいて、ValidationData
を使用して検証損失が定期的に推定されます。検証損失が連続して増加した回数が ValidationPatience
の回数を超えると、その時点で学習が終了します。
応答変数を含む予測子データの table Tbl
を使用する場合、ValidationData
を table として指定できます。この場合、ValidationData
は、Tbl
内に含まれるものと同じ予測子および応答を格納していなければなりません。ソフトウェアは、Tbl
が重さのベクトルを含む場合であっても、観測値に重みを適用することはありません。重みを指定するには、ValidationData
を cell 配列として指定しなければなりません。
ValidationData
を cell 配列として指定する場合、次の形式でなければなりません。
ValidationData{1}
は、予測子データと同じデータ型および方向でなければなりません。つまり、予測子行列X
を使用する場合、ValidationData{1}
は、予測子データがX
と同じ方向で格納されている m 行 p 列または p 行 m 列の行列でなければなりません。学習データX
の予測子変数とValidationData{1}
の予測子変数は対応していなければなりません。同様に、予測子データの予測子 tableTbl
を使用する場合、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 次元数値ベクトル、または観測値の重みを含む tableValidationData{1}
内の変数名として指定できます。検証データに関する重みは、合計が 1 になるように正規化されます。
ValidationData
を指定し、コマンド ラインで検証損失を表示するには、Verbose
を 1
に設定します。
検証の評価の間隔 (反復回数)。正の整数スカラーとして指定します。値 1 は、1 回の反復ごとに検証メトリクスを評価することを示します。
メモ
この名前と値の引数を使用するには、ValidationData
を指定しなければなりません。
例: ValidationFrequency=5
データ型: single
| double
検証の評価の停止条件。非負の整数スカラーとして指定します。検証損失が ValidationPatience
回連続でそれまでに計算された検証損失の最小値以上になると、その時点で学習プロセスが停止します。Mdl.TrainingHistory
をチェックすると、検証損失が連続で最小値以上になっている現在までの回数 (Validation Checks
) を確認できます。
例: ValidationPatience=10
データ型: single
| double
その他の分類オプション
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。説明は、予測子データの行に観測値、列に予測子があると仮定しています。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
logical ベクトル |
|
文字行列 | 行列の各行は予測子変数の名前です。名前は 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
の機能は、学習データの提供方法によって決まります。
X
とY
を指定した場合、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
の予測子変数と応答変数のみを使用します。PredictorNames
はTbl.Properties.VariableNames
のサブセットでなければならず、応答変数の名前を含めることはできません。既定では、すべての予測子変数の名前が
PredictorNames
に格納されます。PredictorNames
とformula
の両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。
例: PredictorNames=["SepalLength","SepalWidth","PetalLength","PetalWidth"]
データ型: string
| cell
R2023a 以降
事前クラス確率。次の表の値として指定します。
値 | 説明 |
---|---|
"empirical" | クラスの事前確率は、Y のクラスの相対的頻度です。 |
"uniform" | クラスの事前確率はいずれも 1/K (K はクラス数) となります。 |
数値ベクトル | 各要素はクラスの事前確率です。Mdl .ClassNames に従って要素を並べ替えるか、名前と値の引数 ClassNames を使用して順序を指定します。要素は合計が 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 + e–x) |
"none" または "identity" | x (変換なし) |
"sign" | x < 0 のとき –1 x = 0 のとき 0 x > 0 のとき 1 |
"symmetric" | 2x – 1 |
"symmetricismax" | 最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する |
"symmetriclogit" | 2/(1 + e–x) – 1 |
MATLAB 関数またはユーザー定義関数の場合は、スコア変換用の関数ハンドルを使用します。関数ハンドルは、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。
例: ScoreTransform="logit"
データ型: char
| string
| function_handle
観測値の重み。非負の数値ベクトルまたは Tbl
内の変数の名前を指定します。ソフトウェアは、X
または Tbl
の各観測値に、Weights
の対応する値で重みを付けます。Weights
の長さは、X
または Tbl
の観測値の数と等しくなければなりません。
入力データを table Tbl
として指定した場合、Weights
は数値ベクトルが含まれている Tbl
内の変数の名前にすることができます。この場合、Weights
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトル W
が Tbl.W
として格納されている場合、'W'
として指定します。それ以外の場合、モデルに学習をさせるときに、Tbl
の列は W
を含めてすべて予測子または応答変数として扱われます。
既定の設定では、Weights
は ones(n,1)
です。n
は X
または Tbl
の観測値数です。
Inf
の重みはサポートされません。Network
引数を使用してニューラル ネットワーク アーキテクチャを指定する場合、Weights
は 1 のベクトルでなければなりません。
データ型: single
| double
| char
| string
メモ
交差検証の名前と値の引数は、名前と値の引数 OptimizeHyperparameters
と一緒には使用できません。OptimizeHyperparameters
の場合の交差検証は、名前と値の引数 HyperparameterOptimizationOptions
を使用することのみによって変更できます。
交差検証オプション
交差検証分類器に学習させるためのフラグ。"on"
または "off"
として指定します。
"on"
を指定すると、10 の分割を使用して交差検証分類器の学習が実行されます。
名前と値の引数 CVPartition
、Holdout
、KFold
、または Leaveout
を使用すると、この交差検証の設定をオーバーライドできます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値の引数は、一度に 1 つだけです。
または、後で Mdl
を crossval
に渡して交差検証を実行します。
例: Crossval="on"
データ型: char
| string
交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する cvpartition
オブジェクトとして指定します。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: cvp = cvpartition(500,KFold=5)
を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、CVPartition=cvp
を設定して交差検証分割を指定できます。
ホールドアウト検証に使用するデータの比率。範囲 (0,1) のスカラー値として指定します。Holdout=p
を指定した場合、以下の手順が実行されます。
p*100
% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。コンパクトな学習済みモデルを交差検証済みモデルの
Trained
プロパティに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: Holdout=0.1
データ型: double
| single
交差検証済みモデルで使用する分割の数。1 より大きい正の整数値として指定します。KFold=k
を指定した場合、以下の手順が実行されます。
データを無作為に
k
個のセットに分割する。各セットについて、そのセットを検証データとして確保し、他の
k
– 1 個のセットを使用してモデルに学習をさせる。k
個のコンパクトな学習済みモデルを、交差検証済みモデルのTrained
プロパティに含まれているk
行 1 列の cell ベクトルに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: KFold=5
データ型: single
| double
Leave-one-out 法の交差検証のフラグ。"on"
または "off"
として指定します。Leaveout="on"
を指定した場合、n 個の観測値 (n は、モデルの NumObservations
プロパティで指定される、欠損観測値を除外した観測値の個数) のそれぞれについて以下の手順が実行されます。
いずれかの観測値を検証データとして確保し、他の n - 1 個の観測値を使用してモデルに学習をさせる。
n 個のコンパクトな学習済みモデルを、交差検証済みモデルの
Trained
プロパティに含まれている n 行 1 列の cell ベクトルに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 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
では、以下のパラメーターを使用できます。
Activations
—fitcnet
は集合["relu","tanh","sigmoid","none"]
に対してActivations
を最適化します。Lambda
—fitcnet
は範囲[1e-5,1e5]/NumObservations
の連続値に対してLambda
を最適化します。値は対数変換された範囲内で一様に選択されます。LayerBiasesInitializer
—fitcnet
は 2 つの値["zeros","ones"]
に対してLayerBiasesInitializer
を最適化します。LayerWeightsInitializer
—fitcnet
は 2 つの値["glorot","he"]
に対してLayerWeightsInitializer
を最適化します。LayerSizes
—fitcnet
は、3 つの値1
、2
、および3
に対して、最終全結合層を除く全結合層を最適化します。fitcnet
は、対数スケールで標本抽出された1
~300
の層のサイズに対して、各全結合層を個別に最適化します。メモ
LayerSizes
引数を使用する場合、反復表示には関連する各層のサイズが表示されます。たとえば、全結合層の現在の数が3
で、この 3 つの層のサイズがそれぞれ10
、79
、44
である場合、反復表示にはこの反復のLayerSizes
が[10 79 44]
として表示されます。メモ
5 つの全結合層、または層の異なる範囲のサイズにアクセスするには、
hyperparameters
を使用して最適化可能なパラメーターおよび範囲を選択します。Standardize
—fitcnet
は 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
を渡します。既定以外のパラメーターを使用した例については、ニューラル ネットワーク分類器の最適化のカスタマイズを参照してください。
既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は誤分類率です。反復表示を制御するには、名前と値の引数 HyperparameterOptimizationOptions
の Verbose
オプションを設定します。プロットを制御するには、名前と値の引数 HyperparameterOptimizationOptions
の ShowPlots
フィールドを設定します。
例については、OptimizeHyperparameters を使用したニューラル ネットワーク分類器の改善を参照してください。
例: OptimizeHyperparameters="auto"
最適化のオプション。HyperparameterOptimizationOptions
オブジェクトまたは構造体として指定します。この引数を指定すると、名前と値の引数 OptimizeHyperparameters
の効果が変化します。HyperparameterOptimizationOptions
を指定する場合、OptimizeHyperparameters
も指定しなければなりません。オプションはいずれも任意です。ただし、AggregateOptimizationResults
を返すには ConstraintBounds
と ConstraintType
を設定しなければなりません。構造体で設定できるオプションは HyperparameterOptimizationOptions
オブジェクトと同じです。
オプション | 値 | 既定の設定 |
---|---|---|
Optimizer |
| "bayesopt" |
ConstraintBounds | N 個の最適化問題の制約範囲。N 行 2 列の数値行列または | [] |
ConstraintTarget | 最適化問題の制約ターゲット。 | ConstraintBounds と ConstraintType を指定する場合の既定値は "matlab" です。そうでない場合、既定値は [] となります。 |
ConstraintType | 最適化問題の制約タイプ。 | [] |
AcquisitionFunctionName | 獲得関数のタイプ:
目的関数の実行時に最適化が決まるので、名前に | "expected-improvement-per-second-plus" |
MaxObjectiveEvaluations | 目的関数評価の最大数。ConstraintBounds を使用して最適化問題を複数指定する場合、MaxObjectiveEvaluations の値は各最適化問題に個別に適用されます。 | "bayesopt" および "randomsearch" の場合は 30 、"gridsearch" の場合はグリッド全体 |
MaxTime | 最適化の制限時間。非負の実数スカラーとして指定します。制限時間の単位は、 | Inf |
NumGridDivisions | Optimizer="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 | コマンド ラインにおける表示レベル:
詳細については、 | 1 |
UseParallel | ベイズ最適化を並列実行するかどうかを示す logical 値。並列実行には Parallel Computing Toolbox™ が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。 | false |
Repartition | 反復ごとに交差検証を再分割するかどうかを示す論理値。このオプションが 分割ノイズが考慮されるので、通常は値を | false |
次の 3 つのオプションのいずれか 1 つのみを指定してください。 | ||
CVPartition | cvpartition によって作成された cvpartition オブジェクト | 交差検証オプションが指定されていない場合は KFold=5 |
Holdout | ホールドアウトの比率を表す範囲 (0,1) のスカラー | |
KFold | 1 より大きい整数 |
例: HyperparameterOptimizationOptions=struct(UseParallel=true)
出力引数
学習させたニューラル ネットワーク分類器。ClassificationNeuralNetwork
モデル オブジェクトまたは ClassificationPartitionedModel
モデル オブジェクトとして返されます。
名前と値の引数 CrossVal
、CVPartition
、Holdout
、KFold
、Leaveout
のいずれかを設定した場合、Mdl
は ClassificationPartitionedModel
モデル オブジェクトになります。それ以外の場合、Mdl
は ClassificationNeuralNetwork
モデル オブジェクトになります。
Mdl
のプロパティを参照するには、ドット表記を使用します。
OptimizeHyperparameters
を指定して HyperparameterOptimizationOptions
の ConstraintType
オプションと ConstraintBounds
オプションを設定している場合、Mdl
はモデル オブジェクトの N 行 1 列の cell 配列になります。ここで、N は ConstraintBounds
の行数と等しくなります。いずれの最適化問題からも実行可能なモデルが得られない場合、cell 配列の各値が []
になります。
Network
引数を層配列または dlnetwork
オブジェクトに設定してモデルを当てはめる場合、モデルのニューラル ネットワーク アーキテクチャを調べるには、dlnetwork
(Deep Learning Toolbox) 関数を使用してモデルを dlnetwork
オブジェクトに変換します。
複数の最適化問題についての最適化の結果の集計。AggregateBayesianOptimization
オブジェクトとして返されます。AggregateOptimizationResults
を返すには、OptimizeHyperparameters
と HyperparameterOptimizationOptions
を指定しなければなりません。HyperparameterOptimizationOptions
の ConstraintType
オプションと ConstraintBounds
オプションも指定する必要があります。この出力の生成方法を示す例については、Hyperparameter Optimization with Multiple Constraint Boundsを参照してください。
詳細
既定のニューラル ネットワーク分類器の層構造は次のとおりです。
構造 | 説明 |
---|---|
| 入力 — この層は Tbl または X の予測子データに対応します。 |
最初の全結合層 — この層の出力数は既定では 10 です。
| |
ReLU 活性化関数 — この活性化関数は
| |
最終全結合層 — この層の出力数は K で、K は応答変数内のクラス数です。
| |
ソフトマックス関数 (バイナリ分類とマルチクラス分類の両方) — この活性化関数は 結果は予測分類スコア (または事後確率) に対応します。 | |
出力 — この層は予測クラス ラベルに対応します。 |
この層構造のニューラル ネットワーク分類器で予測を返す例については、ニューラル ネットワーク分類器の層の構造を使用した予測を参照してください。
カスタムのニューラル ネットワーク アーキテクチャを指定するには、Network
引数を使用します。 (R2025a 以降)
ヒント
数値予測子は可能であれば常に標準化します (
Standardize
を参照)。標準化を行うと、予測子を測定するスケールの影響を受けなくなります。モデルに学習をさせた後で、新しいデータについてラベルを予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。
アルゴリズム
fitcnet
では、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno 準ニュートン アルゴリズム (LBFGS) [3]が損失関数の最小化手法として使用され、クロスエントロピー損失が最小化されます。LBFGS ソルバーでは、近似による標準的な直線探索法をヘッシアンに対して使用します。
名前と値の引数
Cost
、Prior
、およびWeights
を指定すると、出力モデル オブジェクトにCost
、Prior
、およびW
の各プロパティの指定値がそれぞれ格納されます。Cost
プロパティには、ユーザー指定のコスト行列がそのまま格納されます。Prior
プロパティとW
プロパティには、正規化後の事前確率と観測値の重みがそれぞれ格納されます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。Cost
プロパティは予測に使用されますが、学習には使用されません。したがって、Cost
は読み取り専用ではなく、学習済みモデルの作成後にドット表記を使用してプロパティの値を変更できます。
参照
[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.
拡張機能
ハイパーパラメーターの最適化を並列実行するには、fitcnet
関数を呼び出すときに名前と値の引数 HyperparameterOptimizationOptions
で UseParallel=true
オプションを使用します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
fitcnet
は、次のいずれかに該当する場合に GPU でモデルを当てはめます。入力引数
X
がgpuArray
オブジェクトである。入力引数
Tbl
にgpuArray
予測子変数が含まれている。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021a で導入HyperparameterOptimizationOptions
に UseParallel=true
が含まれている場合にソフトウェアで並列プールを開けないと、fitcnet
は既定で逐次計算を実行します。
以前のリリースでは、このような状況でソフトウェアからエラーが発行されます。
fitcnet
で GPU 配列が完全にサポートされるようになりました。
fitcnet
でニューラル ネットワーク分類器の誤分類コストと事前確率がサポートされます。モデルを作成するときに、名前と値の引数 Cost
および Prior
を指定します。あるいは、モデルに学習させた後に誤分類コストを指定するには、ドット表記を使用して Cost
プロパティの値を変更できます。
Mdl.Cost = [0 2; 1 0];
参考
ClassificationNeuralNetwork
| predict
| loss
| hyperparameters
| margin
| edge
| ClassificationPartitionedModel
| CompactClassificationNeuralNetwork
| dlnetwork
(Deep Learning Toolbox)
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)