fitcensemble
アンサンブル学習器を分類用に準備
構文
説明
は、100 本の分類木のブースティングの結果および予測子と応答データの table Mdl = fitcensemble(Tbl,ResponseVarName)Tbl が格納されている学習済みアンサンブル分類モデル オブジェクト (Mdl) を返します。ResponseVarName は、Tbl 内の応答変数の名前です。既定では、fitcensemble はバイナリ分類に LogitBoost を、マルチクラス分類に AdaBoostM2 を使用します。
は、1 つ以上の Mdl = fitcensemble(___,Name,Value)Name,Value ペア引数で指定される追加のオプションと、前の構文の入力引数のいずれかを使用します。たとえば、学習サイクル数、アンサンブル集約法、10 分割交差検証の実施を指定できます。
[ は、名前と値の引数 Mdl,AggregateOptimizationResults] = fitcensemble(___)OptimizeHyperparameters と HyperparameterOptimizationOptions が指定されている場合に、ハイパーパラメーターの最適化の結果が格納された AggregateOptimizationResults も返します。HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この構文を使用すると、交差検証損失ではなくコンパクトなモデル サイズに基づいて最適化したり、オプションは同じでも制約範囲は異なる複数の一連の最適化問題を実行したりできます。
例
データ内の使用可能な予測子変数をすべて使用して、予測アンサンブル分類を作成します。次に、予測子の数を減らして、別のアンサンブルに学習をさせます。これらのアンサンブルの標本内予測精度を比較します。
census1994 データ セットを読み込みます。
load census1994データ セット全体と既定のオプションを使用して、分類モデルのアンサンブルに学習をさせます。
Mdl1 = fitcensemble(adultdata,'salary')Mdl1 =
ClassificationEnsemble
PredictorNames: {'age' 'workClass' 'fnlwgt' 'education' 'education_num' 'marital_status' 'occupation' 'relationship' 'race' 'sex' 'capital_gain' 'capital_loss' 'hours_per_week' 'native_country'}
ResponseName: 'salary'
CategoricalPredictors: [2 4 6 7 8 9 10 14]
ClassNames: [<=50K >50K]
ScoreTransform: 'none'
NumObservations: 32561
NumTrained: 100
Method: 'LogitBoost'
LearnerNames: {'Tree'}
ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
FitInfo: [100×1 double]
FitInfoDescription: {2×1 cell}
Properties, Methods
Mdl は ClassificationEnsemble モデルです。Mdl には、次のような顕著な特徴があります。
データには 2 つのクラスがあるので、アンサンブル集約アルゴリズムは LogitBoost です。
アンサンブル集約法がブースティング アルゴリズムなので、最大 10 分割を許容する分類木がアンサンブルを構成します。
100 本の木がアンサンブルを構成します。
このアンサンブル分類を使用して、データから無作為に抽出した 5 つの観測値のラベルを予測します。予測されたラベルと真の値を比較します。
rng(1) % For reproducibility [pX,pIdx] = datasample(adultdata,5); label = predict(Mdl1,pX); table(label,adultdata.salary(pIdx),'VariableNames',{'Predicted','Truth'})
ans=5×2 table
Predicted Truth
_________ _____
<=50K <=50K
<=50K <=50K
<=50K <=50K
<=50K <=50K
<=50K <=50K
age と education のみを使用して、新しいアンサンブルに学習をさせます。
Mdl2 = fitcensemble(adultdata,'salary ~ age + education');Mdl1 と Mdl2 の再代入損失を比較します。
rsLoss1 = resubLoss(Mdl1)
rsLoss1 = 0.1058
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 0.2037
すべての予測子を使用するアンサンブルの方が、標本内誤分類率が小さくなります。
fitcensemble を使用して、ブースティング分類木のアンサンブルに学習をさせます。名前と値のペアの引数 'NumBins' を指定して数値予測子をビン化することにより、学習時間を短縮します。この引数は、fitcensemble が木学習器を使用する場合のみ有効です。学習後、学習済みモデルの BinEdges プロパティと関数discretizeを使用して、ビン化された予測子データを再現できます。
標本データ セットを生成します。
rng('default') % For reproducibility N = 1e6; X = [mvnrnd([-1 -1],eye(2),N); mvnrnd([1 1],eye(2),N)]; y = [zeros(N,1); ones(N,1)];
データ セットを可視化します。
figure scatter(X(1:N,1),X(1:N,2),'Marker','.','MarkerEdgeAlpha',0.01) hold on scatter(X(N+1:2*N,1),X(N+1:2*N,2),'Marker','.','MarkerEdgeAlpha',0.01)

適応ロジスティック回帰 (LogitBoost、バイナリ分類の既定) を使用して、ブースティング分類木のアンサンブルに学習をさせます。比較のため、関数の実行時間を測定します。
tic Mdl1 = fitcensemble(X,y); toc
Elapsed time is 478.988422 seconds.
名前と値のペアの引数 'NumBins' を使用して、学習を高速化します。'NumBins' の値として正の整数スカラーを指定した場合、指定した個数の同確率のビンにすべての数値予測子がビン化され、元のデータではなくビンのインデックスに対して木が成長します。カテゴリカル予測子はビン化されません。
tic
Mdl2 = fitcensemble(X,y,'NumBins',50);
tocElapsed time is 165.598434 seconds.
元のデータではなくビン化されたデータを使用すると、処理が約 3 倍高速になります。経過時間はオペレーティング システムによって変化する可能性があることに注意してください。
再代入による分類誤差を比較します。
rsLoss1 = resubLoss(Mdl1)
rsLoss1 = 0.0788
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 0.0788
この例では、予測子の値をビン化することにより、精度を失わずに学習時間が短縮されました。一般に、この例のような大規模な学習データ セットを使用する場合、ビン化オプションを使用すると学習を高速化できますが、精度が低下する可能性があります。さらに学習時間を短縮するには、指定するビンの個数を少なくします。
学習済みモデルの 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 になります。
ブースティング分類木のアンサンブルの汎化誤差を推定します。
ionosphere データ セットを読み込みます。
load ionosphereAdaBoostM1 と 10 分割の交差検証を使用して、分類木のアンサンブルを交差検証します。決定木テンプレートを使用して各木を最大 5 回分割するように指定します。
rng(5); % For reproducibility t = templateTree('MaxNumSplits',5); Mdl = fitcensemble(X,Y,'Method','AdaBoostM1','Learners',t,'CrossVal','on');
Mdl は ClassificationPartitionedEnsemble モデルです。
10 分割交差検証を行った累積誤分類率をプロットします。アンサンブルの推定汎化誤差を表示します。
kflc = kfoldLoss(Mdl,'Mode','cumulative'); figure; plot(kflc); ylabel('10-fold Misclassification rate'); xlabel('Learning cycle');

estGenError = kflc(end)
estGenError = 0.0769
既定の設定では、kfoldLoss は汎化誤差を返します。しかし、累積損失をプロットすると、アンサンブル内に弱学習器が蓄積するにつれて損失がどのように変化するかを観察できます。
このアンサンブルでは、約 50 個の弱学習器が蓄積した後の誤分類率が約 0.06 になっています。そして、弱学習器がさらにアンサンブルに加わると、誤分類率がわずかに増加しています。
アンサンブルの汎化誤差が満足できるものになった場合は、予測モデルを作成するため、交差検証以外の設定をすべて使用して、再度アンサンブルに学習をさせます。ただし、木あたりの決定分岐の最大数や学習サイクル数などのハイパーパラメーターを調整することをお勧めします。
fitcensemble を使用してハイパーパラメーターを自動的に最適化します。
ionosphere データ セットを読み込みます。
load ionosphere自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めることができます。
Mdl = fitcensemble(X,Y,'OptimizeHyperparameters','auto')
この例では、再現性を得るため、乱数シードを設定し、'expected-improvement-plus' の獲得関数を使用します。また、ランダム フォレスト アルゴリズムの再現性を得るため、木学習器について名前と値のペアの引数 'Reproducible' として true を指定します。
rng('default') t = templateTree('Reproducible',true); Mdl = fitcensemble(X,Y,'OptimizeHyperparameters','auto','Learners',t, ... 'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName','expected-improvement-plus'))
|===================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize | | | result | | runtime | (observed) | (estim.) | | ycles | | | |===================================================================================================================================| | 1 | Best | 0.10256 | 2.8201 | 0.10256 | 0.10256 | RUSBoost | 11 | 0.010199 | 17 | | 2 | Best | 0.082621 | 6.3089 | 0.082621 | 0.083414 | LogitBoost | 206 | 0.96537 | 33 | | 3 | Accept | 0.099715 | 4.0004 | 0.082621 | 0.082624 | AdaBoostM1 | 130 | 0.0072814 | 2 | | 4 | Best | 0.068376 | 1.5887 | 0.068376 | 0.068395 | Bag | 25 | - | 5 | | 5 | Best | 0.059829 | 1.7618 | 0.059829 | 0.062829 | LogitBoost | 58 | 0.19016 | 5 | | 6 | Accept | 0.068376 | 1.6662 | 0.059829 | 0.065561 | LogitBoost | 58 | 0.10005 | 5 | | 7 | Accept | 0.088319 | 13.07 | 0.059829 | 0.065786 | LogitBoost | 494 | 0.014474 | 3 | | 8 | Accept | 0.065527 | 0.79673 | 0.059829 | 0.065894 | LogitBoost | 26 | 0.75515 | 8 | | 9 | Accept | 0.15385 | 0.93354 | 0.059829 | 0.061156 | LogitBoost | 32 | 0.0010037 | 59 | | 10 | Accept | 0.059829 | 3.8828 | 0.059829 | 0.059731 | LogitBoost | 143 | 0.44428 | 1 | | 11 | Accept | 0.35897 | 2.3272 | 0.059829 | 0.059826 | Bag | 54 | - | 175 | | 12 | Accept | 0.068376 | 0.53634 | 0.059829 | 0.059825 | Bag | 10 | - | 1 | | 13 | Accept | 0.12251 | 9.5155 | 0.059829 | 0.059826 | AdaBoostM1 | 442 | 0.57897 | 102 | | 14 | Accept | 0.11966 | 4.9323 | 0.059829 | 0.059827 | RUSBoost | 95 | 0.80822 | 1 | | 15 | Accept | 0.062678 | 4.2429 | 0.059829 | 0.059826 | GentleBoost | 156 | 0.99502 | 1 | | 16 | Accept | 0.065527 | 3.0688 | 0.059829 | 0.059824 | GentleBoost | 115 | 0.99693 | 13 | | 17 | Best | 0.05698 | 1.659 | 0.05698 | 0.056997 | GentleBoost | 60 | 0.0010045 | 3 | | 18 | Accept | 0.13675 | 2.0647 | 0.05698 | 0.057002 | GentleBoost | 86 | 0.0010263 | 108 | | 19 | Accept | 0.062678 | 2.4037 | 0.05698 | 0.05703 | GentleBoost | 88 | 0.6344 | 4 | | 20 | Accept | 0.065527 | 1.029 | 0.05698 | 0.057228 | GentleBoost | 35 | 0.0010155 | 1 | |===================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize | | | result | | runtime | (observed) | (estim.) | | ycles | | | |===================================================================================================================================| | 21 | Accept | 0.079772 | 0.44308 | 0.05698 | 0.057214 | LogitBoost | 11 | 0.9796 | 2 | | 22 | Accept | 0.065527 | 21.191 | 0.05698 | 0.057523 | Bag | 499 | - | 1 | | 23 | Accept | 0.068376 | 20.294 | 0.05698 | 0.057671 | Bag | 494 | - | 2 | | 24 | Accept | 0.64103 | 1.2793 | 0.05698 | 0.057468 | RUSBoost | 30 | 0.088421 | 174 | | 25 | Accept | 0.088319 | 0.53606 | 0.05698 | 0.057456 | RUSBoost | 10 | 0.010292 | 5 | | 26 | Accept | 0.074074 | 0.36802 | 0.05698 | 0.05753 | AdaBoostM1 | 11 | 0.14192 | 13 | | 27 | Accept | 0.099715 | 12.133 | 0.05698 | 0.057646 | AdaBoostM1 | 498 | 0.0010096 | 6 | | 28 | Accept | 0.079772 | 10.877 | 0.05698 | 0.057886 | AdaBoostM1 | 474 | 0.030547 | 31 | | 29 | Accept | 0.068376 | 12.326 | 0.05698 | 0.061326 | GentleBoost | 493 | 0.36142 | 2 | | 30 | Accept | 0.065527 | 0.3945 | 0.05698 | 0.061165 | LogitBoost | 11 | 0.71408 | 16 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 165.9329 seconds
Total objective function evaluation time: 148.4504
Best observed feasible point:
Method NumLearningCycles LearnRate MinLeafSize
___________ _________________ _________ ___________
GentleBoost 60 0.0010045 3
Observed objective function value = 0.05698
Estimated objective function value = 0.061165
Function evaluation time = 1.659
Best estimated feasible point (according to models):
Method NumLearningCycles LearnRate MinLeafSize
___________ _________________ _________ ___________
GentleBoost 60 0.0010045 3
Estimated objective function value = 0.061165
Estimated function evaluation time = 1.6503
Mdl =
ClassificationEnsemble
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
NumObservations: 351
HyperparameterOptimizationResults: [1×1 BayesianOptimization]
NumTrained: 60
Method: 'GentleBoost'
LearnerNames: {'Tree'}
ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
FitInfo: [60×1 double]
FitInfoDescription: {2×1 cell}
Properties, Methods
最適化では、バイナリ分類のアンサンブル集約法、NumLearningCycles、適用可能な手法の LearnRate、および木学習器の MinLeafSize に対して探索を行いました。出力は、推定交差検証損失が最小になるアンサンブル分類器です。
十分な予測性能をもつブースティング分類木のアンサンブルを作成する方法の 1 つは、交差検証を使用して決定木の複雑度レベルを調整することです。最適な複雑度レベルを求めるときに、学習率を調整して学習サイクル数を最小化します。
この例では、交差検証オプション (名前と値のペアの引数 'KFold') と関数 kfoldLoss を使用して、最適なパラメーターを手動で求めます。あるいは、名前と値のペアの引数 'OptimizeHyperparameters' を使用して自動的にハイパーパラメーターを最適化することもできます。アンサンブル分類の最適化を参照してください。
ionosphere データ セットを読み込みます。
load ionosphere最適な木の複雑度レベルを求めるため、以下を行います。
一連のアンサンブルを交差検証します。以後のアンサンブルについて、決定株 (1 つの分割) から最大 n - 1 個の分割まで木の複雑度レベルを指数的に増やします。n は標本サイズです。また、各アンサンブル学習率を 0.1 から 1 までの間で変化させます。
各アンサンブルの交差検証済み誤分類率を推定します。
木の複雑度レベル () について、学習サイクル数に対してプロットすることにより、アンサンブルの交差検証済み累積誤分類率を比較します。同じ Figure に、各学習率に対応する別々の曲線をプロットします。
誤分類率が最小になる曲線を選択し、対応する学習サイクルおよび学習率に注目します。
深い分類木と切り株を交差検証します。これらの分類木は基準として機能します。
rng(1) % For reproducibility MdlDeep = fitctree(X,Y,'CrossVal','on','MergeLeaves','off', ... 'MinParentSize',1); MdlStump = fitctree(X,Y,'MaxNumSplits',1,'CrossVal','on');
5 分割の交差検証を使用して、150 本のブースティング分類木のアンサンブルを交差検証します。木のテンプレートを使用して、 という数列の値を使用して分割の最大数を変化させます。m は、 が n - 1 を超えない値です。各バリアントについて、{0.1, 0.25, 0.5, 1} という集合の各値を使用して、それぞれの学習率を調整します。
n = size(X,1); m = floor(log(n - 1)/log(3)); learnRate = [0.1 0.25 0.5 1]; numLR = numel(learnRate); maxNumSplits = 3.^(0:m); numMNS = numel(maxNumSplits); numTrees = 150; Mdl = cell(numMNS,numLR); for k = 1:numLR for j = 1:numMNS t = templateTree('MaxNumSplits',maxNumSplits(j)); Mdl{j,k} = fitcensemble(X,Y,'NumLearningCycles',numTrees,... 'Learners',t,'KFold',5,'LearnRate',learnRate(k)); end end
各アンサンブルについて、および基準として機能する分類木について、交差検証済み累積誤分類率を推定します。
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);
アンサンブル内の木の本数が増加すると交差検証済み誤分類率がどのように変化するかをプロットします。同じプロットに学習率ごとの曲線をプロットし、木の複雑度レベルを変えた別のプロットをそれぞれ作成します。木の複雑度レベルからプロット対象となるサブセットを選択します。
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 = [0 0.2]; xlabel('Number of trees') ylabel('Cross-validated misclass. rate') title(sprintf('MaxNumSplits = %0.3g', maxNumSplits(mnsPlot(k)))) hold off end hL = legend([cellstr(num2str(learnRate','Learning Rate = %0.2f')); ... 'Deep Tree';'Stump';'Min. misclass. rate']); hL.Position(1) = 0.6;

各曲線では、アンサンブルの最適な木の本数の位置で交差検証済み誤分類率が最小になります。
全体的に誤分類率が最小になる最大分割数、木の本数および学習率を特定します。
[minErr,minErrIdxLin] = min(error(:));
[idxNumTrees,idxMNS,idxLR] = ind2sub(size(error),minErrIdxLin);
fprintf('\nMin. misclass. rate = %0.5f',minErr)Min. misclass. rate = 0.05128
fprintf('\nOptimal Parameter Values:\nNum. Trees = %d',idxNumTrees);Optimal Parameter Values: Num. Trees = 130
fprintf('\nMaxNumSplits = %d\nLearning Rate = %0.2f\n',... maxNumSplits(idxMNS),learnRate(idxLR))
MaxNumSplits = 9 Learning Rate = 1.00
最適なハイパーパラメーターおよび学習セット全体に基づいて予測アンサンブルを作成します。
tFinal = templateTree('MaxNumSplits',maxNumSplits(idxMNS)); MdlFinal = fitcensemble(X,Y,'NumLearningCycles',idxNumTrees,... 'Learners',tFinal,'LearnRate',learnRate(idxLR))
MdlFinal =
ClassificationEnsemble
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
NumObservations: 351
NumTrained: 130
Method: 'LogitBoost'
LearnerNames: {'Tree'}
ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
FitInfo: [130×1 double]
FitInfoDescription: {2×1 cell}
Properties, Methods
MdlFinal は ClassificationEnsemble です。与えられた予測子データに対してレーダー反射が良好であるかどうかを予測するには、予測子データと MdlFinal を predict に渡すことができます。
交差検証オプション ('KFold') と関数 kfoldLoss を使用して最適な値を手動で求める代わりに、名前と値のペアの引数 'OptimizeHyperparameters' を使用できます。'OptimizeHyperparameters' を指定すると、ベイズ最適化を使用して、最適なパラメーターが自動的に求められます。'OptimizeHyperparameters' を使用して取得した最適な値は、手動で求めたものと異なる可能性があります。
mdl = fitcensemble(X,Y,'OptimizeHyperparameters',{'NumLearningCycles','LearnRate','MaxNumSplits'})
|====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits | | | result | | runtime | (observed) | (estim.) | ycles | | | |====================================================================================================================| | 1 | Best | 0.094017 | 3.7194 | 0.094017 | 0.094017 | 137 | 0.001364 | 3 | | 2 | Accept | 0.12251 | 0.66511 | 0.094017 | 0.095735 | 15 | 0.013089 | 144 |
| 3 | Best | 0.065527 | 0.90035 | 0.065527 | 0.067815 | 31 | 0.47201 | 2 | | 4 | Accept | 0.19943 | 8.6107 | 0.065527 | 0.070015 | 340 | 0.92167 | 7 | | 5 | Accept | 0.071225 | 0.90081 | 0.065527 | 0.065583 | 32 | 0.14422 | 2 | | 6 | Accept | 0.099715 | 0.688 | 0.065527 | 0.065573 | 23 | 0.0010566 | 2 | | 7 | Accept | 0.11681 | 0.90799 | 0.065527 | 0.065565 | 28 | 0.0010156 | 259 | | 8 | Accept | 0.17379 | 0.82143 | 0.065527 | 0.065559 | 29 | 0.0013435 | 1 | | 9 | Best | 0.059829 | 0.59677 | 0.059829 | 0.059844 | 18 | 0.87865 | 3 | | 10 | Accept | 0.11111 | 0.40132 | 0.059829 | 0.059843 | 10 | 0.0012112 | 48 | | 11 | Accept | 0.08547 | 0.41121 | 0.059829 | 0.059842 | 10 | 0.62108 | 25 | | 12 | Accept | 0.11681 | 0.41538 | 0.059829 | 0.059841 | 10 | 0.0012154 | 20 | | 13 | Accept | 0.082621 | 0.46504 | 0.059829 | 0.059842 | 10 | 0.55351 | 35 | | 14 | Accept | 0.079772 | 0.46297 | 0.059829 | 0.05984 | 11 | 0.74109 | 74 | | 15 | Accept | 0.088319 | 0.69297 | 0.059829 | 0.05984 | 19 | 0.91106 | 347 | | 16 | Accept | 0.062678 | 0.3637 | 0.059829 | 0.059886 | 10 | 0.97239 | 3 | | 17 | Accept | 0.065527 | 1.9404 | 0.059829 | 0.059887 | 78 | 0.97069 | 3 | | 18 | Accept | 0.065527 | 0.39816 | 0.059829 | 0.062228 | 11 | 0.75051 | 2 | | 19 | Best | 0.054131 | 0.36381 | 0.054131 | 0.059083 | 10 | 0.69072 | 3 | | 20 | Accept | 0.065527 | 0.38429 | 0.054131 | 0.060938 | 10 | 0.64403 | 3 | |====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits | | | result | | runtime | (observed) | (estim.) | ycles | | | |====================================================================================================================| | 21 | Accept | 0.079772 | 0.40405 | 0.054131 | 0.060161 | 10 | 0.80548 | 13 | | 22 | Accept | 0.05698 | 0.37983 | 0.054131 | 0.059658 | 10 | 0.56949 | 5 | | 23 | Accept | 0.10826 | 0.36128 | 0.054131 | 0.059244 | 10 | 0.0055133 | 5 | | 24 | Accept | 0.074074 | 0.38056 | 0.054131 | 0.05933 | 10 | 0.92056 | 6 | | 25 | Accept | 0.11966 | 0.35336 | 0.054131 | 0.059132 | 10 | 0.27254 | 1 | | 26 | Accept | 0.065527 | 0.77041 | 0.054131 | 0.059859 | 26 | 0.97412 | 3 | | 27 | Accept | 0.068376 | 0.38116 | 0.054131 | 0.060205 | 10 | 0.82146 | 4 | | 28 | Accept | 0.062678 | 0.47015 | 0.054131 | 0.060713 | 14 | 0.99445 | 3 | | 29 | Accept | 0.11966 | 0.41033 | 0.054131 | 0.060826 | 10 | 0.0012621 | 344 | | 30 | Accept | 0.08547 | 0.45352 | 0.054131 | 0.060771 | 10 | 0.93676 | 187 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 41.5854 seconds
Total objective function evaluation time: 28.4744
Best observed feasible point:
NumLearningCycles LearnRate MaxNumSplits
_________________ _________ ____________
10 0.69072 3
Observed objective function value = 0.054131
Estimated objective function value = 0.061741
Function evaluation time = 0.36381
Best estimated feasible point (according to models):
NumLearningCycles LearnRate MaxNumSplits
_________________ _________ ____________
14 0.99445 3
Estimated objective function value = 0.060771
Estimated function evaluation time = 0.48009
mdl =
ClassificationEnsemble
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
NumObservations: 351
HyperparameterOptimizationResults: [1×1 BayesianOptimization]
NumTrained: 14
Method: 'LogitBoost'
LearnerNames: {'Tree'}
ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
FitInfo: [14×1 double]
FitInfoDescription: {2×1 cell}
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' を指定します。それ以外の場合、fitcensemble は Tbl の列をすべて予測子変数として扱います。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
分類の場合、名前と値のペアの引数 ClassNames を使用してクラスの順序を指定できます。それ以外の場合、fitcensemble がクラスの順序を決定して Mdl.ClassNames に格納します。
データ型: char | string
応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3" という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Y は応答変数を、x1、x2 および x3 は予測子変数を表します。
モデルに学習をさせるための予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。
式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。
データ型: char | string
予測子データ。数値行列を指定します。
各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。
Y の長さと X の行数は等しくなければなりません。
予測子の名前を X に表示される順序で指定するには、PredictorNames 名前と値のペアの引数を使用します。
データ型: single | double
応答データ。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y の各エントリは、X または Tbl の対応する行の観測値に対する応答またはラベルです。Y の長さと X または Tbl の行数は、同じでなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
名前と値のペアの引数 ClassNames を使用してクラスの順序を指定できます。それ以外の場合、fitcensemble がクラスの順序を決定して Mdl.ClassNames に格納します。
データ型: categorical | char | string | logical | single | double | cell
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: 'CrossVal','on','LearnRate',0.05 は、10 分割交差検証を実施し、学習率として 0.05 を使用するよう指定します。
メモ
交差検証の名前と値の引数は、名前と値の引数 OptimizeHyperparameters と一緒には使用できません。OptimizeHyperparameters の場合の交差検証は、名前と値の引数 HyperparameterOptimizationOptions を使用することのみによって変更できます。
一般的なアンサンブル オプション
アンサンブル集約法。'Method' と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。
| 値 | メソッド | 分類問題のサポート | 関連する名前と値のペアの引数 |
|---|---|---|---|
'Bag' | bootstrap aggregation (バギング、ランダム フォレスト[2]など) — 'Method' が 'Bag' である場合、fitcensemble はバギングを使用し、既定では各分岐で無作為に予測子を選択します。無作為な選択を行わずにバギングを使用するには、'NumVariablesToSample' の値が 'all' である木学習器を使用するか、判別分析学習器を使用します。 | バイナリおよびマルチクラス | 該当なし |
'Subspace' | ランダム部分空間 | バイナリおよびマルチクラス | NPredToSample |
'AdaBoostM1' | 適応ブースティング | バイナリのみ | LearnRate |
'AdaBoostM2' | 適応ブースティング | マルチクラスのみ | LearnRate |
'GentleBoost' | ジェントル適応ブースティング | バイナリのみ | LearnRate |
'LogitBoost' | 適応ロジスティック回帰 | バイナリのみ | LearnRate |
'LPBoost' | 線形計画ブースティング — Optimization Toolbox™ が必要 | バイナリおよびマルチクラス | MarginPrecision |
'RobustBoost' | ロバスト ブースティング — Optimization Toolbox が必要 | バイナリのみ | RobustErrorGoal, RobustMarginSigma, RobustMaxMargin |
'RUSBoost' | ランダム アンダーサンプリング ブースティング | バイナリおよびマルチクラス | LearnRate, RatioToSmallest |
'TotalBoost' | 完全補正ブースティング — Optimization Toolbox が必要 | バイナリおよびマルチクラス | MarginPrecision |
バギング ('Bag') またはブースティング ('TotalBoost'、'RUSBoost'、'AdaBoostM1'、'AdaBoostM2'、'GentleBoost'、'LogitBoost'、'RobustBoost' または 'LPBoost') を使用する場合、学習データのサンプリング オプション (FResample、Replace、Resample) を指定できます。
既定値は以下のとおりです。
木学習器のみが
'Learners'に含まれている場合、バイナリ問題では'LogitBoost'、マルチクラス問題では'AdaBoostM2'木学習器と判別分析学習器の両方が
'Learners'に含まれている場合、バイナリ問題では'AdaBoostM1'、マルチクラス問題では'AdaBoostM2'木学習器が
'Learners'に含まれていない場合、'Subspace'
アンサンブル集約アルゴリズムの詳細と例については、アルゴリズム、ヒント、アンサンブル アルゴリズムおよび適用するアンサンブル集約法の選択を参照してください。
例: 'Method','Bag'
アンサンブル学習のサイクル数。'NumLearningCycles' と正の整数または 'AllPredictorCombinations' から構成されるコンマ区切りのペアとして指定します。
正の整数を指定した場合、すべての学習サイクルで、1 つの弱学習器が
Learners内のすべてのテンプレート オブジェクトについて学習します。この結果、延べNumLearningCycles*numel(Learners)個の学習器が学習を行います。'AllPredictorCombinations'を指定する場合は、Methodを'Subspace'に設定し、Learnersに対して 1 つの学習器のみを指定します。このように設定すると、予測子が一度にNPredToSample個抽出され、その可能な組み合わせすべてに対して学習器が学習を行います。この結果、nchoosek(size(X,2),NPredToSample)個の学習器が学習を行います。
アンサンブルはすべての学習済み学習器を使用して構成され、Mdl.Trained に格納されます。
詳細は、ヒントを参照してください。
例: 'NumLearningCycles',500
データ型: single | double | char | string
アンサンブルで使用する弱学習器。'Learners' と弱学習器の名前、弱学習器テンプレート オブジェクト、または弱学習器テンプレート オブジェクトの cell ベクトルから構成されるコンマ区切りのペアとして指定します。
| 弱学習器 | 弱学習器の名前 | テンプレート オブジェクト作成関数 | Method の設定 |
|---|---|---|---|
| 判別分析 | 'discriminant' | templateDiscriminant | 'Subspace' を推奨 |
| k 最近傍 | 'knn' | templateKNN | 'Subspace' のみ |
| 決定木 | 'tree' | templateTree | 'Subspace' を除くすべての手法 |
弱学習器の名前 (
'discriminant'、'knn'または'tree') —fitcensembleは、テンプレート オブジェクト作成関数が既定の設定で作成した弱学習器を使用します。たとえば、'Learners','discriminant'という指定は'Learners',templateDiscriminant()という指定と同じです。弱学習器の既定設定については、テンプレート オブジェクト作成関数のページを参照してください。弱学習器テンプレート オブジェクト —
fitcensembleは、テンプレート オブジェクト作成関数が作成した弱学習器を使用します。テンプレート オブジェクト作成関数の名前と値のペアの引数を使用して、弱学習器の設定を指定します。m 個の弱学習器テンプレート オブジェクトによる cell ベクトル —
fitcensembleは、各学習サイクルで m 個の学習器を成長させます (NumLearningCyclesを参照)。たとえば、2 種類の分類木から構成されるアンサンブルの場合、{t1 t2}を指定します。t1とt2は、templateTreeによって返される分類木テンプレート オブジェクトです。
'Method' が 'Subspace' である場合、'Learners' の既定値は 'knn' です。
'Method' が 'Bag' またはいずれかのブースティング法である場合、'Learners' の既定値は 'tree' です。templateTree() の既定値は、'Method' の値に応じて変化します。
バギングされた決定木の場合、決定分岐の最大数 (
'MaxNumSplits') はn–1です。nは観測値の個数です。各分岐で無作為に選択する予測子の個数 ('NumVariablesToSample') は、予測子の個数の平方根です。したがって、fitcensembleは深い決定木を成長させます。モデルの複雑さや計算時間の削減のために、より浅い木を成長させることもできます。ブースティングされた決定木の場合、
'MaxNumSplits'は 10、'NumVariablesToSample'は'all'です。したがって、fitcensembleは浅い決定木を成長させます。木を深くすると、精度を向上させることができます。
弱学習器の既定設定については、templateTree を参照してください。再現性がある結果を取得するには、'NumVariablesToSample' が 'all' でない場合、templateTree の名前と値のペアの引数 'Reproducible' を true として指定しなければなりません。
学習器の学習回数の詳細については、NumLearningCycles とヒントを参照してください。
例: 'Learners',templateTree('MaxNumSplits',5)
出力頻度。正の整数または "off" として指定します。
それまでに fitcensemble が "弱学習器" または "分割" に学習をさせた回数を追跡するには、正の整数を指定します。つまり、正の整数 m を指定した場合、次のようになります。
交差検証オプション (
CrossValなど) を指定していない場合、fitcensembleで m 個の弱学習器の学習が完了するたびに、コマンド ラインにメッセージが表示されます。交差検証オプションを指定した場合、
fitcensembleで m 個の分割の学習が完了するたびに、コマンド ラインにメッセージが表示されます。
"off" を指定した場合、fitcensemble で弱学習器の学習が完了してもメッセージは表示されません。
ヒント
一部のブースティングされた決定木の学習を最速にするには、NPrint を既定値の "off" に設定します。このヒントは、分類の Method が "AdaBoostM1"、"AdaBoostM2"、"GentleBoost"、または "LogitBoost" であるか、回帰の Method が "LSBoost" である場合に有効です。
例: NPrint=5
データ型: single | double | char | string
数値予測子のビンの個数。正の整数スカラーとして指定します。この引数は、fitcensemble が木学習器を使用する場合、つまり、Learners が "tree" であるか、templateTree を使用して作成したテンプレート オブジェクトである場合のみ有効です。
NumBinsの値が空 (既定) である場合、fitcensembleはどの予測子もビン化しません。NumBinsの値として正の整数スカラー (numBins) を指定した場合、fitcensembleは最大numBins個の同確率のビンにすべての数値予測子をビン化し、元のデータではなくビンのインデックスに対して木が成長します。予測子に含まれる一意の値が
numBinsより少なければ、ビンの数をnumBinsより少なくすることができます。fitcensembleは、カテゴリカル予測子をビン化しません。
大規模な学習データ セットを使用する場合、このビン化オプションを使用すると学習を高速化できますが、精度が低下する可能性があります。はじめに "NumBins",50 を試してから、精度と学習速度に応じて値を変更できます。
学習済みのモデルでは、ビンのエッジは BinEdges プロパティに格納されます。
例: "NumBins",50
データ型: single | double
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
| 値 | 説明 |
|---|---|
| 正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
| logical ベクトル |
|
| 文字行列 | 行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
| 文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
'CategoricalPredictors' の仕様は以下の場合適切です。
'Learners'は木学習器を指定します。'Learners'は、すべての予測子がカテゴリカルである k 最近傍学習器を指定します。
各学習器は、学習器に対応する近似関数と同じ方法でカテゴリカル予測子を特定して処理します。k 最近傍学習器については fitcknn の 'CategoricalPredictors' を、木学習器については fitctree の '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を使用して学習に使用する予測子変数を選択できます。つまり、fitcensembleは、学習中に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
並列オプション
並列計算と乱数設定のオプション。構造体として指定します。statset を使用して Options 構造体を作成します。
メモ
並列計算を行うには、Parallel Computing Toolbox™ が必要です。
次の表に、オプションのフィールドとその値を示します。
| フィールド名 | 値 | 既定の設定 |
|---|---|---|
UseParallel | 並列計算する場合は、この値を | false |
UseSubstreams | 再現可能な方法で計算を実行する場合は、この値を 再現性のある計算を行うには、 | false |
Streams | RandStream オブジェクトまたはそのようなオブジェクトの cell 配列としてこの値を指定します。UseParallel の値が true でなく、UseSubstreams の値も false でない場合、単一オブジェクトを使用します。この場合は、並列プールと同じサイズの cell 配列を使用します。 | Streams を指定しないと、fitcensemble には既定のストリームが使用されます。 |
再現性のある並列学習の使用例については、アンサンブル分類の並列学習を参照してください。
デュアルコア以上のシステムの場合、fitcensemble では 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
その他の分類オプション
学習に使用するクラスの名前。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' と正方行列または構造体から構成されるコンマ区切りペアとして指定します。指定する項目によって、内容は次のように変わります。
正方行列
Costの場合、Cost(i,j)は真のクラスがiである点をクラスjに分類するコストです。つまり、行は真のクラスに、列は予測するクラスに対応します。Costの対応する行と列についてクラスの順序を指定するには、名前と値のペアの引数ClassNamesも指定します。構造体
Sの場合、次の 2 つのフィールドが必要となります。S.ClassNames:Yと同じデータ型のクラス名を表す変数を含む。S.ClassificationCosts。行と列の順序がS.ClassNamesと同じコスト行列。
既定値は ones( です。K) - eye(K)K は異なるクラスの数です。
fitcensemble は Cost を使用して、Prior で指定されたクラスの事前確率を調整します。その後、fitcensemble は調整した事前確率を学習に使用します。
例: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]
データ型: double | single | struct
各クラスの事前確率。'Prior' と次の表の値から構成されるコンマ区切りのペアとして指定します。
| 値 | 説明 |
|---|---|
'empirical' | クラスの事前確率は、Y のクラスの相対的頻度です。 |
'uniform' | クラスの事前確率はいずれも 1/K (K はクラス数) となります。 |
| 数値ベクトル | 各要素はクラスの事前確率です。Mdl.ClassNames に従って要素を並べ替えるか、ClassNames 名前と値のペアの引数を使用して順序を指定します。要素は合計が 1 になるように正規化されます。 |
| 構造体配列 | 構造体
|
fitcensemble は、合計が 1 になるように Prior の事前確率を正規化します。
例: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)
データ型: char | string | double | single | struct
スコア変換。文字ベクトル、string スカラー、または関数ハンドルとして指定します。
次の表は、使用可能な文字ベクトルおよび string スカラーをまとめています。
| 値 | 説明 |
|---|---|
"doublelogit" | 1/(1 + e–2x) |
"invlogit" | log(x / (1 – x)) |
"ismax" | 最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する |
"logit" | 1/(1 + e–x) |
"none" または "identity" | x (変換なし) |
"sign" | x < 0 のとき –1 x = 0 のとき 0 x > 0 のとき 1 |
"symmetric" | 2x – 1 |
"symmetricismax" | 最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する |
"symmetriclogit" | 2/(1 + e–x) – 1 |
MATLAB 関数またはユーザー定義関数の場合は、スコア変換用の関数ハンドルを使用します。関数ハンドルは、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。
例: ScoreTransform="logit"
データ型: char | string | function_handle
観測値の重み。正の値の数値ベクトルまたは Tbl 内の変数の名前として指定します。X または Tbl の各行に含まれている観測値は、Weights の対応する値で重み付けされます。Weights のサイズは、X または Tbl の行数と等しくなければなりません。
入力データを table Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトル W が Tbl.W として格納されている場合、"W" として指定します。それ以外の場合、モデルに学習をさせるときに、Tbl の列は W を含めてすべて予測子または応答として扱われます。
既定の設定では、Weights は ones( です。n,1)n は X または Tbl の観測値数です。
合計が各クラスの事前確率の値と等しくなるように Weights が正規化されます。Inf の重みはサポートされません。
データ型: double | single | char | string
ブースティング法およびバギングのサンプリング オプション
すべての弱学習器についてリサンプリングされる学習セットの比率。(0,1] の正のスカラーとして指定します。'FResample' を使用するには、Resample を 'on' に設定します。
例: 'FResample',0.75
データ型: single | double
リサンプリングを示すフラグ。'Resample' と 'off' または 'on' から構成されるコンマ区切りのペアとして指定します。
Resample を使用してリサンプリングを指定する場合は、データ セット全体に対してのリサンプリングをお勧めします。つまり、FResample の既定設定である 1 を使用します。
AdaBoostM1、AdaBoostM2、LogitBoost および GentleBoost 法のオプション
縮小学習率。'LearnRate' と区間 (0,1] の数値スカラーから構成されるコンマ区切りのペアとして指定します。
縮小を使用してアンサンブルに学習をさせるには、LearnRate を 1 未満の値 (一般的な 0.1 など) に設定します。縮小を使用してアンサンブルに学習をさせると、学習反復数を増やす必要がありますが、多くの場合精度が向上します。
例: 'LearnRate',0.1
データ型: single | double
RUSBoost 法のオプション
縮小学習率。'LearnRate' と区間 (0,1] の数値スカラーから構成されるコンマ区切りのペアとして指定します。
縮小を使用してアンサンブルに学習をさせるには、LearnRate を 1 未満の値 (一般的な 0.1 など) に設定します。縮小を使用してアンサンブルに学習をさせると、学習反復数を増やす必要がありますが、多くの場合精度が向上します。
例: 'LearnRate',0.1
データ型: single | double
最小相当クラスについてのサンプリング比率。'RatioToSmallest' と数値スカラー、または学習データ内の異なるクラス数と同じ長さをもつ正の値の数値ベクトルから構成されるコンマ区切りのペアとして指定します。
学習データに K 個のクラスがあり、最小相当クラスには m 個の観測値があるとします。
正の数値スカラー
sを指定した場合、fitcensembleは個の観測値を各クラスから抽出します。つまり、各クラスでサンプリングの比率が同じになります。詳細は、アルゴリズムを参照してください。s*m数値ベクトル
[を指定した場合、s1,s2,...,sK]fitcensembleは個の観測値をクラスsi*mi(i= 1,...,K) から抽出します。RatioToSmallestの要素は、ClassNamesを使用して指定されるクラス名に同じ順序で対応します (ヒントを参照)。
既定値は ones( で、K,1)m 個の観測値を各クラスから抽出するよう指定します。
例: 'RatioToSmallest',[2,1]
データ型: single | double
LPBoost および TotalBoost 法のオプション
収束速度を制御するマージン精度。'MarginPrecision' と区間 [0,1] の数値スカラーから構成されるコンマ区切りのペアとして指定します。MarginPrecision は、収束に必要なブースティング反復回数に影響を与えます。
ヒント
多数の学習器を使用してアンサンブルに学習をさせるには、MarginPrecision に小さい値を指定します。少数の学習器を使用して学習をさせる場合は、大きい値を指定します。
例: 'MarginPrecision',0.5
データ型: single | double
RobustBoost 法のオプション
目標分類誤差。'RobustErrorGoal' と非負の数値スカラーから構成されるコンマ区切りのペアとして指定します。可能な値の上限は、RobustMarginSigma および RobustMaxMargin の値によって決まります。ただし、上限が 1 を超えることはできません。
ヒント
通常は、特定の学習セットについて RobustErrorGoal の最適な範囲が存在します。小さすぎる値または大きすぎる値を設定した場合、分類精度が低いモデルが生成される可能性があります。適切な値を求めるには、交差検証を試してください。
例: 'RobustErrorGoal',0.05
データ型: single | double
学習データに対する分類マージンの分布の広がり。'RobustMarginSigma' と正の数値スカラーから構成されるコンマ区切りのペアとして指定します。RobustMarginSigma を指定する前に、RobustBoost に関する文献 ([3]など) を調べてください。
例: 'RobustMarginSigma',0.5
データ型: single | double
学習データの最大分類マージン。'RobustMaxMargin' と非負の数値スカラーから構成されるコンマ区切りのペアとして指定します。分類マージンが RobustMaxMargin 未満になるように学習データ内の観測値数が最小化されます。
例: 'RobustMaxMargin',1
データ型: single | double
ランダム部分空間法のオプション
各ランダム部分空間学習器についてサンプリングする予測子の個数。'NPredToSample' と区間 1,...,p の正の整数から構成されるコンマ区切りのペアとして指定します。p は予測子変数の個数 (size(X,2) または size(Tbl,2)) です。
データ型: single | double
ハイパーパラメーター最適化オプション
最適化するパラメーター。'OptimizeHyperparameters' と次のいずれかから構成されるコンマ区切りのペアとして指定します。
'none'— 最適化を行いません。'auto'— 指定されたLearnersの既定パラメーターと共に{'Method','NumLearningCycles','LearnRate'}を使用します。Learners='tree'(既定) —{'MinLeafSize'}Learners='discriminant'—{'Delta','Gamma'}Learners='knn'—{'Distance','NumNeighbors','Standardize'}
メモ
ハイパーパラメーターの最適化の場合、
Learnersは string 配列や cell 配列ではなく単一の引数でなければなりません。'all'— すべての使用可能パラメーターを最適化します。使用可能パラメーター名の string 配列または cell 配列
optimizableVariableオブジェクトのベクトル。通常はhyperparametersの出力です。
最適化では、パラメーターを変化させることにより、fitcensemble の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値の引数 HyperparameterOptimizationOptions を使用します。HyperparameterOptimizationOptions を使用すると、ConstraintType オプションと ConstraintBounds オプションを設定することにより、交差検証損失の代わりに (コンパクトな) モデル サイズを最適化の目的として使用できます。
メモ
OptimizeHyperparameters の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、OptimizeHyperparameters を "auto" に設定すると、fitcensemble は "auto" オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。
fitcensemble では、以下のパラメーターを使用できます。
Method— クラスの個数によって異なります。2 つのクラス — 使用可能な方式は
'Bag'、'GentleBoost'、'LogitBoost'、'AdaBoostM1'および'RUSBoost'です。3 つ以上のクラス — 使用可能な方式は
'Bag'、'AdaBoostM2'および'RUSBoost'です。
NumLearningCycles—fitcensembleは、既定では範囲[10,500]の対数スケールで、正の整数を探索します。LearnRate—fitcensembleは、既定では範囲[1e-3,1]の対数スケールで、正の実数を探索します。選択した
Learnersについて、次のハイパーパラメーターを使用できます。学習器 使用可能ハイパーパラメーター
(太字は既定で使用)既定の範囲 'discriminant'Delta範囲 [1e-6,1e3]の対数スケールDiscrimType'linear'、'quadratic'、'diagLinear'、'diagQuadratic'、'pseudoLinear'および'pseudoQuadratic'Gamma[0,1]の実数値'knn'Distance'cityblock'、'chebychev'、'correlation'、'cosine'、'euclidean'、'hamming'、'jaccard'、'mahalanobis'、'minkowski'、'seuclidean'および'spearman'DistanceWeight'equal'、'inverse'および'squaredinverse'Exponent[0.5,3]の正の値NumNeighbors範囲 [1, max(2,round(NumObservations/2))]の対数スケールの正の整数値Standardize'true'および'false''tree'MaxNumSplits範囲 [1,max(2,NumObservations-1)]の対数スケールの整数MinLeafSize範囲 [1,max(2,floor(NumObservations/2))]の対数スケールの整数NumVariablesToSample範囲 [1,max(2,NumPredictors)]の整数SplitCriterion'gdi'、'deviance'および'twoing'または、選択した
Learnersと共にhyperparametersを使用します。optimizableVariableオブジェクトを作成するときに予測子データと応答を指定しなければならないことに注意してください。load fisheriris params = hyperparameters('fitcensemble',meas,species,'Tree');
使用可能な、または既定のハイパーパラメーターを調べるには、
paramsを確認します。
既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable オブジェクトのベクトルを渡します。以下に例を示します。
load fisheriris params = hyperparameters('fitcensemble',meas,species,'Tree'); params(4).Range = [1,30];
OptimizeHyperparameters の値として params を渡します。
既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は誤分類率です。反復表示を制御するには、名前と値の引数 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 の設定 |
|---|---|---|---|
ClassificationBaggedEnsemble | なし | 'Bag' | 'on' |
ClassificationEnsemble | なし | 分類用のアンサンブル集約法 | 'off' |
ClassificationPartitionedEnsemble | あり | 分類用のアンサンブル集約法 | '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を使用します。アンサンブル集約法 (
Method) が'bag'であり、誤分類コスト (
Cost) が非常に不均衡である場合、in-bag の標本について、ペナルティが大きいクラスから一意な観測値がオーバーサンプリングされます。クラスの事前確率 (
Prior) の歪みが大きい場合、事前確率が大きいクラスから一意な観測値がオーバーサンプリングされます。
これらの組み合わせにより、標本サイズが小さい場合、ペナルティまたは事前確率が大きいクラスから抽出される out-of-bag 観測値の相対頻度が低くなる可能性があります。この結果、out-of-bag の推定誤差の変動幅が非常に大きくなり、解釈が困難になる可能性があります。特に標本サイズが小さい場合に、out-of-bag の推定誤差の変動幅が大きくならないようにするには、
Costを使用して誤分類コスト行列をより平衡にするか、Priorを使用して事前確率ベクトルの歪みを小さくします。一部の入力引数および出力引数の順序は学習データ内の各クラスに対応するので、名前と値のペアの引数
ClassNamesを使用してクラスの順序を指定することをお勧めします。クラスの順序を簡単に求めるには、未分類の (つまり欠損ラベルがある) 観測値を学習データからすべて削除し、異なるクラスがすべて含まれている配列を取得および表示してから、その配列を
ClassNamesに指定します。たとえば、応答変数 (Y) がラベルの cell 配列であるとします。次のコードは、変数classNamesでクラスの順序を指定します。Ycat = categorical(Y); classNames = categories(Ycat)
categoricalは<undefined>を未分類観測値に割り当て、categoriesは<undefined>を出力から除外します。したがって、このコードをラベルの cell 配列に対して使用するか、同様のコードを categorical 配列に対して使用すると、欠損ラベルがある観測値を削除しなくても各クラスのリストを取得できます。最小相当ラベルから最大相当ラベルの順になるようにクラスの順序を指定するには、(前の項目のように) クラスの順序を簡単に調べ、リスト内のクラスの順序を頻度順に変更してから、リストを
ClassNamesに渡します。前の例に従うと、次のコードは最小相当から最大相当の順にクラスの順序をclassNamesLHで指定します。Ycat = categorical(Y); classNames = categories(Ycat); freq = countcats(Ycat); [~,idx] = sort(freq); classNamesLH = classNames(idx);
モデルに学習をさせた後で、新しいデータについてラベルを予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。
アルゴリズム
アンサンブル集約アルゴリズムの詳細については、アンサンブル アルゴリズムを参照してください。
Methodがブースティング アルゴリズム、Learnersが決定木になるように設定した場合、既定では浅い決定木が成長します。木の深さは、templateTreeを使用して名前と値のペアの引数MaxNumSplits、MinLeafSizeおよびMinParentSizeを指定することにより調整できます。名前と値の引数
Cost、Prior、およびWeightsを指定すると、出力モデル オブジェクトにCost、Prior、およびWの各プロパティの指定値がそれぞれ格納されます。Costプロパティには、ユーザー指定のコスト行列 (C) が変更なしで格納されます。PriorプロパティとWプロパティには、正規化後の事前確率と観測値の重みがそれぞれ格納されます。モデルの学習用に、事前確率と観測値の重みが更新されて、コスト行列で指定されているペナルティが組み込まれます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。バギング (
'Method','Bag') の場合、fitcensembleは、誤分類コストが大きいクラスをオーバーサンプリングし、誤分類コストが小さいクラスをアンダーサンプリングすることにより、in-bag の標本を生成します。その結果、out-of-bag の標本では、誤分類コストが大きいクラスの観測値は少なくなり、誤分類コストが小さいクラスの観測値は多くなります。小さいデータ セットと歪みが大きいコスト行列を使用してアンサンブル分類に学習をさせる場合、クラスあたりの out-of-bag 観測値の数が少なくなる可能性があります。このため、out-of-bag の推定誤差の変動幅が非常に大きくなり、解釈が困難になる可能性があります。事前確率が大きいクラスでも同じ現象が発生する場合があります。アンサンブル集約法 (
'Method','RUSBoost') が RUSBoost である場合、名前と値のペアの引数RatioToSmallestでは最小相当クラスに関して各クラスのサンプリングの比率を指定します。たとえば、学習データに A および B という 2 つのクラスがあるとします。A には 100 個の観測値、B には 10 個の観測値が含まれています。また、最小相当クラスではm個の観測値が学習データに含まれているとします。'RatioToSmallest',2を設定した場合、=s*m2*10=20になります。したがって、fitcensembleはクラス A の 20 個の観測値とクラス B の 20 個の観測値を使用して、すべての学習器に学習をさせます。'RatioToSmallest',[2 2]を設定した場合も同じ結果になります。'RatioToSmallest',[2,1]を設定した場合、=s1*m2*10=20および=s2*m1*10=10になります。したがって、fitcensembleはクラス A の 20 個の観測値とクラス B の 10 個の観測値を使用して、すべての学習器に学習をさせます。
デュアルコア以上のシステムの場合、
fitcensembleでは 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. “A more robust boosting algorithm.” arXiv:0905.2138v1, 2009.
[4] 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.
[5] Friedman, J. “Greedy function approximation: A gradient boosting machine.” Annals of Statistics, Vol. 29, No. 5, pp. 1189–1232, 2001.
[6] Friedman, J., T. Hastie, and R. Tibshirani. “Additive logistic regression: A statistical view of boosting.” Annals of Statistics, Vol. 28, No. 2, pp. 337–407, 2000.
[7] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning section edition, Springer, New York, 2008.
[8] Ho, T. K. “The random subspace method for constructing decision forests.” IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 20, No. 8, pp. 832–844, 1998.
[9] Schapire, R. E., Y. Freund, P. Bartlett, and W.S. Lee. “Boosting the margin: A new explanation for the effectiveness of voting methods.” Annals of Statistics, Vol. 26, No. 5, pp. 1651–1686, 1998.
[10] Seiffert, C., T. Khoshgoftaar, J. Hulse, and A. Napolitano. “RUSBoost: Improving classification performance when training data is skewed.” 19th International Conference on Pattern Recognition, pp. 1–4, 2008.
[11] Warmuth, M., J. Liao, and G. Ratsch. “Totally corrective boosting algorithms that maximize the margin.” Proc. 23rd Int’l. Conf. on Machine Learning, ACM, New York, pp. 1001–1008, 2006.
拡張機能
fitcensemble は、名前と値の引数 'Options' を使用した並列学習をサポートします。オプションは、options = statset('UseParallel',true) のように、statset を使用して作成します。並列アンサンブル学習では、名前と値の引数 'Method' を 'Bag' に設定する必要があります。並列学習は 'Bag' の既定のタイプである木学習器にのみ使用できます。
ハイパーパラメーターの最適化を並列実行するには、fitcensemble 関数を呼び出すときに名前と値の引数 HyperparameterOptimizationOptions で UseParallel=true オプションを使用します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
使用上の注意および制限:
fitcensembleは決定木学習器のみサポートします。名前と値の引数Learnersを指定できるのは、"tree"、学習器テンプレート オブジェクト、またはtemplateTreeによって作成された学習器テンプレート オブジェクトの cell ベクトルとしてのみです。templateTreeを使用する場合、名前と値の引数SurrogateおよびPredictorSelectionは、それぞれ"off"および"allsplits"としてのみ指定できます。名前と値の引数
Methodは、"AdaBoostM1"、"AdaBoostM2"、"GentleBoost"、"LogitBoost"、または"RUSBoost"としてのみ指定できます。名前と値の引数
NPredToSampleは指定できません。templateTreeを使用する場合、カテゴリカル予測子を含むデータに対しては以下が適用されます。マルチクラス分類の場合、
fitcensembleは最適な分類を見つけるためのアルゴリズムとしてOVAbyClassのみをサポートします。名前と値の引数
NumVariablesToSampleは、"all"としてのみ指定できます。
fitcensembleは、次のいずれかに該当する場合に GPU でモデルを当てはめます。入力引数
XがgpuArrayオブジェクトである。入力引数
TblにgpuArray予測子変数が含まれている。
templateTreeを使用してMaxNumSplitsを指定した場合、fitcensembleは決定木が深くなると GPU でも CPU より高速に実行されない可能性があることに注意してください。
バージョン履歴
R2016b で導入HyperparameterOptimizationOptions に UseParallel=true が含まれている場合にソフトウェアで並列プールを開けないと、fitcensemble は既定で逐次計算を実行します。
以前のリリースでは、このような状況でソフトウェアからエラーが発行されます。
R2023b 以降では、Learners の値として "knn" を指定し、OptimizeHyperparameters の値として "auto" を指定した場合、fitcensemble には最適化可能なハイパーパラメーターとして Standardize が含まれます。
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)