fitcnet
構文
説明
fitcnet
は、分類用の全結合のフィードフォワード ニューラル ネットワークの学習に使用します。ニューラル ネットワークの最初の全結合層にはネットワーク入力 (予測子データ) からの結合があり、後続の各層には前の層からの結合があります。各全結合層では、入力に重み行列が乗算されてからバイアス ベクトルが加算されます。各全結合層の後には活性化関数が続きます。最終全結合層とそれに続くソフトマックス活性化関数によってネットワークの出力、つまり分類スコア (事後確率) および予測ラベルが生成されます。詳細については、ニューラル ネットワークの構造を参照してください。
は、table Mdl
= fitcnet(Tbl
,ResponseVarName
)Tbl
内の予測子と table 変数 ResponseVarName
内のクラス ラベルを使用して学習させたニューラル ネットワーク分類モデル Mdl
を返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、名前と値の引数 Mdl
= fitcnet(___,Name,Value
)LayerSizes
や Activations
を指定して、全結合層の出力の数や活性化関数を調整できます。
例
ニューラル ネットワーク分類器の学習
ニューラル ネットワーク分類器に学習させ、テスト セットで分類器の性能を評価します。
標本ファイル 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"],"Ordinal",true);
データを学習セットとテスト セットに分割します。観測値の約 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: [1x1 struct] TrainingHistory: [1000x7 table]
Mdl
は学習させた ClassificationNeuralNetwork
分類器です。ドット表記を使用して Mdl
のプロパティにアクセスできます。たとえば、Mdl.TrainingHistory
と指定すると、ニューラル ネットワーク モデルの学習履歴についての詳細情報を取得できます。
テスト セットの分類誤差を計算して、テスト セットで分類器の性能を評価します。混同行列を使用して結果を可視化します。
testAccuracy = 1 - loss(Mdl,creditTest,"Rating", ... "LossFun","classiferror")
testAccuracy = 0.8053
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: [1x1 struct] TrainingHistory: [47x7 table]
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
⋮
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
⋮
最終全結合層の出力は 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% が正確に分類されています。
検証データを使用したニューラル ネットワーク学習の早期停止
学習プロセスの各反復でニューラル ネットワークの検証損失を計算します。検証損失が妥当な値まで小さくなったら、その時点で学習プロセスを早期に停止します。
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.079879| 2.793048| 0| | 2| 1.470816| 42.594723| 0.058323| 0.015624| 1.247046| 0| | 3| 1.299292| 25.854432| 0.034910| 0.006036| 1.507857| 1| | 4| 0.710465| 11.629107| 0.013616| 0.009266| 0.889157| 0| | 5| 0.647783| 2.561740| 0.005753| 0.017378| 0.766728| 0| | 6| 0.645541| 0.681579| 0.001000| 0.004543| 0.776072| 1| | 7| 0.639611| 1.544692| 0.007013| 0.009127| 0.776320| 2| | 8| 0.604189| 5.045676| 0.064190| 0.000328| 0.744919| 0| | 9| 0.565364| 5.851552| 0.068845| 0.000337| 0.694226| 0| | 10| 0.391994| 8.377717| 0.560480| 0.000321| 0.425466| 0| |==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 11| 0.383843| 0.630246| 0.110270| 0.001131| 0.428487| 1| | 12| 0.369289| 2.404750| 0.084395| 0.000519| 0.405728| 0| | 13| 0.357839| 6.220679| 0.199197| 0.000480| 0.378480| 0| | 14| 0.344974| 2.752717| 0.029013| 0.000453| 0.367279| 0| | 15| 0.333747| 0.711398| 0.074513| 0.001314| 0.348499| 0| | 16| 0.327763| 0.804818| 0.122178| 0.000435| 0.330237| 0| | 17| 0.327702| 0.778169| 0.009810| 0.000318| 0.329095| 0| | 18| 0.327277| 0.020615| 0.004377| 0.000332| 0.329141| 1| | 19| 0.327273| 0.010018| 0.003313| 0.000327| 0.328773| 0| | 20| 0.327268| 0.019497| 0.000805| 0.000595| 0.328831| 1| |==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 21| 0.327228| 0.113983| 0.005397| 0.000501| 0.329085| 2| | 22| 0.327138| 0.240166| 0.012159| 0.000365| 0.329406| 3| | 23| 0.326865| 0.428912| 0.036841| 0.000383| 0.329952| 4| | 24| 0.325797| 0.255227| 0.139585| 0.000325| 0.331246| 5| | 25| 0.325181| 0.758050| 0.135868| 0.000874| 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"],"Ordinal",true);
層化 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
を使用したニューラル ネットワーク分類器の改善
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"],"Ordinal",true);
データを学習セットとテスト セットに分割します。観測値の約 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.21329 | 0.55944 | 0.55944 | none | true | 0.05834 | 3 | | 2 | Best | 0.21551 | 9.1007 | 0.21551 | 0.22919 | relu | true | 5.0811e-08 | [ 1 25] | | 3 | Accept | 0.74189 | 0.37 | 0.21551 | 0.21565 | sigmoid | true | 0.57986 | 126 | | 4 | Accept | 0.4501 | 0.73172 | 0.21551 | 0.21574 | tanh | false | 0.018683 | 10 | | 5 | Accept | 0.74189 | 0.20404 | 0.21551 | 0.21653 | relu | true | 23.973 | [ 6 3] | | 6 | Accept | 0.22409 | 13.374 | 0.21551 | 0.21555 | relu | true | 1.6398e-07 | [ 3 17] | | 7 | Accept | 0.26987 | 12.622 | 0.21551 | 0.21571 | relu | true | 1.382e-08 | 27 | | 8 | Accept | 0.26192 | 33.25 | 0.21551 | 0.21586 | relu | true | 3.2094e-08 | [ 52 4 3] | | 9 | Accept | 0.30706 | 20.077 | 0.21551 | 0.21585 | tanh | false | 8.0567e-09 | [ 22 36] | | 10 | Accept | 0.21678 | 35.983 | 0.21551 | 0.21582 | relu | false | 5.5071e-09 | [ 1 262] | | 11 | Accept | 0.22537 | 10.54 | 0.21551 | 0.21578 | relu | false | 3.3721e-06 | [ 14 2] | | 12 | Accept | 0.35029 | 39.297 | 0.21551 | 0.21564 | relu | false | 4.6001e-08 | [299 1] | | 13 | Accept | 0.32867 | 27.557 | 0.21551 | 0.21564 | relu | false | 0.0044901 | [ 1 234] | | 14 | Best | 0.21297 | 9.1901 | 0.21297 | 0.21289 | relu | false | 9.0367e-07 | [ 1 28] | | 15 | Accept | 0.44469 | 22.2 | 0.21297 | 0.21292 | relu | false | 1.1934e-05 | [ 1 1 258] | | 16 | Accept | 0.21488 | 19.999 | 0.21297 | 0.21292 | relu | true | 9.2814e-08 | [ 1 52 19] | | 17 | Accept | 0.30356 | 87.716 | 0.21297 | 0.21293 | tanh | false | 4.2642e-09 | [ 50 252 272] | | 18 | Accept | 0.23172 | 35.422 | 0.21297 | 0.21294 | relu | true | 3.2243e-09 | [ 4 5 262] | | 19 | Accept | 0.21647 | 23.035 | 0.21297 | 0.21294 | tanh | true | 3.5745e-09 | [ 1 91 14] | | 20 | Accept | 0.28862 | 149.47 | 0.21297 | 0.21293 | tanh | true | 1.3785e-07 | [287 247 236] | |============================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 21 | Accept | 0.21519 | 7.4726 | 0.21297 | 0.21294 | tanh | true | 2.6095e-06 | [ 1 7] | | 22 | Accept | 0.31977 | 23.153 | 0.21297 | 0.21295 | tanh | true | 5.7585e-09 | [ 18 59] | | 23 | Accept | 0.21488 | 36.265 | 0.21297 | 0.21295 | tanh | true | 6.4231e-06 | [ 1 2 276] | | 24 | Accept | 0.74189 | 0.10388 | 0.21297 | 0.21296 | tanh | true | 0.2844 | [ 1 1] | | 25 | Accept | 0.21456 | 22.882 | 0.21297 | 0.21296 | tanh | true | 2.3309e-07 | [ 1 9 91] | | 26 | Accept | 0.25016 | 66.29 | 0.21297 | 0.21296 | sigmoid | false | 3.2664e-09 | [113 55 142] | | 27 | Accept | 0.21424 | 9.3908 | 0.21297 | 0.21296 | sigmoid | false | 1.4102e-06 | [ 1 19] | | 28 | Accept | 0.2314 | 83.118 | 0.21297 | 0.21301 | sigmoid | false | 3.7567e-06 | [240 47 271] | | 29 | Accept | 0.21996 | 13.988 | 0.21297 | 0.21308 | relu | false | 8.5897e-08 | [ 1 35 31] | | 30 | Accept | 0.27273 | 40.495 | 0.21297 | 0.21297 | relu | false | 2.4362e-06 | [ 20 258] | | 31 | Accept | 0.24666 | 40.795 | 0.21297 | 0.20705 | sigmoid | false | 2.1824e-07 | 296 | | 32 | Accept | 0.74189 | 0.57341 | 0.21297 | 0.21299 | sigmoid | false | 0.001915 | [ 1 34] | | 33 | Accept | 0.21678 | 44.545 | 0.21297 | 0.21329 | sigmoid | false | 1.5195e-07 | [ 2 26 249] | | 34 | Accept | 0.74189 | 0.33765 | 0.21297 | 0.21301 | relu | false | 4.7007 | [243 8] | | 35 | Accept | 0.24348 | 8.9164 | 0.21297 | 0.21307 | relu | false | 9.0149e-07 | 26 | | 36 | Accept | 0.22473 | 4.7917 | 0.21297 | 0.2134 | relu | false | 7.9991e-08 | 1 | | 37 | Accept | 0.21424 | 9.6882 | 0.21297 | 0.21299 | relu | true | 1.3089e-05 | [ 1 10 7] | | 38 | Accept | 0.21837 | 53.903 | 0.21297 | 0.21597 | relu | false | 3.2625e-09 | [ 2 39 274] | | 39 | Accept | 0.29688 | 44.476 | 0.21297 | 0.21299 | relu | true | 6.1616e-06 | [265 20] | | 40 | Accept | 0.21805 | 30.673 | 0.21297 | 0.21157 | tanh | true | 4.0008e-09 | [ 2 1 196] | |============================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 41 | Accept | 0.22187 | 41.121 | 0.21297 | 0.21539 | relu | true | 1.4839e-06 | [ 2 7 276] | | 42 | Accept | 0.29847 | 43.535 | 0.21297 | 0.21214 | tanh | true | 7.7422e-06 | 282 | | 43 | Accept | 0.22282 | 66.822 | 0.21297 | 0.213 | tanh | false | 1.9589e-06 | [255 2 193] | | 44 | Accept | 0.21519 | 32.912 | 0.21297 | 0.21522 | sigmoid | false | 1.3998e-07 | [ 1 271] | | 45 | Accept | 0.21901 | 5.021 | 0.21297 | 0.21204 | tanh | false | 5.3917e-06 | 1 | | 46 | Accept | 0.21519 | 30.912 | 0.21297 | 0.21193 | tanh | false | 4.1925e-07 | [ 1 2 189] | | 47 | Accept | 0.21456 | 58.926 | 0.21297 | 0.21506 | tanh | false | 8.115e-06 | [ 1 49 280] | | 48 | Accept | 0.46154 | 5.002 | 0.21297 | 0.21531 | relu | true | 0.0004267 | [ 1 2 2] | | 49 | Accept | 0.21424 | 5.1521 | 0.21297 | 0.21525 | sigmoid | false | 3.1855e-09 | 1 | | 50 | Accept | 0.25079 | 50.299 | 0.21297 | 0.21527 | tanh | false | 4.3831e-05 | [278 17 4] | | 51 | Accept | 0.21647 | 8.5723 | 0.21297 | 0.21354 | none | false | 3.6998e-09 | [ 2 3 4] | | 52 | Accept | 0.21519 | 51.63 | 0.21297 | 0.21343 | none | false | 5.1994e-07 | [ 4 81 236] | | 53 | Accept | 0.22092 | 32.834 | 0.21297 | 0.21343 | none | false | 5.1377e-08 | 292 | | 54 | Accept | 0.21647 | 4.5964 | 0.21297 | 0.21339 | none | false | 0.000236 | [ 1 106] | | 55 | Accept | 0.74189 | 0.64963 | 0.21297 | 0.21518 | none | false | 0.078564 | [ 63 26 288] | | 56 | Accept | 0.21551 | 36.402 | 0.21297 | 0.21338 | none | false | 2.0877e-05 | [ 1 119 76] | | 57 | Accept | 0.21488 | 14.209 | 0.21297 | 0.21516 | none | false | 4.4629e-06 | [ 1 80] | | 58 | Accept | 0.2206 | 102.47 | 0.21297 | 0.21527 | none | false | 3.4266e-05 | [298 199 138] | | 59 | Accept | 0.21456 | 3.1248 | 0.21297 | 0.21532 | none | false | 3.8591e-08 | 1 | | 60 | Best | 0.21202 | 7.9207 | 0.21202 | 0.21528 | none | true | 3.244e-09 | [ 10 2] | |============================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 61 | Accept | 0.21424 | 32.984 | 0.21202 | 0.2153 | none | true | 1.2178e-07 | [291 3] | | 62 | Accept | 0.21488 | 1.5184 | 0.21202 | 0.21366 | none | true | 3.2043e-08 | 1 | | 63 | Accept | 0.21901 | 26.273 | 0.21202 | 0.21482 | none | true | 1.3444e-08 | [204 2 243] | | 64 | Accept | 0.21488 | 6.2945 | 0.21202 | 0.21471 | none | true | 3.6493e-06 | [ 1 19] | | 65 | Accept | 0.32422 | 16.531 | 0.21202 | 0.21506 | sigmoid | true | 3.2181e-09 | [ 49 30] | | 66 | Accept | 0.21519 | 5.8113 | 0.21202 | 0.21387 | none | true | 3.8265e-07 | [ 1 10 1] | | 67 | Accept | 0.22028 | 46.305 | 0.21202 | 0.21471 | none | true | 2.941e-06 | [134 13 244] | | 68 | Accept | 0.21456 | 8.6221 | 0.21202 | 0.21491 | sigmoid | true | 1.358e-06 | [ 1 23] | | 69 | Accept | 0.29307 | 73.252 | 0.21202 | 0.2148 | sigmoid | true | 2.7991e-07 | [296 100 2] | | 70 | Accept | 0.21519 | 8.829 | 0.21202 | 0.21422 | sigmoid | true | 2.105e-05 | [ 1 26] | | 71 | Accept | 0.21424 | 78.573 | 0.21202 | 0.21538 | sigmoid | true | 3.7739e-06 | [ 1 181 240] | | 72 | Accept | 0.74189 | 0.36797 | 0.21202 | 0.21511 | tanh | false | 31.466 | [160 18] | | 73 | Accept | 0.23935 | 42.077 | 0.21202 | 0.21485 | sigmoid | true | 8.3865e-06 | [278 14] | | 74 | Accept | 0.21996 | 51.114 | 0.21202 | 0.20972 | none | false | 3.7709e-09 | [229 7 241] | | 75 | Accept | 0.21329 | 5.0237 | 0.21202 | 0.21425 | sigmoid | false | 1.7549e-08 | 1 | | 76 | Accept | 0.21742 | 1.1517 | 0.21202 | 0.21027 | none | false | 5.5095e-05 | 1 | | 77 | Accept | 0.22028 | 92.125 | 0.21202 | 0.21008 | none | false | 2.1231e-06 | [257 261] | | 78 | Accept | 0.21456 | 51.296 | 0.21202 | 0.21 | tanh | true | 1.3176e-06 | [ 1 186 64] | | 79 | Accept | 0.21265 | 4.9246 | 0.21202 | 0.21006 | relu | true | 2.6891e-06 | 1 | | 80 | Accept | 0.22219 | 10.504 | 0.21202 | 0.20997 | none | true | 4.6566e-05 | 273 | |============================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 81 | Accept | 0.21329 | 1.2294 | 0.21202 | 0.21009 | none | true | 2.6808e-05 | 1 | | 82 | Accept | 0.21488 | 1.6326 | 0.21202 | 0.20863 | none | true | 4.0054e-09 | [ 1 23] | | 83 | Accept | 0.21392 | 27.767 | 0.21202 | 0.21006 | none | true | 5.7106e-06 | [244 2] | | 84 | Accept | 0.21392 | 24.581 | 0.21202 | 0.20884 | tanh | false | 1.6911e-06 | [ 1 14 70] | | 85 | Accept | 0.2136 | 34.531 | 0.21202 | 0.20886 | sigmoid | false | 6.912e-07 | [ 1 10 218] | | 86 | Accept | 0.21488 | 10.99 | 0.21202 | 0.20888 | none | false | 2.3735e-08 | [ 7 1 257] | | 87 | Accept | 0.21583 | 6.9518 | 0.21202 | 0.20957 | sigmoid | true | 5.7559e-06 | [ 1 2] | | 88 | Accept | 0.22155 | 32.717 | 0.21202 | 0.20958 | none | true | 5.0794e-09 | [289 5] | | 89 | Accept | 0.21424 | 22.295 | 0.21202 | 0.21213 | none | true | 3.292e-05 | [ 2 1 275] | | 90 | Accept | 0.21996 | 66.168 | 0.21202 | 0.21214 | none | false | 4.484e-05 | [263 231] | | 91 | Accept | 0.21964 | 31.478 | 0.21202 | 0.20975 | none | false | 4.0107e-08 | [ 14 193 15] | | 92 | Accept | 0.21901 | 38.288 | 0.21202 | 0.20979 | none | true | 1.0798e-07 | [ 2 27 266] | | 93 | Accept | 0.21678 | 40.626 | 0.21202 | 0.21217 | tanh | true | 3.8729e-09 | [ 1 11 235] | | 94 | Accept | 0.21742 | 40.422 | 0.21202 | 0.2101 | sigmoid | true | 6.2846e-05 | [ 1 20 263] | | 95 | Accept | 0.74189 | 0.67204 | 0.21202 | 0.20996 | sigmoid | false | 30.844 | [221 55 105] | | 96 | Best | 0.21011 | 44.631 | 0.21011 | 0.2098 | tanh | true | 4.4224e-08 | [ 1 73 107] | | 97 | Accept | 0.21964 | 8.977 | 0.21011 | 0.20842 | none | true | 1.3171e-05 | [ 12 14] | | 98 | Accept | 0.22187 | 68.624 | 0.21011 | 0.20836 | relu | true | 2.7481e-08 | [ 1 79 281] | | 99 | Accept | 0.21488 | 6.7468 | 0.21011 | 0.2084 | none | true | 3.3818e-09 | [ 1 32 249] | | 100 | Accept | 0.21233 | 29.459 | 0.21011 | 0.20832 | sigmoid | true | 1.4834e-05 | [ 1 1 216] | __________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 100 reached. Total function evaluations: 100 Total elapsed time: 2835.9139 seconds Total objective function evaluation time: 2796.6941 Best observed feasible point: Activations Standardize Lambda LayerSizes ___________ ___________ __________ _______________ tanh true 4.4224e-08 1 73 107 Observed objective function value = 0.21011 Estimated objective function value = 0.2131 Function evaluation time = 44.631 Best estimated feasible point (according to models): Activations Standardize Lambda LayerSizes ___________ ___________ __________ _______________ tanh true 3.8729e-09 1 11 235 Estimated objective function value = 0.20832 Estimated function evaluation time = 39.7382
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 11 235] Activations: 'tanh' 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.8002
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"],"Ordinal",true);
データを学習セットとテスト セットに分割します。観測値の約 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.24554 | 0.74189 | 0.74189 | sigmoid | true | 0.68961 | [104 1 5 3 1] | | 2 | Best | 0.22219 | 79.821 | 0.22219 | 0.24285 | relu | true | 0.00058564 | [ 38 208 162] | | 3 | Accept | 0.63859 | 11.228 | 0.22219 | 0.22668 | sigmoid | true | 1.9768e-06 | [ 1 25 1 287 7] | | 4 | Best | 0.21933 | 49.537 | 0.21933 | 0.22311 | none | false | 1.3353e-06 | 320 | | 5 | Accept | 0.74189 | 0.12879 | 0.21933 | 0.21936 | relu | true | 2.7056 | [ 1 2 1] | | 6 | Accept | 0.29434 | 124.68 | 0.21933 | 0.21936 | relu | true | 1.0503e-06 | [301 31 400] | | 7 | Accept | 0.23776 | 43.931 | 0.21933 | 0.21936 | relu | true | 1.8733e-07 | [ 3 142 56] | | 8 | Best | 0.21488 | 38.338 | 0.21488 | 0.21626 | none | false | 1.7015e-07 | [329 1] | | 9 | Accept | 0.21933 | 35.508 | 0.21488 | 0.21613 | none | false | 4.0697e-07 | [ 2 157 8 3 110] | | 10 | Accept | 0.21996 | 102.77 | 0.21488 | 0.21609 | none | false | 1.21e-08 | [ 13 207 258 24 167] | | 11 | Accept | 0.74189 | 0.32504 | 0.21488 | 0.21626 | none | false | 5.7945 | [261 8 1 62 3] | | 12 | Accept | 0.74189 | 0.70441 | 0.21488 | 0.21713 | relu | true | 0.18642 | [ 92 275 2 134 2] | | 13 | Accept | 0.21933 | 35.818 | 0.21488 | 0.21632 | none | false | 4.906e-05 | [ 50 41 3 10 140] | | 14 | Best | 0.21456 | 102.86 | 0.21456 | 0.21462 | none | false | 7.3009e-06 | [ 1 179 325 31 89] | | 15 | Accept | 0.21488 | 18.953 | 0.21456 | 0.21467 | none | false | 6.274e-09 | [311 11 8 1 10] | | 16 | Accept | 0.21901 | 122.61 | 0.21456 | 0.21452 | none | false | 3.3667e-07 | [ 8 283 245 9 26] | | 17 | Accept | 0.21933 | 124.64 | 0.21456 | 0.2145 | none | false | 2.9413e-07 | [ 16 2 116 168 203] | | 18 | Accept | 0.30579 | 89.942 | 0.21456 | 0.21468 | relu | true | 3.2001e-09 | [199 4 297] | | 19 | Accept | 0.74189 | 1.6194 | 0.21456 | 0.2145 | relu | true | 18.158 | [258 165 355 2] | | 20 | Accept | 0.25779 | 41.138 | 0.21456 | 0.21451 | relu | true | 0.00011883 | [ 11 20 230] | |============================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 21 | Accept | 0.27209 | 49.233 | 0.21456 | 0.21451 | relu | false | 1.2155e-07 | [ 44 93 50 2] | | 22 | Accept | 0.23045 | 40.584 | 0.21456 | 0.21451 | relu | false | 3.9732e-05 | [ 67 55 3 2] | | 23 | Accept | 0.59917 | 38.321 | 0.21456 | 0.21451 | relu | false | 0.010689 | [ 67 137 2 15] | | 24 | Accept | 0.34107 | 34.102 | 0.21456 | 0.21453 | relu | false | 3.54e-06 | [ 70 3 3 149] | | 25 | Accept | 0.28671 | 94.448 | 0.21456 | 0.21453 | relu | false | 3.4107e-09 | [148 377] | | 26 | Accept | 0.25175 | 31.357 | 0.21456 | 0.21453 | tanh | false | 6.0043e-08 | [ 8 144 13] | | 27 | Accept | 0.25556 | 42.215 | 0.21456 | 0.21453 | tanh | false | 6.7749e-06 | [ 38 10 7 3 192] | | 28 | Accept | 0.29688 | 8.8611 | 0.21456 | 0.21453 | tanh | false | 0.0030854 | [ 2 4 45] | | 29 | Accept | 0.74189 | 0.45105 | 0.21456 | 0.21453 | tanh | false | 3.9046 | [363 5 88] | | 30 | Accept | 0.2171 | 39.161 | 0.21456 | 0.21453 | tanh | false | 3.2673e-09 | [ 2 10 228 6] | | 31 | Accept | 0.23268 | 93.767 | 0.21456 | 0.21453 | tanh | false | 0.00014623 | [391 21 264 8] | | 32 | Accept | 0.24539 | 11.764 | 0.21456 | 0.21453 | sigmoid | false | 3.653e-09 | [ 18 5] | | 33 | Accept | 0.22441 | 12.443 | 0.21456 | 0.21453 | sigmoid | false | 4.9278e-07 | [ 8 3 12] | | 34 | Accept | 0.65512 | 3.3187 | 0.21456 | 0.21453 | sigmoid | false | 0.00010399 | [ 35 12 40 2] | | 35 | Accept | 0.26605 | 47.571 | 0.21456 | 0.21454 | sigmoid | false | 5.7344e-08 | [206 54] | | 36 | Accept | 0.25143 | 27.106 | 0.21456 | 0.21454 | tanh | true | 6.6658e-09 | [ 6 4 83 21] | | 37 | Accept | 0.23713 | 36.344 | 0.21456 | 0.21454 | tanh | true | 8.8703e-07 | [ 5 168 17] | | 38 | Accept | 0.23045 | 28.862 | 0.21456 | 0.21454 | tanh | true | 0.0002317 | [ 23 59 33] | | 39 | Accept | 0.74189 | 0.22938 | 0.21456 | 0.21454 | tanh | true | 0.042 | [ 34 12] | | 40 | Accept | 0.27622 | 24.206 | 0.21456 | 0.21454 | tanh | true | 2.2992e-05 | [ 15 12 5 63] | |============================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 41 | Accept | 0.2562 | 11.592 | 0.21456 | 0.21454 | tanh | true | 8.3157e-08 | [ 7 26 1] | | 42 | Accept | 0.2225 | 7.546 | 0.21456 | 0.21454 | none | true | 3.2548e-09 | [ 5 15] | | 43 | Accept | 0.21996 | 90.518 | 0.21456 | 0.21454 | none | true | 1.927e-07 | [312 74 116 171] | | 44 | Accept | 0.2171 | 9.248 | 0.21456 | 0.21454 | none | true | 3.8657e-05 | [ 21 5] | | 45 | Accept | 0.28163 | 1.1081 | 0.21456 | 0.21454 | none | true | 0.0042674 | [ 5 4 1 32] | | 46 | Best | 0.21265 | 90.522 | 0.21265 | 0.21266 | none | true | 3.2216e-06 | [ 11 4 315 183 1] | | 47 | Accept | 0.74189 | 0.20411 | 0.21265 | 0.21266 | none | true | 12.693 | [ 1 9 67] | | 48 | Accept | 0.2225 | 5.836 | 0.21265 | 0.21266 | none | true | 1.9687e-08 | 5 | | 49 | Accept | 0.74189 | 0.41584 | 0.21265 | 0.21266 | sigmoid | false | 31.682 | [ 86 6 97] | | 50 | Accept | 0.21551 | 22.706 | 0.21265 | 0.21267 | none | true | 0.00032103 | [ 3 310 32] | | 51 | Accept | 0.21901 | 1.65 | 0.21265 | 0.21267 | none | false | 0.0011904 | [ 4 18] | | 52 | Accept | 0.22187 | 23.949 | 0.21265 | 0.21267 | none | false | 0.00033519 | [171 2 16 83] | | 53 | Accept | 0.2972 | 142.39 | 0.21265 | 0.21267 | sigmoid | true | 3.2844e-09 | [340 343 9] | | 54 | Accept | 0.74189 | 0.44397 | 0.21265 | 0.21268 | relu | false | 30.468 | [ 35 9 4 266] | | 55 | Accept | 0.21774 | 9.8434 | 0.21265 | 0.21268 | none | false | 3.2361e-09 | [ 6 5 19] | | 56 | Accept | 0.21996 | 66.573 | 0.21265 | 0.21279 | none | true | 9.5604e-07 | [369 101] | | 57 | Accept | 0.22378 | 51.304 | 0.21265 | 0.21279 | relu | false | 0.00013356 | [ 7 12 186 47 3] | | 58 | Accept | 0.46821 | 32.156 | 0.21265 | 0.21268 | relu | true | 3.7939e-08 | [367 3 19 1] | | 59 | Accept | 0.34456 | 7.7912 | 0.21265 | 0.21266 | relu | true | 1.3046e-06 | [ 1 3 18] | | 60 | Accept | 0.28195 | 54.602 | 0.21265 | 0.21268 | sigmoid | false | 1.6723e-08 | [ 20 2 25 185 3] | |============================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 61 | Accept | 0.30737 | 67.794 | 0.21265 | 0.21268 | relu | true | 3.2749e-09 | [ 99 298] | | 62 | Accept | 0.21901 | 81.661 | 0.21265 | 0.21269 | none | true | 9.6543e-06 | [155 348 3 4 5] | | 63 | Accept | 0.30197 | 22.19 | 0.21265 | 0.21862 | tanh | false | 1.0964e-08 | 85 | | 64 | Accept | 0.21837 | 35.774 | 0.21265 | 0.21268 | none | true | 0.00010885 | [ 28 206 23] | | 65 | Accept | 0.2295 | 57.177 | 0.21265 | 0.21268 | tanh | false | 5.7538e-07 | [ 2 397 3 2] | | 66 | Accept | 0.24412 | 3.6737 | 0.21265 | 0.21265 | none | true | 0.00030943 | 188 | | 67 | Accept | 0.30292 | 89.668 | 0.21265 | 0.21265 | tanh | false | 3.3033e-09 | [309 318] | | 68 | Accept | 0.53306 | 22.767 | 0.21265 | 0.21265 | relu | true | 1.928e-06 | [ 1 398 1] | | 69 | Accept | 0.31977 | 37.867 | 0.21265 | 0.21699 | relu | true | 1.1995e-07 | [ 1 1 386] | | 70 | Accept | 0.22028 | 42.181 | 0.21265 | 0.21721 | none | true | 3.3054e-09 | [174 153 319] | | 71 | Accept | 0.3042 | 127.78 | 0.21265 | 0.21727 | tanh | false | 4.5222e-07 | [ 27 14 357 235] | | 72 | Accept | 0.21901 | 40.13 | 0.21265 | 0.21731 | none | true | 2.547e-05 | [ 41 8 383] | | 73 | Accept | 0.2225 | 67.221 | 0.21265 | 0.21744 | tanh | false | 0.00012735 | [326 72] | | 74 | Accept | 0.21964 | 19.274 | 0.21265 | 0.21773 | none | false | 2.5979e-08 | [ 2 140] | | 75 | Accept | 0.21869 | 61.973 | 0.21265 | 0.21779 | none | false | 7.683e-05 | [110 36 353 7 26] | | 76 | Accept | 0.21964 | 7.4093 | 0.21265 | 0.21779 | none | false | 9.5881e-05 | [ 17 20] | | 77 | Accept | 0.21996 | 36.057 | 0.21265 | 0.21798 | none | true | 2.9852e-08 | [ 86 10 272 45] | | 78 | Accept | 0.22823 | 6.1521 | 0.21265 | 0.21803 | none | false | 0.0042535 | [ 7 1 363 10] | | 79 | Accept | 0.21805 | 32.939 | 0.21265 | 0.21805 | none | false | 0.0011893 | [280 131 381] | | 80 | Accept | 0.21424 | 9.1044 | 0.21265 | 0.21814 | none | false | 9.9793e-06 | [ 35 1] | |============================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 81 | Accept | 0.21996 | 42.556 | 0.21265 | 0.21815 | none | true | 7.1625e-07 | [ 14 11 393] | | 82 | Accept | 0.21964 | 30.291 | 0.21265 | 0.21812 | tanh | false | 0.00044672 | [ 3 210] | | 83 | Accept | 0.22028 | 134.98 | 0.21265 | 0.21889 | none | false | 6.1382e-08 | [ 35 92 308 307] | | 84 | Accept | 0.33312 | 47.699 | 0.21265 | 0.21783 | relu | false | 5.3459e-05 | [ 29 19 361 3] | | 85 | Accept | 0.29243 | 79.597 | 0.21265 | 0.21799 | tanh | true | 1.0309e-07 | [ 27 43 369 6 10] | | 86 | Accept | 0.24126 | 7.0959 | 0.21265 | 0.21807 | relu | false | 0.00018455 | [ 11 1] | | 87 | Accept | 0.21901 | 63.435 | 0.21265 | 0.21811 | none | false | 2.345e-06 | [ 10 70 394] | | 88 | Accept | 0.21805 | 55.381 | 0.21265 | 0.2181 | none | true | 9.235e-05 | [ 4 60 370] | | 89 | Accept | 0.21996 | 9.4909 | 0.21265 | 0.2181 | none | true | 1.2184e-07 | 307 | | 90 | Accept | 0.21488 | 8.3628 | 0.21265 | 0.21811 | tanh | true | 3.2637e-09 | [ 1 17] | | 91 | Accept | 0.21774 | 70.692 | 0.21265 | 0.21271 | none | false | 2.3269e-05 | [ 7 2 328 65 84] | | 92 | Accept | 0.22568 | 19.881 | 0.21265 | 0.21807 | relu | false | 7.5349e-05 | [ 4 43 42 20] | | 93 | Accept | 0.2171 | 183.67 | 0.21265 | 0.21267 | none | true | 1.0276e-08 | [ 2 365 386 22] | | 94 | Accept | 0.22219 | 64.04 | 0.21265 | 0.21272 | relu | false | 0.00024046 | [ 72 340] | | 95 | Accept | 0.29879 | 77.664 | 0.21265 | 0.21266 | relu | true | 1.764e-05 | [246 67 68] | | 96 | Accept | 0.22854 | 51.505 | 0.21265 | 0.21777 | tanh | true | 3.8226e-05 | [ 4 9 386] | | 97 | Accept | 0.21837 | 49.418 | 0.21265 | 0.21266 | none | false | 0.00048868 | [ 44 257 370] | | 98 | Accept | 0.29212 | 172.26 | 0.21265 | 0.21266 | relu | false | 3.6694e-09 | [ 85 105 221 259 2] | | 99 | Accept | 0.23427 | 67.281 | 0.21265 | 0.21273 | sigmoid | false | 3.4231e-08 | [205 1 273] | | 100 | Accept | 0.21583 | 218.34 | 0.21265 | 0.21273 | relu | false | 0.0021155 | [308 356 153 4] | __________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 100 reached. Total function evaluations: 100 Total elapsed time: 4686.8262 seconds Total objective function evaluation time: 4641.9874 Best observed feasible point: Activations Standardize Lambda LayerSizes ___________ ___________ __________ ______________________________ none true 3.2216e-06 11 4 315 183 1 Observed objective function value = 0.21265 Estimated objective function value = 0.21273 Function evaluation time = 90.5222 Best estimated feasible point (according to models): Activations Standardize Lambda LayerSizes ___________ ___________ __________ ______________________________ none true 3.2216e-06 11 4 315 183 1 Estimated objective function value = 0.21273 Estimated function evaluation time = 82.3209
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: [11 4 315 183 1] Activations: 'none' OutputLayerActivation: 'softmax' Solver: 'LBFGS' ConvergenceInfo: [1×1 struct] TrainingHistory: [1000×7 table] Properties, Methods
テスト データ セットで、モデルの分類精度を求めます。混同行列を使用して結果を可視化します。
testAccuracy = 1 - loss(Mdl,creditTest,"Rating", ... "LossFun","classiferror")
testAccuracy = 0.8002
confusionchart(creditTest.Rating,predict(Mdl,creditTest))
このモデルでは、真のクラスから 1 単位以内にすべての予測クラスが含まれています。つまり、すべての予測で格付けが 1 つしか離れていません。
入力引数
Tbl
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl
に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Tbl
に応答変数が含まれている場合にTbl
内の他の変数をすべて予測子として使用するには、ResponseVarName
を使用して応答変数を指定します。Tbl
に応答変数が含まれている場合にTbl
内の他の変数の一部のみを予測子として使用するには、formula
を使用して式を指定します。Tbl
に応答変数が含まれていない場合は、Y
を使用して応答変数を指定します。応答変数の長さとTbl
の行数は等しくなければなりません。
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。
ResponseVarName
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 Y
が Tbl.Y
として格納されている場合、"Y"
として指定します。それ以外の場合、モデルを学習させるときに、Tbl
の列は Y
を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y
が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。
名前と値の引数 ClassNames
を使用してクラスの順序を指定することをお勧めします。
データ型: char
| string
formula
— 応答変数および予測子変数サブセットの説明モデル
文字ベクトル | 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
Y
— クラス ラベル
数値ベクトル | categorical ベクトル | logical ベクトル | 文字配列 | string 配列 | 文字ベクトルの cell 配列
モデルの学習に使用するクラス ラベル。数値ベクトル、categorical ベクトル、logical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列として指定します。
Y
が文字配列である場合、クラス ラベルの各要素は配列の 1 つの行に対応しなければなりません。名前と値の引数
ClassNames
を使用してクラスの順序を指定することをお勧めします。
データ型: single
| double
| categorical
| logical
| char
| string
| cell
X
— 予測子データ
数値行列
モデルの学習に使用する予測子データ。数値行列として指定します。
既定では、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
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: fitcnet(X,Y,'LayerSizes',[10 10],'Activations',["relu","tanh"])
は、2 つの全結合層をもつニューラル ネットワークを作成するように指定します。出力はそれぞれ 10 個です。最初の層では正規化線形ユニット (ReLU) 活性化関数を使用し、2 番目の層では双曲線正接活性化関数を使用します。
LayerSizes
— 全結合層のサイズ
10
(既定値) | 正の整数ベクトル
ニューラル ネットワーク モデル内の全結合層のサイズ。正の整数ベクトルとして指定します。LayerSizes
の i 番目の要素は、ニューラル ネットワーク モデルの i 番目の全結合層の出力数です。
LayerSizes
には、ソフトマックス活性化関数を使用する最終全結合層のサイズは含まれません。詳細については、ニューラル ネットワークの構造を参照してください。
例: 'LayerSizes',[100 25 10]
Activations
— 全結合層の活性化関数
'relu'
(既定値) | 'tanh'
| 'sigmoid'
| 'none'
| string 配列 | 文字ベクトルの cell 配列
ニューラル ネットワーク モデルの全結合層の活性化関数。次の表の値をもつ文字ベクトル、string スカラー、string 配列、または文字ベクトルの cell 配列として指定します。
値 | 説明 |
---|---|
'relu' | 正規化線形ユニット (ReLU) 関数 — 各入力要素に対して、0 より小さい値については 0 に設定するという次のしきい値演算を実行します。 |
'tanh' | 双曲線正接 (tanh) 関数 — 各入力要素に関数 |
'sigmoid' | シグモイド関数 — 各入力要素に対して次の演算を実行します。 |
'none' | 恒等関数 — 変換を実行せずに、各入力要素を次のようにそのまま返します。f(x) = x |
活性化関数を 1 つだけ指定した場合は、
Activations
がニューラル ネットワーク モデルの最終全結合層を除くすべての全結合層の活性化関数になります。最終全結合層の活性化関数は常にソフトマックスです (ニューラル ネットワークの構造を参照)。活性化関数の配列を指定した場合は、
Activations
の i 番目の要素がニューラル ネットワーク モデルの i 番目の層の活性化関数になります。
例: 'Activations','sigmoid'
LayerWeightsInitializer
— 全結合層の重みを初期化する関数
'glorot'
(既定値) | 'he'
全結合層の重みを初期化する関数。'glorot'
または 'he'
として指定します。
値 | 説明 |
---|---|
'glorot' | Glorot 初期化子[1] (Xavier 初期化子とも呼ばれます) で重みを初期化します。Glorot 初期化子では、それぞれの層について、ゼロ平均で分散が 2/(I+O) の一様分布から個別に標本を抽出します。I は層の入力サイズ、O は出力サイズです。 |
'he' | He 初期化子[2]で重みを初期化します。He 初期化子では、それぞれの層について、ゼロ平均で分散が 2/I の正規分布から標本を抽出します。I は層の入力サイズです。 |
例: 'LayerWeightsInitializer','he'
LayerBiasesInitializer
— 全結合層の初期バイアスのタイプ
'zeros'
(既定値) | 'ones'
全結合層の初期バイアスのタイプ。'zeros'
または 'ones'
として指定します。
値
'zeros'
を指定すると、各全結合層の初期バイアスが 0 になります。値
'ones'
を指定すると、各全結合層の初期バイアスが 1 になります。
例: 'LayerBiasesInitializer','ones'
データ型: char
| string
ObservationsIn
— 予測子データにおける観測値の次元
'rows'
(既定値) | 'columns'
予測子データにおける観測値の次元。'rows'
または 'columns'
として指定します。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns'
を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して 'ObservationsIn','columns'
を指定することはできません。
例: 'ObservationsIn','columns'
データ型: char
| string
Lambda
— 正則化項の強度
0
(既定値) | 非負のスカラー
正則化項の強度。非負のスカラーを指定します。最小化のための目的関数は、クロスエントロピー損失関数とリッジ (L2) ペナルティ項から作成されます。
例: 'Lambda',1e-4
データ型: single
| double
Standardize
— 予測子データを標準化するためのフラグ
false
または 0
(既定値) | true
または 1
予測子データを標準化するためのフラグ。数値または logical の 0
(false
) または 1
(true
) として指定します。Standardize
を true
に設定すると、各数値予測子変数が対応する列の平均値と標準偏差によってセンタリングおよびスケーリングされます。ソフトウェアは、カテゴリカル予測子を標準化しません。
例: 'Standardize',true
データ型: single
| double
| logical
Verbose
— 詳細レベル
0
(既定値) | 1
詳細レベル。0
または 1
として指定します。名前と値の引数 'Verbose'
は、fitcnet
がコマンド ラインに表示する診断情報の量を制御します。
値 | 説明 |
---|---|
0 | fitcnet は診断情報を表示しません。 |
1 | fitcnet は診断情報を定期的に表示します。 |
既定では、StoreHistory
が true
に設定され、診断情報が fitcnet
で Mdl
内に格納されます。診断情報にアクセスするには Mdl.TrainingHistory
を使用します。
例: 'Verbose',1
データ型: single
| double
VerboseFrequency
— 詳細出力の頻度
1
(既定値) | 正の整数スカラー
詳細出力の頻度 (コマンド ウィンドウに出力するまでの反復回数)。正の整数スカラーとして指定します。値 1 は、1 回の反復ごとに診断情報を出力することを示します。
メモ
この名前と値の引数を使用するには、Verbose
を 1
に設定します。
例: 'VerboseFrequency',5
データ型: single
| double
StoreHistory
— 学習履歴を格納するためのフラグ
true
または 1
(既定値) | false
または 0
学習履歴を格納するためのフラグ。数値または logical の 0
(false
) または 1
(true
) として指定します。StoreHistory
を true
に設定すると、診断情報が Mdl
内に格納され、Mdl.TrainingHistory
を使用してアクセスできます。
例: 'StoreHistory',false
データ型: single
| double
| logical
InitialStepSize
— 初期ステップ サイズ
[]
(既定値) | 正のスカラー | 'auto'
初期ステップ サイズ。正のスカラーまたは 'auto'
として指定します。既定では、fitcnet
は、モデルの学習に使用されるヘッシアンの初期近似の決定に初期ステップ サイズを使用しません (学習ソルバーを参照)。ただし、初期ステップ サイズ を指定すると、逆ヘッシアンの初期近似は になります。 は初期勾配ベクトル、 は単位行列です。
fitcnet
で自動的に初期ステップ サイズを決定するには、値を 'auto'
として指定します。この場合、関数で を使用して初期ステップ サイズが自動的に決定されます。 は初期ステップ ベクトル、 は制約がない初期の重みとバイアスのベクトルです。
例: 'InitialStepSize','auto'
データ型: single
| double
| char
| string
IterationLimit
— 学習の最大反復回数
1e3
(既定値) | 正の整数スカラー
学習の最大反復回数。正の整数スカラーとして指定します。
学習ルーチンが正常に収束したかどうかに関係なく、学習済みのモデルが返されます。Mdl.ConvergenceInfo
に収束情報が格納されます。
例: 'IterationLimit',1e8
データ型: single
| double
GradientTolerance
— 勾配の絶対許容誤差
1e-6
(既定値) | 非負のスカラー
勾配の絶対許容誤差。非負のスカラーとして指定します。
学習の反復 t における損失関数を 、反復 t における重みとバイアスに関する損失関数の勾配を 、初期点における損失関数の勾配を とします。 () になると、学習プロセスが終了します。
例: 'GradientTolerance',1e-5
データ型: single
| double
LossTolerance
— 損失の許容誤差
1e-6
(既定値) | 非負のスカラー
損失の許容誤差。非負のスカラーとして指定します。
いずれかの反復において損失が LossTolerance
より小さくなると、学習プロセスが終了します。
例: 'LossTolerance',1e-8
データ型: single
| double
StepTolerance
— ステップ サイズの許容誤差
1e-6
(既定値) | 非負のスカラー
ステップ サイズの許容誤差。非負のスカラーとして指定します。
いずれかの反復においてステップ サイズが StepTolerance
より小さくなると、学習プロセスが終了します。
例: 'StepTolerance',1e-4
データ型: single
| double
ValidationData
— 学習の収束を検出するための検証データ
cell 配列 | テーブル
学習の収束を検出するための検証データ。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}
を[]
として指定できます。必要に応じて、
ValidationData{3}
を観測値の重みについての m 次元の数値ベクトル、または観測値の重みを含むテーブルValidationData{1}
内の変数名として指定できます。検証データに関する重みは、合計が 1 になるように正規化されます。
ValidationData
を指定し、コマンド ラインで検証損失を表示するには、Verbose
を 1
に設定します。
ValidationFrequency
— 検証の評価の間隔 (反復回数)
1
(既定値) | 正の整数スカラー
検証の評価の間隔 (反復回数)。正の整数スカラーとして指定します。値 1 は、1 回の反復ごとに検証メトリクスを評価することを示します。
メモ
この名前と値の引数を使用するには、ValidationData
を指定しなければなりません。
例: 'ValidationFrequency',5
データ型: single
| double
ValidationPatience
— 検証の評価の停止条件
6
(既定値) | 非負の整数スカラー
検証の評価の停止条件。非負の整数スカラーとして指定します。検証損失が ValidationPatience
回連続でそれまでに計算された検証損失の最小値以上になると、その時点で学習プロセスが停止します。Mdl.TrainingHistory
をチェックすると、検証損失が連続で最小値以上になっている現在までの回数 (Validation Checks
) を確認できます。
例: 'ValidationPatience',10
データ型: single
| double
CategoricalPredictors
— カテゴリカル予測子のリスト
正の整数のベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | 'all'
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。説明は、予測子データの行に観測値、列に予測子があると仮定しています。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
logical ベクトル |
|
文字行列 | 行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データがテーブル (Tbl
) 内にある場合、fitcnet
は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X
) である場合、fitcnet
はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors
を使用してそれらを指定します。
特定されたカテゴリカル予測子に対して、fitcnet
はカテゴリカル変数に順序が設定されていないか順序が設定されているかに応じて、2 つの異なる方式を使用してダミー変数を作成します。順序付けのないカテゴリカル変数の場合、fitcnet
は、そのカテゴリカル変数の各レベルについて 1 つずつダミー変数を作成します。順序付けされたカテゴリカル変数の場合、fitcnet
は、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。
例: 'CategoricalPredictors','all'
データ型: single
| double
| logical
| char
| string
| cell
ClassNames
— 学習に使用するクラスの名前
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの 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
Cost
— 誤分類のコスト
正方行列 | 構造体配列
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
PredictorNames
— 予測子変数名
一意な名前の string 配列 | 一意な文字ベクトルの cell 配列
予測子変数名。一意な名前の 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
Prior
— 事前クラス確率
"empirical"
(既定値) | "uniform"
| 数値ベクトル | 構造体配列
R2023a 以降
事前クラス確率。次の表の値として指定します。
値 | 説明 |
---|---|
"empirical" | クラスの事前確率は、Y のクラスの相対的頻度です。 |
"uniform" | クラスの事前確率はいずれも 1/K (K はクラス数) となります。 |
数値ベクトル | 各要素はクラスの事前確率です。Mdl .ClassNames に従って要素を並べ替えるか、名前と値の引数 ClassNames を使用して順序を指定します。要素は合計が 1 になるように正規化されます。 |
構造体 | 構造体
|
例: "Prior",struct("ClassNames",["b","g"],"ClassProbs",1:2)
データ型: single
| double
| char
| string
| struct
ResponseName
— 応答変数名
"Y"
(既定値) | 文字ベクトル | string スカラー
応答変数名。文字ベクトルまたは string スカラーとして指定します。
Y
を指定した場合、ResponseName
を使用して応答変数の名前を指定できます。ResponseVarName
またはformula
を指定した場合、ResponseName
を使用できません。
例: "ResponseName","response"
データ型: char
| string
ScoreTransform
— スコア変換
"none"
(既定値) | "doublelogit"
| "invlogit"
| "ismax"
| "logit"
| 関数ハンドル | ...
スコア変換。文字ベクトル、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
Weights
— 観測値の重み
非負の数値ベクトル | Tbl
内の変数の名前
観測値の重み。非負の数値ベクトルまたは Tbl
内の変数の名前を指定します。ソフトウェアは、X
または Tbl
の各観測値に、Weights
の対応する値で重みを付けます。Weights
の長さは、X
または Tbl
の観測値の数と等しくなければなりません。
入力データをテーブル Tbl
として指定した場合、Weights
は数値ベクトルが含まれている Tbl
内の変数の名前にすることができます。この場合、Weights
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトル W
が Tbl.W
として格納されている場合、'W'
として指定します。それ以外の場合、モデルに学習をさせるときに、Tbl
の列は W
を含めてすべて予測子または応答変数として扱われます。
既定の設定では、Weights
は ones(n,1)
です。n
は X
または Tbl
の観測値数です。
合計が各クラスの事前確率の値と等しくなるように Weights
が正規化されます。
データ型: single
| double
| char
| string
メモ
交差検証の名前と値の引数は、名前と値の引数 'OptimizeHyperparameters'
と一緒には使用できません。'OptimizeHyperparameters'
の場合の交差検証は、名前と値の引数 'HyperparameterOptimizationOptions'
を使用することのみによって変更できます。
CrossVal
— 交差検証分類器を学習させるためのフラグ
'off'
(既定値) | 'on'
交差検証分類器に学習させるためのフラグ。'on'
または 'off'
として指定します。
'on'
を指定すると、10 の分割を使用して交差検証分類器の学習が実行されます。
名前と値の引数 CVPartition
、Holdout
、KFold
、または Leaveout
を使用すると、この交差検証の設定をオーバーライドできます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値の引数は、一度に 1 つだけです。
または、後で Mdl
を crossval
に渡して交差検証を実行します。
例: 'Crossval','on'
データ型: char
| string
CVPartition
— 交差検証分割
[]
(既定値) | cvpartition
オブジェクト
交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する cvpartition
オブジェクトとして指定します。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: cvp = cvpartition(500,KFold=5)
を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、CVPartition=cvp
を設定して交差検証分割を指定できます。
Holdout
— ホールドアウト検証の対象データの比率
(0,1) の範囲のスカラー値
ホールドアウト検証に使用するデータの比率。範囲 [0,1] のスカラー値として指定します。Holdout=p
を指定した場合、以下の手順が実行されます。
p*100
% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。コンパクトな学習済みモデルを交差検証済みモデルの
Trained
プロパティに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: Holdout=0.1
データ型: double
| single
KFold
— 分割の数
10
(既定値) | 1 より大きい正の整数値
交差検証済みモデルで使用する分割の数。1 より大きい正の整数値として指定します。KFold=k
を指定した場合、以下の手順が実行されます。
データを無作為に
k
個のセットに分割する。各セットについて、そのセットを検証データとして確保し、他の
k
– 1 個のセットを使用してモデルに学習をさせる。k
個のコンパクトな学習済みモデルを、交差検証済みモデルのTrained
プロパティに含まれているk
行 1 列の cell ベクトルに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: KFold=5
データ型: single
| double
Leaveout
— Leave-one-out 法の交差検証のフラグ
"off"
(既定値) | "on"
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
OptimizeHyperparameters
— 最適化するパラメーター
'none'
(既定値) | 'auto'
| 'all'
| 使用可能パラメーター名の string 配列または cell 配列 | optimizableVariable
オブジェクトのベクトル
最適化するパラメーター。次のいずれかを指定します。
'none'
— 最適化を行いません。'auto'
—{'Activations','Lambda','LayerSizes','Standardize'}
を使用します。'all'
— すべての使用可能パラメーターを最適化します。使用可能パラメーター名の string 配列または cell 配列。
optimizableVariable
オブジェクトのベクトル。通常はhyperparameters
の出力です。
最適化では、パラメーターを変化させることにより、fitcnet
の交差検証損失 (誤差) を最小化しようとします。(別の状況における) 交差検証損失の詳細については、分類損失を参照してください。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値の引数 HyperparameterOptimizationOptions
を使用します。
メモ
'OptimizeHyperparameters'
の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、'OptimizeHyperparameters'
を 'auto'
に設定すると、fitcnet
は 'auto'
オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。
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
の効果が変化します。この構造体のフィールドは、すべてオプションです。
フィールド名 | 値 | 既定の設定 |
---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
オブジェクト関数のランタイムによって最適化が異なるので、名前に | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | 目的関数評価の最大数。 | 'bayesopt' および 'randomsearch' の場合は 30 、'gridsearch' の場合はグリッド全体 |
MaxTime | 制限時間。正の実数スカラーを指定します。制限時間の単位は、 | Inf |
NumGridDivisions | 'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。 | 10 |
ShowPlots | プロットを表示するかどうかを示す論理値。true の場合、最良の観測された目的関数の値が反復回数に対してプロットされます。ベイズ最適化を使用する場合 (Optimizer が 'bayesopt' )、最良の推定された目的関数値もプロットされます。最良の観測された目的関数値および最良の推定された目的関数値は、反復表示の BestSoFar (observed) 列および BestSoFar (estim.) 列の値にそれぞれ対応しています。これらの値は、Mdl.HyperparameterOptimizationResults のプロパティ ObjectiveMinimumTrace および EstimatedObjectiveMinimumTrace で確認できます。問題にベイズ最適化の最適化パラメーターが 1 つまたは 2 つある場合、ShowPlots はパラメーターに対する目的関数のモデルもプロットします。 | true |
SaveIntermediateResults | Optimizer が 'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。 | false |
Verbose | コマンド ラインに次を表示します。
詳細については、 | 1 |
UseParallel | ベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。 | false |
Repartition | 反復ごとに交差検証を再分割するかどうかを示す論理値。 分割ノイズが考慮されるので、通常は | false |
以下の 3 つのオプションは 1 つだけ使用できます。 | ||
CVPartition | cvpartition によって作成される cvpartition オブジェクト | 交差検証フィールドが指定されていない場合 'Kfold',5 |
Holdout | ホールドアウトの比率を表す範囲 (0,1) のスカラー | |
Kfold | 1 より大きい整数 |
例: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
データ型: struct
出力引数
Mdl
— 学習させたニューラル ネットワーク分類器
ClassificationNeuralNetwork
オブジェクト | ClassificationPartitionedModel
オブジェクト
学習させたニューラル ネットワーク分類器。ClassificationNeuralNetwork
オブジェクトまたは ClassificationPartitionedModel
オブジェクトとして返されます。
名前と値の引数 CrossVal
、CVPartition
、Holdout
、KFold
、Leaveout
のいずれかを設定した場合、Mdl
は ClassificationPartitionedModel
オブジェクトになります。それ以外の場合、Mdl
は ClassificationNeuralNetwork
モデルです。
Mdl
のプロパティを参照するには、ドット表記を使用します。
詳細
ニューラル ネットワークの構造
既定のニューラル ネットワーク分類器の層構造は次のとおりです。
構造 | 説明 |
---|---|
| 入力 — この層は Tbl または X の予測子データに対応します。 |
最初の全結合層 — この層の出力数は既定では 10 です。
| |
ReLU 活性化関数 — この活性化関数は
| |
最終全結合層 — この層の出力数は K で、K は応答変数内のクラス数です。
| |
ソフトマックス関数 (バイナリ分類とマルチクラス分類の両方) — この活性化関数は 結果は予測分類スコア (または事後確率) に対応します。 | |
出力 — この層は予測クラス ラベルに対応します。 |
この層構造のニューラル ネットワーク分類器で予測を返す例については、ニューラル ネットワーク分類器の層の構造を使用した予測を参照してください。
ヒント
数値予測子は可能であれば常に標準化します (
Standardize
を参照)。標準化を行うと、予測子を測定するスケールの影響を受けなくなります。モデルに学習をさせた後で、新しいデータについてラベルを予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。
アルゴリズム
学習ソルバー
fitcnet
では、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno 準ニュートン アルゴリズム (LBFGS) [3]が損失関数の最小化手法として使用され、クロスエントロピー損失が最小化されます。LBFGS ソルバーでは、近似による標準的な直線探索法をヘッシアンに対して使用します。
Cost
、Prior
および Weights
名前と値の引数
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.
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
ハイパーパラメーターの最適化を並列実行するには、関数 fitcnet
を呼び出すときに名前と値の引数 'HyperparameterOptimizationOptions', struct('UseParallel',true)
を指定します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021a で導入R2023a: ニューラル ネットワーク分類器での誤分類コストと事前確率のサポート
fitcnet
でニューラル ネットワーク分類器の誤分類コストと事前確率がサポートされます。モデルを作成するときに、名前と値の引数 Cost
および Prior
を指定します。あるいは、モデルに学習させた後に誤分類コストを指定するには、ドット表記を使用して Cost
プロパティの値を変更できます。
Mdl.Cost = [0 2; 1 0];
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)