fitrensemble
回帰のアンサンブル学習器の当てはめ
構文
説明
は、学習させたアンサンブル回帰モデル オブジェクト Mdl = fitrensemble(Tbl,ResponseVarName)Mdl を返します。既定では、Mdl には、LSBoost と table Tbl 内の予測子および応答データを使用して 100 本の回帰木をブースティングした結果が格納されます。ResponseVarName は、Tbl 内の応答変数の名前です。
は、1 つ以上の Mdl = fitrensemble(___,Name,Value)Name,Value ペア引数で指定される追加のオプションと、前の構文の入力引数のいずれかを使用します。たとえば、学習サイクル数、アンサンブル集約法、10 分割交差検証の実施を指定できます。
[ は、名前と値の引数 Mdl,AggregateOptimizationResults] = fitrensemble(___)OptimizeHyperparameters と HyperparameterOptimizationOptions が指定されている場合に、ハイパーパラメーターの最適化の結果が格納された AggregateOptimizationResults も返します。HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この構文を使用すると、交差検証損失ではなくコンパクトなモデル サイズに基づいて最適化したり、オプションは同じでも制約範囲は異なる複数の一連の最適化問題を実行したりできます。
例
与えられた気筒数、気筒ごとの排気量、馬力および重量に対して自動車の燃費を予測するアンサンブル回帰を作成します。次に、予測子の数を減らして、別のアンサンブルに学習をさせます。これらのアンサンブルの標本内予測精度を比較します。
carsmall データ セットを読み込みます。学習に使用する変数を table に格納します。
load carsmall
Tbl = table(Cylinders,Displacement,Horsepower,Weight,MPG);アンサンブル回帰に学習をさせます。
Mdl1 = fitrensemble(Tbl,'MPG');Mdl1 は RegressionEnsemble モデルです。Mdl1 には、次のような顕著な特徴があります。
アンサンブル集約アルゴリズムは
'LSBoost'です。アンサンブル集約アルゴリズムがブースティング アルゴリズムなので、最大 10 分割を許容する回帰木がアンサンブルを構成します。
100 本の木がアンサンブルを構成します。
MPG は MATLAB® ワークスペースの変数なので、次のように入力すると同じ結果を得ることができます。
Mdl1 = fitrensemble(Tbl,MPG);
学習させたアンサンブル回帰を使用して、排気量が 200 立方インチ、150 馬力、重量 3,000 lbs の 4 気筒搭載車の燃費を予測します。
pMPG = predict(Mdl1,[4 200 150 3000])
pMPG = 25.6467
Displacement を除く Tbl 内の予測子をすべて使用して、新しいアンサンブルに学習をさせます。
formula = 'MPG ~ Cylinders + Horsepower + Weight';
Mdl2 = fitrensemble(Tbl,formula);Mdl1 と Mdl2 の再代入 MSE を比較します。
mse1 = resubLoss(Mdl1)
mse1 = 0.3096
mse2 = resubLoss(Mdl2)
mse2 = 0.5861
すべての予測子に対して学習を行ったアンサンブルの方が、標本内 MSE が小さくなります。
fitrensemble を使用して、ブースティング回帰木のアンサンブルに学習をさせます。名前と値のペアの引数 'NumBins' を指定して数値予測子をビン化することにより、学習時間を短縮します。学習後、学習済みモデルの BinEdges プロパティと関数discretizeを使用して、ビン化された予測子データを再現できます。
標本データ セットを生成します。
rng('default') % For reproducibility N = 1e6; X1 = randi([-1,5],[N,1]); X2 = randi([5,10],[N,1]); X3 = randi([0,5],[N,1]); X4 = randi([1,10],[N,1]); X = [X1 X2 X3 X4]; y = X1 + X2 + X3 + X4 + normrnd(0,1,[N,1]);
最小二乗ブースティング (LSBoost、既定値) を使用して、ブースティング回帰木のアンサンブルに学習をさせます。比較のため、関数の実行時間を測定します。
tic Mdl1 = fitrensemble(X,y); toc
Elapsed time is 78.662954 seconds.
名前と値のペアの引数 'NumBins' を使用して、学習を高速化します。'NumBins' の値として正の整数スカラーを指定した場合、指定した個数の同確率のビンにすべての数値予測子がビン化され、元のデータではなくビンのインデックスに対して木が成長します。カテゴリカル予測子はビン化されません。
tic
Mdl2 = fitrensemble(X,y,'NumBins',50);
tocElapsed time is 43.353208 seconds.
元のデータではなくビン化されたデータを使用すると、処理が約 2 倍高速になります。経過時間はオペレーティング システムによって変化する可能性があることに注意してください。
再代入による回帰誤差を比較します。
rsLoss = resubLoss(Mdl1)
rsLoss = 1.0134
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 1.0133
この例では、予測子の値をビン化することにより、精度を大きく失わずに学習時間が短縮されました。一般に、この例のような大規模な学習データ セットを使用する場合、ビン化オプションを使用すると学習を高速化できますが、精度が低下する可能性があります。さらに学習時間を短縮するには、指定するビンの個数を少なくします。
学習済みモデルの BinEdges プロパティと関数discretizeを使用して、ビン化された予測子データを再現します。
X = Mdl2.X; % Predictor data Xbinned = zeros(size(X)); edges = Mdl2.BinEdges; % Find indices of binned predictors. idxNumeric = find(~cellfun(@isempty,edges)); if iscolumn(idxNumeric) idxNumeric = idxNumeric'; end for j = idxNumeric x = X(:,j); % Convert x to array if x is a table. if istable(x) x = table2array(x); end % Group x into bins by using the discretize function. xbinned = discretize(x,[-inf; edges{j}; inf]); Xbinned(:,j) = xbinned; end
数値予測子の場合、1 からビンの数までの範囲にあるビンのインデックスが Xbinned に格納されます。カテゴリカル予測子の場合、Xbinned の値は 0 になります。X に NaN が含まれている場合、対応する Xbinned の値は NaN になります。
ブースティング回帰木のアンサンブルの汎化誤差を推定します。
carsmall データ セットを読み込みます。燃費の予測子として、気筒数、気筒ごとの排気量、馬力、重量を選択します。
load carsmall
X = [Cylinders Displacement Horsepower Weight];10 分割の交差検証を使用して、回帰木のアンサンブルを交差検証します。決定木テンプレートを使用して、各木を 1 回だけ分割するように指定します。
rng(1); % For reproducibility t = templateTree('MaxNumSplits',1); Mdl = fitrensemble(X,MPG,'Learners',t,'CrossVal','on');
Mdl は RegressionPartitionedEnsemble モデルです。
10 分割交差検証を行った累積平均二乗誤差 (MSE) をプロットします。アンサンブルの推定汎化誤差を表示します。
kflc = kfoldLoss(Mdl,'Mode','cumulative'); figure; plot(kflc); ylabel('10-fold cross-validated MSE'); xlabel('Learning cycle');

estGenError = kflc(end)
estGenError = 26.2356
既定の設定では、kfoldLoss は汎化誤差を返します。しかし、累積損失をプロットすると、アンサンブル内に弱学習器が蓄積するにつれて損失がどのように変化するかを観察できます。
このアンサンブルでは、約 30 個の弱学習器が蓄積した後の MSE が約 23.5 になっています。
アンサンブルの汎化誤差が満足できるものになった場合は、予測モデルを作成するため、交差検証以外の設定をすべて使用して、再度アンサンブルに学習をさせます。ただし、木あたりの決定分岐の最大数や学習サイクル数などのハイパーパラメーターを調整することをお勧めします。
この例では、fitrensemble を使用して自動的にハイパーパラメーターを最適化する方法を示します。この例では、carsmall データを使用します。
データを読み込みます。
load carsmall自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めることができます。
Mdl = fitrensemble([Horsepower,Weight],MPG,'OptimizeHyperparameters','auto')
この例では、再現性を得るため、乱数シードを設定し、'expected-improvement-plus' の獲得関数を使用します。また、ランダム フォレスト アルゴリズムの再現性を得るため、木学習器について名前と値のペアの引数 'Reproducible' として true を指定します。
rng('default') t = templateTree('Reproducible',true); Mdl = fitrensemble([Horsepower,Weight],MPG,'OptimizeHyperparameters','auto','Learners',t, ... 'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName','expected-improvement-plus'))
|===================================================================================================================================|
| Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize |
| | result | log(1+loss) | runtime | (observed) | (estim.) | | ycles | | |
|===================================================================================================================================|
| 1 | Best | 2.9726 | 5.0156 | 2.9726 | 2.9726 | Bag | 413 | - | 1 |
| 2 | Accept | 6.2619 | 1.0776 | 2.9726 | 3.6133 | LSBoost | 57 | 0.0016067 | 6 |
| 3 | Accept | 2.9975 | 0.41074 | 2.9726 | 2.9852 | Bag | 32 | - | 2 |
| 4 | Accept | 4.1897 | 0.60812 | 2.9726 | 2.972 | Bag | 55 | - | 40 |
| 5 | Accept | 6.3321 | 0.94547 | 2.9726 | 2.9715 | LSBoost | 55 | 0.001005 | 2 |
| 6 | Best | 2.9714 | 0.45584 | 2.9714 | 2.9715 | Bag | 39 | - | 1 |
| 7 | Best | 2.9615 | 0.6565 | 2.9615 | 2.9681 | Bag | 55 | - | 1 |
| 8 | Accept | 3.017 | 0.22648 | 2.9615 | 2.98 | Bag | 17 | - | 1 |
| 9 | Accept | 4.1881 | 2.6305 | 2.9615 | 2.9801 | LSBoost | 164 | 0.93989 | 50 |
| 10 | Accept | 3.6972 | 0.26516 | 2.9615 | 2.98 | LSBoost | 12 | 0.99469 | 1 |
| 11 | Accept | 3.3742 | 0.30469 | 2.9615 | 2.9801 | LSBoost | 15 | 0.13227 | 1 |
| 12 | Accept | 4.1881 | 3.2728 | 2.9615 | 2.9799 | LSBoost | 205 | 0.083595 | 48 |
| 13 | Accept | 5.0943 | 0.81983 | 2.9615 | 2.9799 | LSBoost | 48 | 0.014581 | 1 |
| 14 | Accept | 5.5926 | 0.80629 | 2.9615 | 2.9796 | LSBoost | 47 | 0.010771 | 50 |
| 15 | Accept | 6.39 | 0.51077 | 2.9615 | 2.9793 | LSBoost | 27 | 0.0010688 | 50 |
| 16 | Accept | 3.3304 | 1.3145 | 2.9615 | 2.9793 | LSBoost | 78 | 0.32479 | 7 |
| 17 | Accept | 4.6487 | 0.34074 | 2.9615 | 2.9795 | LSBoost | 17 | 0.055039 | 5 |
| 18 | Accept | 3.264 | 0.253 | 2.9615 | 2.9796 | LSBoost | 11 | 0.29878 | 1 |
| 19 | Accept | 4.1904 | 0.28162 | 2.9615 | 2.9621 | LSBoost | 13 | 0.26663 | 50 |
| 20 | Accept | 3.5279 | 8.027 | 2.9615 | 2.9626 | LSBoost | 499 | 0.25522 | 1 |
|===================================================================================================================================|
| Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize |
| | result | log(1+loss) | runtime | (observed) | (estim.) | | ycles | | |
|===================================================================================================================================|
| 21 | Best | 2.9162 | 4.5894 | 2.9162 | 2.9178 | Bag | 423 | - | 2 |
| 22 | Best | 2.9009 | 5.2125 | 2.9009 | 2.9043 | Bag | 499 | - | 3 |
| 23 | Accept | 2.9064 | 5.2346 | 2.9009 | 2.9053 | Bag | 499 | - | 3 |
| 24 | Accept | 2.909 | 5.2586 | 2.9009 | 2.9065 | Bag | 494 | - | 3 |
| 25 | Accept | 2.9011 | 5.2528 | 2.9009 | 2.9051 | Bag | 499 | - | 3 |
| 26 | Accept | 3.1863 | 0.2354 | 2.9009 | 2.9048 | LSBoost | 10 | 0.99529 | 10 |
| 27 | Accept | 3.5444 | 7.713 | 2.9009 | 2.9049 | LSBoost | 476 | 0.97599 | 5 |
| 28 | Accept | 3.2334 | 0.25525 | 2.9009 | 2.9048 | LSBoost | 12 | 0.55679 | 4 |
| 29 | Best | 2.8547 | 5.0825 | 2.8547 | 2.8575 | Bag | 487 | - | 5 |
| 30 | Best | 2.84 | 5.2092 | 2.84 | 2.8436 | Bag | 499 | - | 6 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 81.8187 seconds
Total objective function evaluation time: 72.2666
Best observed feasible point:
Method NumLearningCycles LearnRate MinLeafSize
______ _________________ _________ ___________
Bag 499 NaN 6
Observed objective function value = 2.84
Estimated objective function value = 2.8436
Function evaluation time = 5.2092
Best estimated feasible point (according to models):
Method NumLearningCycles LearnRate MinLeafSize
______ _________________ _________ ___________
Bag 499 NaN 6
Estimated objective function value = 2.8436
Estimated function evaluation time = 5.2226

Mdl =
RegressionBaggedEnsemble
ResponseName: 'Y'
CategoricalPredictors: []
ResponseTransform: 'none'
NumObservations: 94
HyperparameterOptimizationResults: [1×1 BayesianOptimization]
NumTrained: 499
Method: 'Bag'
LearnerNames: {'Tree'}
ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
FitInfo: []
FitInfoDescription: 'None'
Regularization: []
FResample: 1
Replace: 1
UseObsForLearner: [94×499 logical]
Properties, Methods
最適化では、回帰の方式 (Bag および LSBoost)、NumLearningCycles、LSBoost の LearnRate、および木学習器の MinLeafSize に対して探索を行いました。出力は、推定交差検証損失が最小になるアンサンブル回帰です。
十分な予測性能をもつブースティング回帰木のアンサンブルを作成する方法の 1 つは、交差検証を使用して決定木の複雑度レベルを調整することです。最適な複雑度レベルを求めるときに、学習率を調整して学習サイクル数の最小化も行います。
この例では、交差検証オプション (名前と値のペアの引数 'KFold') と関数 kfoldLoss を使用して、最適なパラメーターを手動で求めます。あるいは、名前と値のペアの引数 'OptimizeHyperparameters' を使用して自動的にハイパーパラメーターを最適化することもできます。アンサンブル回帰の最適化を参照してください。
carsmall データ セットを読み込みます。燃費の予測子として、気筒数、気筒ごとの排気量、馬力、重量を選択します。
load carsmall
Tbl = table(Cylinders,Displacement,Horsepower,Weight,MPG);回帰木をブースティングする場合、木の深さの制御に関する既定値は次のとおりです。
MaxNumSplitsは10。MinLeafSizeは5MinParentSizeは10
最適な木の複雑度レベルを求めるため、以下を行います。
一連のアンサンブルを交差検証します。以後のアンサンブルについて、決定株 (1 つの分割) から最大 n - 1 個の分割まで木の複雑度レベルを指数的に増やします。n は標本サイズです。また、各アンサンブル学習率を 0.1 から 1 までの間で変化させます。
アンサンブルごとに交差検証の平均二乗誤差 (MSE) を推定します。
木の複雑度レベル () について、学習サイクル数に対してプロットすることにより、アンサンブルの交差検証済み累積 MSE を比較します。同じ Figure に、各学習率に対応する別々の曲線をプロットします。
MSE が最小になる曲線を選択し、対応する学習サイクルおよび学習率に注目します。
深い回帰木と切り株を交差検証します。欠損値がデータに含まれているので、代理分岐を使用します。これらの回帰木は基準として機能します。
rng(1) % For reproducibility MdlDeep = fitrtree(Tbl,'MPG','CrossVal','on','MergeLeaves','off', ... 'MinParentSize',1,'Surrogate','on'); MdlStump = fitrtree(Tbl,'MPG','MaxNumSplits',1,'CrossVal','on', ... 'Surrogate','on');
5 分割の交差検証を使用して、150 本のブースティング回帰木のアンサンブルを交差検証します。木テンプレートを使用して、以下を行います。
という数列の値を使用して分割の最大数を変化させます。m は、 が n - 1 を超えない値です。
代理分岐を有効にします。
{0.1, 0.25, 0.5, 1} という集合の各値を使用して、それぞれの学習率を調整します。
n = size(Tbl,1); m = floor(log2(n - 1)); learnRate = [0.1 0.25 0.5 1]; numLR = numel(learnRate); maxNumSplits = 2.^(0:m); numMNS = numel(maxNumSplits); numTrees = 150; Mdl = cell(numMNS,numLR); for k = 1:numLR for j = 1:numMNS t = templateTree('MaxNumSplits',maxNumSplits(j),'Surrogate','on'); Mdl{j,k} = fitrensemble(Tbl,'MPG','NumLearningCycles',numTrees, ... 'Learners',t,'KFold',5,'LearnRate',learnRate(k)); end end
各アンサンブルの交差検証済み累積 MSE を推定します。
kflAll = @(x)kfoldLoss(x,'Mode','cumulative'); errorCell = cellfun(kflAll,Mdl,'Uniform',false); error = reshape(cell2mat(errorCell),[numTrees numel(maxNumSplits) numel(learnRate)]); errorDeep = kfoldLoss(MdlDeep); errorStump = kfoldLoss(MdlStump);
アンサンブル内の木の本数が増加すると交差検証済み MSE がどのように変化するかをプロットします。同じプロットに学習率ごとの曲線をプロットし、木の複雑度レベルを変えた別のプロットをそれぞれ作成します。木の複雑度レベルからプロット対象となるサブセットを選択します。
mnsPlot = [1 round(numel(maxNumSplits)/2) numel(maxNumSplits)]; figure; for k = 1:3 subplot(2,2,k) plot(squeeze(error(:,mnsPlot(k),:)),'LineWidth',2) axis tight hold on h = gca; plot(h.XLim,[errorDeep errorDeep],'-.b','LineWidth',2) plot(h.XLim,[errorStump errorStump],'-.r','LineWidth',2) plot(h.XLim,min(min(error(:,mnsPlot(k),:))).*[1 1],'--k') h.YLim = [10 50]; xlabel('Number of trees') ylabel('Cross-validated MSE') title(sprintf('MaxNumSplits = %0.3g', maxNumSplits(mnsPlot(k)))) hold off end hL = legend([cellstr(num2str(learnRate','Learning Rate = %0.2f')); ... 'Deep Tree';'Stump';'Min. MSE']); hL.Position(1) = 0.6;

各曲線では、アンサンブル内の木の本数が最適な位置で交差検証の MSE が最小になります。
全体的に MSE が最小になる最大分割数、木の数および学習率を特定します。
[minErr,minErrIdxLin] = min(error(:));
[idxNumTrees,idxMNS,idxLR] = ind2sub(size(error),minErrIdxLin);
fprintf('\nMin. MSE = %0.5f',minErr)Min. MSE = 16.77593
fprintf('\nOptimal Parameter Values:\nNum. Trees = %d',idxNumTrees);Optimal Parameter Values: Num. Trees = 78
fprintf('\nMaxNumSplits = %d\nLearning Rate = %0.2f\n',... maxNumSplits(idxMNS),learnRate(idxLR))
MaxNumSplits = 1 Learning Rate = 0.25
最適なハイパーパラメーターおよび学習セット全体に基づいて予測アンサンブルを作成します。
tFinal = templateTree('MaxNumSplits',maxNumSplits(idxMNS),'Surrogate','on'); MdlFinal = fitrensemble(Tbl,'MPG','NumLearningCycles',idxNumTrees, ... 'Learners',tFinal,'LearnRate',learnRate(idxLR))
MdlFinal =
RegressionEnsemble
PredictorNames: {'Cylinders' 'Displacement' 'Horsepower' 'Weight'}
ResponseName: 'MPG'
CategoricalPredictors: []
ResponseTransform: 'none'
NumObservations: 94
NumTrained: 78
Method: 'LSBoost'
LearnerNames: {'Tree'}
ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
FitInfo: [78×1 double]
FitInfoDescription: {2×1 cell}
Regularization: []
Properties, Methods
MdlFinal は RegressionEnsemble です。与えられた気筒数、全気筒の排気量、馬力、重量に対して燃費を予測するため、予測子データと MdlFinal を predict に渡すことができます。
交差検証オプション ('KFold') と関数 kfoldLoss を使用して最適な値を手動で求める代わりに、名前と値のペアの引数 'OptimizeHyperparameters' を使用できます。'OptimizeHyperparameters' を指定すると、ベイズ最適化を使用して、最適なパラメーターが自動的に求められます。'OptimizeHyperparameters' を使用して取得した最適な値は、手動で求めたものと異なる可能性があります。
t = templateTree('Surrogate','on'); mdl = fitrensemble(Tbl,'MPG','Learners',t, ... 'OptimizeHyperparameters',{'NumLearningCycles','LearnRate','MaxNumSplits'})
|====================================================================================================================|
| Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits |
| | result | log(1+loss) | runtime | (observed) | (estim.) | ycles | | |
|====================================================================================================================|
| 1 | Best | 3.3955 | 0.76345 | 3.3955 | 3.3955 | 26 | 0.072054 | 3 |
| 2 | Accept | 6.0976 | 3.1757 | 3.3955 | 3.5549 | 170 | 0.0010295 | 70 |
| 3 | Best | 3.2914 | 4.9698 | 3.2914 | 3.2917 | 273 | 0.61026 | 6 |
| 4 | Accept | 6.1839 | 1.443 | 3.2914 | 3.2915 | 80 | 0.0016871 | 1 |
| 5 | Best | 3.0209 | 0.37155 | 3.0209 | 3.0215 | 15 | 0.21498 | 20 |
| 6 | Accept | 3.3436 | 0.24824 | 3.0209 | 3.1751 | 10 | 0.18132 | 35 |
| 7 | Accept | 3.0408 | 0.2354 | 3.0209 | 3.1294 | 10 | 0.26912 | 9 |
| 8 | Best | 3.0013 | 0.23629 | 3.0013 | 3.0064 | 10 | 0.27408 | 1 |
| 9 | Accept | 3.1137 | 0.24717 | 3.0013 | 3.0875 | 10 | 0.96521 | 1 |
| 10 | Best | 2.8991 | 0.23315 | 2.8991 | 2.8975 | 10 | 0.37109 | 1 |
| 11 | Accept | 2.9411 | 0.61462 | 2.8991 | 2.9419 | 32 | 0.41343 | 1 |
| 12 | Accept | 2.9162 | 0.23312 | 2.8991 | 2.9315 | 10 | 0.43612 | 1 |
| 13 | Accept | 3.0499 | 0.27262 | 2.8991 | 2.929 | 10 | 0.50281 | 97 |
| 14 | Accept | 2.9242 | 0.8313 | 2.8991 | 2.9278 | 44 | 0.26539 | 1 |
| 15 | Accept | 2.9589 | 0.37909 | 2.8991 | 2.922 | 17 | 0.40547 | 1 |
| 16 | Accept | 2.9258 | 0.23128 | 2.8991 | 2.9201 | 10 | 0.42742 | 1 |
| 17 | Best | 2.8974 | 0.41066 | 2.8974 | 2.9014 | 21 | 0.36565 | 1 |
| 18 | Accept | 2.9338 | 0.48472 | 2.8974 | 2.9136 | 25 | 0.25784 | 1 |
| 19 | Accept | 3.164 | 1.102 | 2.8974 | 2.918 | 55 | 0.27673 | 59 |
| 20 | Accept | 6.1518 | 0.2488 | 2.8974 | 2.9103 | 10 | 0.014636 | 80 |
|====================================================================================================================|
| Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits |
| | result | log(1+loss) | runtime | (observed) | (estim.) | ycles | | |
|====================================================================================================================|
| 21 | Best | 2.8939 | 8.5673 | 2.8939 | 2.9256 | 498 | 0.077178 | 1 |
| 22 | Accept | 2.9104 | 2.36 | 2.8939 | 2.9197 | 134 | 0.13844 | 1 |
| 23 | Best | 2.8936 | 8.3336 | 2.8936 | 2.9225 | 500 | 0.11487 | 1 |
| 24 | Accept | 3.0152 | 0.24829 | 2.8936 | 2.9216 | 10 | 0.51579 | 5 |
| 25 | Accept | 2.8962 | 3.1036 | 2.8936 | 2.8963 | 182 | 0.11233 | 1 |
| 26 | Accept | 2.8957 | 7.2256 | 2.8936 | 2.8866 | 433 | 0.10021 | 1 |
| 27 | Accept | 3.2337 | 0.25752 | 2.8936 | 2.8892 | 10 | 0.90193 | 35 |
| 28 | Accept | 2.9297 | 0.36986 | 2.8936 | 2.8892 | 17 | 0.32229 | 1 |
| 29 | Accept | 2.922 | 0.85608 | 2.8936 | 2.8893 | 48 | 0.16526 | 1 |
| 30 | Accept | 2.9115 | 2.7497 | 2.8936 | 2.886 | 164 | 0.08927 | 1 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 61.7712 seconds
Total objective function evaluation time: 50.8034
Best observed feasible point:
NumLearningCycles LearnRate MaxNumSplits
_________________ _________ ____________
500 0.11487 1
Observed objective function value = 2.8936
Estimated objective function value = 2.8957
Function evaluation time = 8.3336
Best estimated feasible point (according to models):
NumLearningCycles LearnRate MaxNumSplits
_________________ _________ ____________
433 0.10021 1
Estimated objective function value = 2.886
Estimated function evaluation time = 7.2886

mdl =
RegressionEnsemble
PredictorNames: {'Cylinders' 'Displacement' 'Horsepower' 'Weight'}
ResponseName: 'MPG'
CategoricalPredictors: []
ResponseTransform: 'none'
NumObservations: 94
HyperparameterOptimizationResults: [1×1 BayesianOptimization]
NumTrained: 433
Method: 'LSBoost'
LearnerNames: {'Tree'}
ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
FitInfo: [433×1 double]
FitInfoDescription: {2×1 cell}
Regularization: []
Properties, Methods
入力引数
モデルを学習させるために使用する標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。Tbl には、応答変数用の追加の 1 列を含めることができます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Tblに応答変数が含まれている場合に他の変数をすべて予測子として使用するには、ResponseVarNameを使用して応答変数を指定します。Tblに応答変数が含まれている場合に他の変数の一部のみを予測子として使用するには、formulaを使用して式を指定します。Tblに応答変数が含まれていない場合は、Yを使用して応答データを指定します。応答変数の長さとTblの行数は、同じでなければなりません。
メモ
メモリと実行時間を節約するには、Tbl ではなく X と Y を指定します。
データ型: table
応答変数名。Tbl 内の応答変数の名前を指定します。
ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、Tbl.Y が応答変数である場合、ResponseVarName には 'Y' を指定します。それ以外の場合、fitrensemble は Tbl の列をすべて予測子変数として扱います。
データ型: 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
予測子データ。数値行列を指定します。
各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。
Y の長さと X の行数は等しくなければなりません。
予測子の名前を X に表示される順序で指定するには、PredictorNames 名前と値のペアの引数を使用します。
データ型: single | double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: 'NumLearningCycles',500,'Method','Bag','Learners',templateTree(),'CrossVal','on' は、10 分割の交差検証を使用して、500 本のバギング回帰木のアンサンブルを交差検証します。
メモ
交差検証の名前と値の引数は、名前と値の引数 OptimizeHyperparameters と一緒には使用できません。OptimizeHyperparameters の場合の交差検証は、名前と値の引数 HyperparameterOptimizationOptions を使用することのみによって変更できます。
一般的なアンサンブル オプション
アンサンブル集約法。'Method' と 'LSBoost' または 'Bag' から構成されるコンマ区切りのペアとして指定します。
| 値 | メソッド | メモ: |
|---|---|---|
'LSBoost' | 最小二乗ブースティング (LSBoost) | 縮小学習率は、名前と値のペアの引数 'LearnRate' を使用して指定できます。 |
'Bag' | bootstrap aggregation (バギング、ランダム フォレスト[2]など) | 既定では、fitrensemble は各分岐で無作為に予測子を選択するバギング (ランダム フォレスト) を使用します。無作為な選択を行わずにバギングを使用するには、'NumVariablesToSample' の値が 'all' である木学習器を使用します。 |
アンサンブル集約アルゴリズムの詳細と例については、アルゴリズム、アンサンブル アルゴリズムおよび適用するアンサンブル集約法の選択を参照してください。
例: 'Method','Bag'
アンサンブルで使用する弱学習器。'Learners' と 'tree'、木テンプレート オブジェクト、または木テンプレート オブジェクトの cell ベクトルから構成されるコンマ区切りのペアとして指定します。
'tree'(既定) —fitrensembleは、既定の回帰木学習器を使用します。これは、templateTree()を使用することと同じです。templateTree()の既定値は、'Method'の値に応じて変化します。バギングされた決定木の場合、決定分岐の最大数 (
'MaxNumSplits') はn–1です。nは観測値の個数です。各分岐で無作為に選択する予測子の個数 ('NumVariablesToSample') は、予測子の個数の 1/3 です。したがって、fitrensembleは深い決定木を成長させます。モデルの複雑さや計算時間の削減のために、より浅い木を成長させることもできます。ブースティングされた決定木の場合、
'MaxNumSplits'は 10、'NumVariablesToSample'は'all'です。したがって、fitrensembleは浅い決定木を成長させます。木を深くすると、精度を向上させることができます。
弱学習器の既定設定については、
templateTreeを参照してください。木テンプレート オブジェクト —
fitrensembleは、templateTreeが作成した木テンプレート オブジェクトを使用します。木学習器の設定を指定するには、templateTreeの名前と値のペアの引数を使用します。m 個の木テンプレート オブジェクトによる cell ベクトル —
fitrensembleは、各学習サイクルで m 個の回帰木を成長させます (NumLearningCyclesを参照)。たとえば、2 種類の回帰木から構成されるアンサンブルの場合、{t1 t2}を指定します。t1とt2は、templateTreeによって返される回帰木テンプレート オブジェクトです。
再現性がある結果を取得するには、'NumVariablesToSample' が 'all' でない場合、templateTree の名前と値のペアの引数 'Reproducible' を true として指定しなければなりません。
学習器の学習回数の詳細については、NumLearningCycles とヒントを参照してください。
例: 'Learners',templateTree('MaxNumSplits',5)
出力頻度。正の整数または "off" として指定します。
それまでに fitrensemble が "弱学習器" または "分割" に学習をさせた回数を追跡するには、正の整数を指定します。つまり、正の整数 m を指定した場合、次のようになります。
交差検証オプション (
CrossValなど) を指定していない場合、fitrensembleで m 個の弱学習器の学習が完了するたびに、コマンド ラインにメッセージが表示されます。交差検証オプションを指定した場合、
fitrensembleで m 個の分割の学習が完了するたびに、コマンド ラインにメッセージが表示されます。
"off" を指定した場合、fitrensemble で弱学習器の学習が完了してもメッセージは表示されません。
ヒント
一部のブースティングされた決定木の学習を最速にするには、NPrint を既定値の "off" に設定します。このヒントは、分類の Method が "AdaBoostM1"、"AdaBoostM2"、"GentleBoost"、または "LogitBoost" であるか、回帰の Method が "LSBoost" である場合に有効です。
例: NPrint=5
データ型: single | double | char | string
数値予測子のビンの個数。正の整数スカラーとして指定します。
NumBinsの値が空 (既定) である場合、fitrensembleはどの予測子もビン化しません。NumBinsの値として正の整数スカラー (numBins) を指定した場合、fitrensembleは最大numBins個の同確率のビンにすべての数値予測子をビン化し、元のデータではなくビンのインデックスに対して木が成長します。予測子に含まれる一意の値が
numBinsより少なければ、ビンの数をnumBinsより少なくすることができます。fitrensembleは、カテゴリカル予測子をビン化しません。
大規模な学習データ セットを使用する場合、このビン化オプションを使用すると学習を高速化できますが、精度が低下する可能性があります。はじめに "NumBins",50 を試してから、精度と学習速度に応じて値を変更できます。
学習済みのモデルでは、ビンのエッジは BinEdges プロパティに格納されます。
例: "NumBins",50
データ型: single | double
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
| 値 | 説明 |
|---|---|
| 正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
| logical ベクトル |
|
| 文字行列 | 行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
| 文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データが table (Tbl) の場合、fitrensemble は、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、fitrensemble はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。
例: 'CategoricalPredictors','all'
データ型: single | double | logical | char | string | cell
予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames の機能は、学習データの提供方法によって決まります。
XとYを指定した場合、PredictorNamesを使用してX内の予測子変数に名前を割り当てることができます。PredictorNames内の名前の順序は、Xの列の順序に一致しなければなりません。つまり、PredictorNames{1}はX(:,1)の名前、PredictorNames{2}はX(:,2)の名前であり、他も同様です。また、size(X,2)とnumel(PredictorNames)は等しくなければなりません。既定では
PredictorNamesは{'x1','x2',...}です。
Tblを指定する場合、PredictorNamesを使用して学習に使用する予測子変数を選択できます。つまり、fitrensembleは、学習中にPredictorNamesの予測子変数と応答変数のみを使用します。PredictorNamesはTbl.Properties.VariableNamesのサブセットでなければならず、応答変数の名前を含めることはできません。既定では、すべての予測子変数の名前が
PredictorNamesに格納されます。PredictorNamesとformulaの両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。
例: "PredictorNames",["SepalLength","SepalWidth","PetalLength","PetalWidth"]
データ型: string | cell
応答変数名。文字ベクトルまたは string スカラーとして指定します。
Yを指定した場合、ResponseNameを使用して応答変数の名前を指定できます。ResponseVarNameまたはformulaを指定した場合、ResponseNameを使用できません。
例: ResponseName="response"
データ型: char | string
生の応答値を変換するための関数。関数ハンドルまたは関数名として指定します。既定の設定は "none" です。これは @(y)y、つまり変換なしを表します。関数ハンドルは、ベクトル (元の応答値) を受け入れて同じサイズのベクトル (変換した応答値) を返さなければなりません。
例: myfunction = @(y)exp(y) を使用して、指数変換を入力ベクトルに適用する関数のハンドルを作成するとします。この場合、応答変換として ResponseTransform=myfunction を指定できます。
データ型: char | string | function_handle
並列オプション
並列計算と乱数設定のオプション。構造体として指定します。statset を使用して Options 構造体を作成します。
メモ
並列計算を行うには、Parallel Computing Toolbox™ が必要です。
次の表に、オプションのフィールドとその値を示します。
| フィールド名 | 値 | 既定の設定 |
|---|---|---|
UseParallel | 並列計算する場合は、この値を | false |
UseSubstreams | 再現可能な方法で計算を実行する場合は、この値を 再現性のある計算を行うには、 | false |
Streams | RandStream オブジェクトまたはそのようなオブジェクトの cell 配列としてこの値を指定します。UseParallel の値が true でなく、UseSubstreams の値も false でない場合、単一オブジェクトを使用します。この場合は、並列プールと同じサイズの cell 配列を使用します。 | Streams を指定しないと、fitrensemble には既定のストリームが使用されます。 |
再現性のある並列学習の使用例については、アンサンブル分類の並列学習を参照してください。
デュアルコア以上のシステムの場合、fitrensemble では Intel® スレッディング ビルディング ブロック (TBB) を使用して学習を並列化します。したがって、UseParallel オプションを true と指定しても、単一のコンピューターではそれほど大きな高速化の効果は得られないことがあります。Intel TBB の詳細については、https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.htmlを参照してください。
例: Options=statset(UseParallel=true)
データ型: struct
交差検証オプション
交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する 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
他の回帰のオプション
観測値の重み。'Weights' と、正の値の数値ベクトルまたは 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 の観測値数です。
ソフトウェアは、合計が 1 になるように Weights の値を正規化します。Inf の重みはサポートされません。
データ型: double | single | char | string
サンプリング オプション
すべての弱学習器についてリサンプリングされる学習セットの比率。(0,1] の正のスカラーとして指定します。'FResample' を使用するには、Resample を 'on' に設定します。
例: 'FResample',0.75
データ型: single | double
リサンプリングを示すフラグ。'Resample' と 'off' または 'on' から構成されるコンマ区切りのペアとして指定します。
Resample を使用してリサンプリングを指定する場合は、データ セット全体に対してのリサンプリングをお勧めします。つまり、FResample の既定設定である 1 を使用します。
LSBoost 法のオプション
縮小学習率。'LearnRate' と区間 (0,1] の数値スカラーから構成されるコンマ区切りのペアとして指定します。
縮小を使用してアンサンブルに学習をさせるには、LearnRate を 1 未満の値 (一般的な 0.1 など) に設定します。縮小を使用してアンサンブルに学習をさせると、学習反復数を増やす必要がありますが、多くの場合精度が向上します。
例: 'LearnRate',0.1
データ型: single | double
ハイパーパラメーター最適化オプション
最適化するパラメーター。'OptimizeHyperparameters' と次のいずれかから構成されるコンマ区切りのペアとして指定します。
'none'— 最適化を行いません。'auto'— 指定されたLearnersの既定パラメーターと共に{'Method','NumLearningCycles','LearnRate'}を使用します。Learners='tree'(既定) —{'MinLeafSize'}
メモ
ハイパーパラメーターの最適化の場合、
Learnersは string 配列や cell 配列ではなく単一の引数でなければなりません。'all'— すべての使用可能パラメーターを最適化します。使用可能パラメーター名の string 配列または cell 配列
optimizableVariableオブジェクトのベクトル。通常はhyperparametersの出力です。
最適化では、パラメーターを変化させることにより、fitrensemble の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値の引数 HyperparameterOptimizationOptions を使用します。HyperparameterOptimizationOptions を使用すると、ConstraintType オプションと ConstraintBounds オプションを設定することにより、交差検証損失の代わりに (コンパクトな) モデル サイズを最適化の目的として使用できます。
メモ
OptimizeHyperparameters の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、OptimizeHyperparameters を "auto" に設定すると、fitrensemble は "auto" オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。
fitrensemble では、以下のパラメーターを使用できます。
Method— 使用可能な方式は'Bag'または'LSBoost'です。NumLearningCycles—fitrensembleは、既定では範囲[10,500]の対数スケールで、正の整数を探索します。LearnRate—fitrensembleは、既定では範囲[1e-3,1]の対数スケールで、正の実数を探索します。MinLeafSize—fitrensembleは、範囲[1,max(2,floor(NumObservations/2))]の対数スケールで整数を探索します。MaxNumSplits—fitrensembleは、範囲[1,max(2,NumObservations-1)]の対数スケールで整数を探索します。NumVariablesToSample—fitrensembleは、範囲[1,max(2,NumPredictors)]の整数値を探索します。
既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable オブジェクトのベクトルを渡します。以下に例を示します。
load carsmall params = hyperparameters('fitrensemble',[Horsepower,Weight],MPG,'Tree'); params(4).Range = [1,20];
OptimizeHyperparameters の値として params を渡します。
既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、log(1 + cross-validation loss) です。反復表示を制御するには、名前と値の引数 HyperparameterOptimizationOptions の Verbose オプションを設定します。プロットを制御するには、名前と値の引数 HyperparameterOptimizationOptions の ShowPlots オプションを設定します。
たとえば、アンサンブル回帰の最適化を参照してください。
例: 'OptimizeHyperparameters',{'Method','NumLearningCycles','LearnRate','MinLeafSize','MaxNumSplits'}
最適化のオプション。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)
出力引数
学習済みのアンサンブル モデル。次の表のモデル オブジェクトのいずれかとして返されます。
| モデル オブジェクト | 交差検証オプションの指定 | Method の設定 | Resample の設定 |
|---|---|---|---|
RegressionBaggedEnsemble | なし | 'Bag' | 'on' |
RegressionEnsemble | なし | 'LSBoost' | 'off' |
RegressionPartitionedEnsemble | あり | 'LSBoost' または 'Bag' | 'off' または 'on' |
交差検証を制御する名前と値のペアの引数は CrossVal、Holdout、KFold、Leaveout および CVPartition です。
Mdl のプロパティを参照するには、ドット表記を使用します。たとえば、交差検証されていないアンサンブルについて弱学習器モデル オブジェクトの cell ベクトルのアクセスまたは表示を行うには、コマンド ラインで Mdl.Trained を入力します。
OptimizeHyperparameters を指定して HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションを設定している場合、Mdl はモデル オブジェクトの N 行 1 列の cell 配列になります。ここで、N は ConstraintBounds の行数と等しくなります。いずれの最適化問題からも実行可能なモデルが得られない場合、cell 配列の各値が [] になります。
複数の最適化問題についての最適化の結果の集計。AggregateBayesianOptimization オブジェクトとして返されます。AggregateOptimizationResults を返すには、OptimizeHyperparameters と HyperparameterOptimizationOptions を指定しなければなりません。HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この出力の生成方法を示す例については、Hyperparameter Optimization with Multiple Constraint Boundsを参照してください。
ヒント
NumLearningCyclesは数十から数千までさまざまな数になります。通常、予測力が高いアンサンブルでは数百から数千の弱学習器が必要です。しかし、このような多数のサイクルの学習をアンサンブルが一度に行う必要はありません。数十個の学習器の学習から開始してアンサンブルの性能を調査し、必要な場合はresumeを使用して弱学習器の数を増やすことができます。アンサンブルの性能は、アンサンブルの設定と弱学習器の設定によって決まります。つまり、既定のパラメーターを使用する弱学習器を指定すると、アンサンブルの性能が低下する可能性があります。このため、アンサンブルの設定と同じように、テンプレートを使用して弱学習器のパラメーターを調整し、汎化誤差が最小になる値を選択することをお勧めします。
Resampleを使用してリサンプリングを指定する場合は、データ セット全体に対してのリサンプリングをお勧めします。つまり、FResampleの既定設定である1を使用します。モデルに学習をさせた後で、新しいデータについて応答を予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。
アルゴリズム
アンサンブル集約アルゴリズムの詳細については、アンサンブル アルゴリズムを参照してください。
'Method','LSBoost'を指定した場合、既定では浅い決定木が成長します。木の深さは、templateTreeを使用して名前と値のペアの引数MaxNumSplits、MinLeafSizeおよびMinParentSizeを指定することにより調整できます。デュアルコア以上のシステムの場合、
fitrensembleでは Intel スレッディング ビルディング ブロック (TBB) を使用して学習を並列化します。Intel TBB の詳細については、https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.htmlを参照してください。
参照
[1] Breiman, L. “Bagging Predictors.” Machine Learning. Vol. 26, pp. 123–140, 1996.
[2] Breiman, L. “Random Forests.” Machine Learning. Vol. 45, pp. 5–32, 2001.
[3] Freund, Y. and R. E. Schapire. “A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting.” J. of Computer and System Sciences, Vol. 55, pp. 119–139, 1997.
[4] Friedman, J. “Greedy function approximation: A gradient boosting machine.” Annals of Statistics, Vol. 29, No. 5, pp. 1189–1232, 2001.
[5] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning section edition, Springer, New York, 2008.
拡張機能
fitrensemble は、名前と値の引数 'Options' を使用した並列学習をサポートします。オプションは、options = statset('UseParallel',true) のように、statset を使用して作成します。並列アンサンブル学習では、名前と値の引数 'Method' を 'Bag' に設定する必要があります。並列学習は 'Bag' の既定のタイプである木学習器にのみ使用できます。
ハイパーパラメーターの最適化を並列実行するには、fitrensemble 関数を呼び出すときに名前と値の引数 HyperparameterOptimizationOptions で UseParallel=true オプションを使用します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
使用上の注意および制限:
fitrensembleはバギングをサポートしません。名前と値の引数Methodは、"LSBoost"としてのみ指定できます。templateTreeを使用して学習器テンプレート オブジェクトまたは学習器テンプレート オブジェクトの cell ベクトルを作成する場合、名前と値の引数SurrogateおよびPredictorSelectionは、それぞれ"off"および"allsplits"としてのみ指定できます。templateTreeを使用する場合、カテゴリカル予測子を含むデータに対しては、名前と値の引数NumVariablesToSampleは"all"としてのみ指定できます。fitrensembleは、次の少なくとも 1 つに該当する場合に GPU でモデルを当てはめます。入力引数
XがgpuArrayオブジェクトである。入力引数
YがgpuArrayオブジェクトである。入力引数
TblにgpuArrayの予測子変数または応答変数が含まれている。
templateTreeを使用してMaxNumSplitsを指定した場合、fitrensembleは決定木が深くなると GPU でも CPU より高速に実行されない可能性があることに注意してください。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016b で導入HyperparameterOptimizationOptions に UseParallel=true が含まれている場合にソフトウェアで並列プールを開けないと、fitrensemble は既定で逐次計算を実行します。
以前のリリースでは、このような状況でソフトウェアからエラーが発行されます。
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)