ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fitcensemble

アンサンブル学習器を分類用に準備

構文

Mdl = fitcensemble(Tbl,ResponseVarName)
Mdl = fitcensemble(Tbl,formula)
Mdl = fitcensemble(Tbl,Y)
Mdl = fitcensemble(X,Y)
Mdl = fitcensemble(___,Name,Value)

説明

Mdl = fitcensemble(Tbl,ResponseVarName) は、100 本の分類木のブースティングの結果および予測子と応答データのテーブル Tbl が格納されている学習済みアンサンブル分類モデル オブジェクト (Mdl) を返します。ResponseVarName は、Tbl 内の応答変数の名前です。既定では、fitcensemble はバイナリ分類に LogitBoost を、マルチクラス分類に AdaBoostM2 を使用します。

Mdl = fitcensemble(Tbl,formula) は、formula を適用して、モデルをテーブル Tbl 内の予測子および応答のデータにあてはめます。formula は、Mdl のあてはめに使用する応答および Tbl 内の予測子変数サブセットの説明モデルです。たとえば、'Y~X1+X2+X3' は応答変数 Tbl.Y を予測子変数 Tbl.X1Tbl.X2 および Tbl.X3 の関数としてあてはめます。

Mdl = fitcensemble(Tbl,Y) は、テーブル Tbl 内の変数をすべて予測子変数として扱います。Y は、Tbl に含まれていないクラス ラベルの配列です。

Mdl = fitcensemble(X,Y) は、行列 X 内の予測子データと Y 内のクラス ラベルの配列を使用します。

Mdl = fitcensemble(___,Name,Value) は、1 つ以上の Name,Value ペア引数で指定される追加のオプションと、前の構文の入力引数のいずれかを使用します。たとえば、学習サイクル数やアンサンブル集約法を指定したり、10 分割の交差検証を実施するように指定できます。

すべて折りたたむ

データ内の使用可能な予測子変数をすべて使用して、予測アンサンブル分類を作成します。次に、予測子の数を減らして、別のアンサンブルに学習をさせます。これらのアンサンブルの標本内予測精度を比較します。

census1994 データセットを読み込みます。

load census1994

データセット全体と既定のオプションを使用して、分類モデルのアンサンブルに学習をさせます。

Mdl1 = fitcensemble(adultdata,'salary')
Mdl1 = 
  classreg.learning.classif.ClassificationEnsemble
           PredictorNames: {1x14 cell}
             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: [100x1 double]
       FitInfoDescription: {2x1 cell}


  Properties, Methods

MdlClassificationEnsemble モデルです。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

ageeducation のみを使用して、新しいアンサンブルに学習をさせます。

Mdl2 = fitcensemble(adultdata,'salary ~ age + education');

Mdl1Mdl2 の再代入損失を比較します。

rsLoss1 = resubLoss(Mdl1)
rsLoss1 = 0.1070
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 0.2037

すべての予測子を使用するアンサンブルの方が、標本内誤分類率が小さくなります。

ブースティングされた分類木のアンサンブルの汎化誤差を推定します。

ionosphere データセットを読み込みます。

load ionosphere

AdaBoostM1 と 10 分割の交差検証を使用して、分類木のアンサンブルを交差検証します。決定木テンプレートを使用して各木を最大 5 回分割するように指定します。

rng(5); % For reproducibility
t = templateTree('MaxNumSplits',5);
Mdl = fitcensemble(X,Y,'Method','AdaBoostM1','Learners',t,'CrossVal','on');

MdlClassificationPartitionedEnsemble モデルです。

10 分割交差検証を行った累積誤分類率をプロットします。アンサンブルの推定汎化誤差を表示します。

kflc = kfoldLoss(Mdl,'Mode','cumulative');
figure;
plot(kflc);
ylabel('10-fold Misclassification rate');
xlabel('Learning cycle');

estGenError = kflc(end)
estGenError = 0.0712

既定の設定では、kfoldLoss は汎化誤差を返します。しかし、累積損失をプロットすると、アンサンブル内に弱学習器が蓄積するにつれて損失がどのように変化するかを観察できます。

このアンサンブルでは、約 50 個の弱学習器が蓄積した後の誤分類率が約 0.06 になっています。そして、弱学習器がさらにアンサンブルに加わると、誤分類率がわずかに増加しています。

アンサンブルの汎化誤差が満足できるものになった場合は、予測モデルを作成するため、交差検証以外の設定をすべて使用して、再度アンサンブルに学習をさせます。ただし、木あたりの決定分岐の最大数や学習サイクル数などのハイパーパラメーターを調整することをお勧めします。

この例では、fitcensemble を使用して自動的にハイパーパラメーターを最適化する方法を示します。この例では、ionosphere データを使用します。

データを読み込みます。

load ionosphere

自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めます。

再現性を得るために、乱数シードを設定し、'expected-improvement-plus' の獲得関数を使用します。

rng default
Mdl = fitcensemble(X,Y,'OptimizeHyperparameters','auto',...
    '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 |      6.9509 |     0.10256 |     0.10256 |     RUSBoost |           11 |     0.010199 |           17 |
|    2 | Best   |    0.062678 |      9.2751 |    0.062678 |    0.064264 |   LogitBoost |          206 |      0.96537 |           33 |
|    3 | Accept |    0.099715 |      8.7593 |    0.062678 |    0.062688 |   AdaBoostM1 |          130 |    0.0072814 |            2 |
|    4 | Accept |    0.065527 |      1.5974 |    0.062678 |    0.062681 |          Bag |           25 |            - |            5 |
|    5 | Accept |    0.065527 |      7.4355 |    0.062678 |    0.062695 |   LogitBoost |          178 |      0.52008 |           40 |
|    6 | Accept |    0.068376 |      6.2119 |    0.062678 |    0.062693 |  GentleBoost |          146 |      0.46233 |            8 |
|    7 | Accept |    0.076923 |       18.49 |    0.062678 |    0.063613 |  GentleBoost |          456 |    0.0018323 |            3 |
|    8 | Accept |    0.068376 |        19.9 |    0.062678 |    0.063878 |   LogitBoost |          479 |     0.036176 |            7 |
|    9 | Accept |    0.068376 |      11.775 |    0.062678 |    0.065468 |   LogitBoost |          277 |      0.99964 |           42 |
|   10 | Accept |     0.17379 |     0.58809 |    0.062678 |    0.064692 |   LogitBoost |           11 |    0.0012008 |            1 |
|   11 | Accept |    0.065527 |      4.8851 |    0.062678 |    0.064854 |          Bag |          100 |            - |            1 |
|   12 | Accept |    0.076923 |     0.97125 |    0.062678 |    0.062571 |  GentleBoost |           23 |    0.0096328 |            2 |
|   13 | Accept |    0.082621 |     0.76955 |    0.062678 |    0.064919 |  GentleBoost |           18 |    0.0078878 |           61 |
|   14 | Accept |    0.065527 |      24.547 |    0.062678 |     0.06557 |          Bag |          499 |            - |            7 |
|   15 | Accept |    0.079772 |      14.329 |    0.062678 |    0.064962 |  GentleBoost |          359 |     0.080649 |            1 |
|   16 | Accept |     0.35897 |     0.52584 |    0.062678 |    0.062491 |          Bag |           10 |            - |          171 |
|   17 | Accept |     0.35897 |     0.87997 |    0.062678 |    0.062483 |   AdaBoostM1 |           14 |    0.0029975 |          174 |
|   18 | Accept |     0.10826 |      31.777 |    0.062678 |    0.062484 |     RUSBoost |          498 |      0.35355 |            1 |
|   19 | Accept |     0.64103 |      1.2122 |    0.062678 |    0.062469 |     RUSBoost |           20 |      0.11564 |          175 |
|   20 | Accept |    0.091168 |      11.845 |    0.062678 |    0.062474 |     RUSBoost |          187 |    0.0010337 |            5 |
|===================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Method | NumLearningC-|    LearnRate |  MinLeafSize |
|      | result |             | runtime     | (observed)  | (estim.)    |              | ycles        |              |              |
|===================================================================================================================================|
|   21 | Accept |    0.076923 |      12.647 |    0.062678 |    0.062473 |  GentleBoost |          322 |     0.020651 |          174 |
|   22 | Accept |    0.065527 |      4.1482 |    0.062678 |    0.062473 |   AdaBoostM1 |           63 |      0.95202 |            1 |
|   23 | Accept |     0.17379 |      6.6579 |    0.062678 |    0.062356 |   LogitBoost |          166 |    0.0011034 |          175 |
|   24 | Accept |     0.17379 |     0.87522 |    0.062678 |    0.062611 |   LogitBoost |           20 |    0.0011381 |           15 |
|   25 | Accept |    0.062678 |      5.0428 |    0.062678 |    0.062619 |   LogitBoost |          125 |       0.9709 |            4 |
|   26 | Accept |     0.11681 |     0.68826 |    0.062678 |    0.062621 |     RUSBoost |           10 |      0.93628 |            6 |
|   27 | Accept |    0.082621 |     0.88836 |    0.062678 |    0.062716 |  GentleBoost |           19 |      0.94744 |           75 |
|   28 | Accept |    0.065527 |      5.3467 |    0.062678 |    0.064168 |   LogitBoost |          131 |      0.99024 |            9 |
|   29 | Accept |    0.068376 |      24.065 |    0.062678 |    0.064255 |          Bag |          489 |            - |            2 |
|   30 | Accept |    0.076923 |      18.562 |    0.062678 |    0.063851 |  GentleBoost |          458 |    0.0010094 |           16 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 301.149 seconds.
Total objective function evaluation time: 261.6473

Best observed feasible point:
      Method      NumLearningCycles    LearnRate    MinLeafSize
    __________    _________________    _________    ___________

    LogitBoost           206            0.96537         33     

Observed objective function value = 0.062678
Estimated objective function value = 0.063851
Function evaluation time = 9.2751

Best estimated feasible point (according to models):
      Method      NumLearningCycles    LearnRate    MinLeafSize
    __________    _________________    _________    ___________

    LogitBoost           277            0.99964         42     

Estimated objective function value = 0.063851
Estimated function evaluation time = 11.8227
Mdl = 
  classreg.learning.classif.ClassificationEnsemble
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'b'  'g'}
                       ScoreTransform: 'none'
                      NumObservations: 351
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]
                           NumTrained: 277
                               Method: 'LogitBoost'
                         LearnerNames: {'Tree'}
                 ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                              FitInfo: [277×1 double]
                   FitInfoDescription: {2×1 cell}


  Properties, Methods

最適化では、バイナリ分類の方式、NumLearningCycles、適用可能な手法の LearnRate、および木学習器の MinLeafSize に対して探索を行いました。出力は、推定交差検証損失が最小になるアンサンブル分類器です。

十分な予測性能をもつブースティングされた分類木のアンサンブルを作成する方法の 1 つは、交差検証を使用して決定木の複雑度レベルを調整することです。最適な複雑度レベルを求めるときに、学習率を調整して学習サイクル数を最小化します。

ionosphere データセットを読み込みます。

load ionosphere

最適な木の複雑度レベルを求めるため、以下を行います。

  1. 一連のアンサンブルを交差検証します。以後のアンサンブルについて、決定株 (1 つの分割) から最大 n - 1 個の分割まで木の複雑度レベルを指数的に増やします。n は標本サイズです。また、各アンサンブル学習率を 0.1 から 1 までの間で変化させます。

  2. 各アンサンブルの交差検証済み誤分類率を推定します。

  3. 木の複雑度レベル () について、学習サイクル数に対してプロットすることにより、アンサンブルの交差検証済み累積誤分類率を比較します。同じ Figure に、各学習率に対応する別々の曲線をプロットします。

  4. 誤分類率が最小になる曲線を選択し、対応する学習サイクルおよび学習率に注目します。

深い分類木と切り株を交差検証します。これらの分類木は基準として機能します。

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)
fprintf('\nOptimal Parameter Values:\nNum. Trees = %d',idxNumTrees);
fprintf('\nMaxNumSplits = %d\nLearning Rate = %0.2f\n',...
    maxNumSplits(idxMNS),learnRate(idxLR))
Min. misclass. rate = 0.05413
Optimal Parameter Values:
Num. Trees = 47
MaxNumSplits = 3
Learning Rate = 0.25

最適なハイパーパラメーターおよび学習セット全体に基づいて予測アンサンブルを作成します。

tFinal = templateTree('MaxNumSplits',maxNumSplits(idxMNS));
MdlFinal = fitcensemble(X,Y,'NumLearningCycles',idxNumTrees,...
    'Learners',tFinal,'LearnRate',learnRate(idxLR))
MdlFinal = 

  classreg.learning.classif.ClassificationEnsemble
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
          NumObservations: 351
               NumTrained: 47
                   Method: 'LogitBoost'
             LearnerNames: {'Tree'}
     ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                  FitInfo: [47×1 double]
       FitInfoDescription: {2×1 cell}


MdlFinalClassificationEnsemble です。与えられた予測子データに対してレーダー反射が良好であるかどうかを予測するには、予測子データと MdlFinalpredict に渡します。

入力引数

すべて折りたたむ

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

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

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

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

メモ

メモリと実行時間を節約するには、Tbl ではなく XY を指定します。

データ型: テーブル

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

ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、Tbl.Y が応答変数である場合、ResponseVarName には 'Y' を指定します。それ以外の場合、fitcensembleTbl の列をすべて予測子変数として扱います。

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

分類の場合、名前と値のペアの引数 ClassNames を使用してクラスの順序を指定できます。それ以外の場合、fitcensemble がクラスの順序を決定して Mdl.ClassNames に格納します。

データ型: char | string

予測子変数のサブセットおよび応答の説明モデル。'Y~X1+X2+X3' という形式の文字ベクトルまたは string スカラーを指定します。この式では、Y は応答変数を、X1X2 および X3 は予測子変数を表します。変数は、Tbl (Tbl.Properties.VariableNames) に含まれている変数の名前でなければなりません。

モデルに学習をさせるための予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。

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

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で閉じなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: 'CrossVal','on','LearnRate',0.05 は、10 分割交差検証を実施し、学習率として 0.05 を使用するよう指定します。

メモ

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

一般的なアンサンブル オプション

すべて折りたたむ

アンサンブル集約法。'Method''RUSBoost' などの値から構成されるコンマ区切りのペアとして指定します。

説明分類問題のサポート追加要件
'AdaBoostM1'適応ブースティングバイナリのみ-
'AdaBoostM2'適応ブースティングマルチクラスのみ-
'Bag'ブートストラップ集約 (ランダム フォレストなど)バイナリおよびマルチクラス-
'GentleBoost'ジェントル適応ブースティングバイナリのみ-
'LogitBoost'適応ロジスティック回帰バイナリのみ-
'LPBoost'線形計画ブースティングバイナリおよびマルチクラスOptimization Toolbox™ のライセンス
'RobustBoost'ロバスト ブースティングバイナリのみOptimization Toolbox のライセンス
'RUSBoost'ランダム アンダーサンプリング ブースティングバイナリおよびマルチクラス-
'Subspace'ランダム部分空間バイナリおよびマルチクラス-
'TotalBoost'完全補正ブースティングバイナリおよびマルチクラスOptimization Toolbox のライセンス

バイナリ分類問題の場合の既定値は 'LogitBoost' です。それ以外の場合は、既定値は 'AdaBoostM2' です。

例: 'Method','Bag'

アンサンブル学習サイクルの数。正の整数または '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

アンサンブルで使用する弱学習器。弱学習器の名前、弱学習器テンプレート オブジェクト、または弱学習器テンプレート オブジェクトの cell ベクトルを指定します。

弱学習器弱学習器の名前テンプレート オブジェクト作成関数Method の設定
判別分析'discriminant'templateDiscriminant'Subspace' を推奨
k 最近傍'knn'templateKNN'Subspace' のみ
決定木'tree'templateTree'Subspace' を除くすべての手法

既定値は以下のとおりです。

  • 'knn' ('Method''Subspace' の場合)

  • 'tree' ('Method''Bag' の場合)

  • templateTree('MaxNumSplits',10) ('Method' がいずれかのブースティング法の場合)

次の条件が両方とも満たされている場合、fitcensemble は決定木弱学習器の分割の最大数を 10 に設定します。

  • 決定木弱学習器の 'MaxNumSplits' プロパティの値を設定していない。

  • fitcensemble のアンサンブル集約法としてブースティング アルゴリズムを使用している。

たとえば、'Learners',templateTree()'Method','AdaBoostM1' を指定した場合、fitcensemble は決定木弱学習器の最大分割数を 10 に設定します。

それ以外の場合、fitcensemble は対応するテンプレート オブジェクトに従って、名前と値のペアの引数 'Learners' に必要な既定値を選択します。

学習器の学習回数の詳細については、NumLearningCyclesヒントを参照してください。

例: 2 種類の分類木から構成されるアンサンブルの場合、{t1 t2} を指定します。t1t2 は分類木テンプレートです。

出力頻度。'NPrint' と正の整数または 'off' から構成されるコンマ区切りのペアとして指定します。

それまでに fitcensemble が "弱学習器" または "分割" に学習をさせた回数を追跡するには、正の整数を指定します。つまり、正の整数 m を指定した場合、次のようになります。

  • 交差検証オプション (CrossVal など) を指定していない場合、fitcensemble で m 個の弱学習器の学習が完了するたびに、コマンド ラインにメッセージが表示されます。

  • 交差検証オプションを指定した場合、fitcensemble で m 個の分割の学習が完了するたびに、コマンド ラインにメッセージが表示されます。

'off' を指定した場合、fitcensemble で弱学習器の学習が完了してもメッセージは表示されません。

ヒント

大規模なデータセットに対して多数の弱学習器のアンサンブルに学習をさせる場合、正の整数を NPrint に指定してください。

例: 'NPrint',5

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

カテゴリカル予測子のリスト。'CategoricalPredictors' と次の表のいずれかの値から構成されるコンマ区切りのペアとして指定します。

説明
正の整数のベクトルベクトルのエントリは、カテゴリカル変数が含まれている予測子データ (X または Tbl) の列に対応するインデックス値です。
logical ベクトルtrue というエントリは、予測子データ (X または Tbl) の対応する列がカテゴリカル変数であることを意味します。
文字行列行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
文字ベクトルの cell 配列または string 配列配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。
'all'すべての予測子がカテゴリカルです。

CategoricalPredictors の仕様は以下の場合適切です。

  • 'Learners''tree'

  • すべての予測子がカテゴリカルである場合に 'Learners''knn' である。

既定では、予測子データが table (Tbl) 内にあり、この table に論理値、カテゴリカル値、string 配列、または文字ベクトルの cell 配列が格納されている場合、fitcensemble は変数がカテゴリカルであると見なします。予測子データが行列 (X) である場合、fitcensemble はすべての予測子が連続的であると見なします。データが行列の場合にカテゴリカル予測子を確認するには、名前と値のペアの引数 'CategoricalPredictors' を使用します。

例: 'CategoricalPredictors','all'

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

予測子変数名。'PredictorNames' と一意な名前の string 配列または一意な文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。'PredictorNames' の機能は、学習データの提供方法によって決まります。

  • XY を指定した場合、'PredictorNames' を使用して X の名前で予測子変数を指定できます。

    • PredictorNames 内の名前の順序は、X の列の順序に一致しなければなりません。つまり、PredictorNames{1}X(:,1) の名前、PredictorNames{2}X(:,2) の名前であり、他も同様です。また、size(X,2)numel(PredictorNames) は等しくなければなりません。

    • 既定では PredictorNames{'x1','x2',...} です。

  • Tbl が与えられた場合、'PredictorNames' を使用して学習に使用する予測子変数を選択できます。つまり、fitcensemblePredictorNames の予測子変数と応答変数のみを学習で使用します。

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

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

    • 'PredictorNames'formula のいずれか一方のみを使用して学習用の予測子を指定することをお勧めします。

例: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

データ型: string | cell

応答変数名。'ResponseName' と文字ベクトルまたは string スカラーから構成されるコンマ区切りのペアとして指定します。

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

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

例: 'ResponseName','response'

データ型: char | string

交差検証オプション

すべて折りたたむ

交差検証フラグ。'Crossval''on' または 'off' から構成されるコンマ区切りのペアとして指定します。

'on' を指定した場合、10 分割の交差検証が実施されます。

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

あるいは、crossval または crossvalMdl を渡すことにより、後で交差検証を実行します。

例: 'Crossval','on'

交差検証分割。'CVPartition'cvpartition により作成された cvpartition 分割オブジェクトで構成されるコンマ区切りのペアとして指定します。分割オブジェクトは、交差検証のタイプと、学習セットおよび検証セットのインデックス付けを指定します。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、'CVPartition''Holdout''KFold''Leaveout' の 4 つのうちのいずれかのみです。

例: cvp = cvpartition(500,'KFold',5) を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、'CVPartition',cvp を使用して交差検証済みモデルを指定できます。

ホールドアウト検定に使用されるデータの比率。'Holdout' と範囲 (0,1) のスカラー値から構成されるコンマ区切りのペアとして指定します。'Holdout',p を指定した場合、以下の手順が実行されます。

  1. p*100% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。

  2. コンパクトな学習済みモデルを交差検証済みモデルの Trained プロパティに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'Holdout',0.1

データ型: double | single

交差検証済みモデルで使用する分割数。'KFold' と 1 より大きい正の整数から構成されるコンマ区切りのペアとして指定します。'KFold',k を指定した場合、以下の手順が実行されます。

  1. データを無作為に k 個のセットに分割する。

  2. 各セットについて、そのセットを検定データとして確保し、他の k - 1 個のセットを使用してモデルに学習をさせる。

  3. k 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている k 行 1 列の cell ベクトルのセルに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'KFold',5

データ型: single | double

Leave-one-out 法の交差検証のフラグ。'Leaveout''on' または 'off' で構成されるコンマ区切りのペアとして指定します。'Leaveout','on' を指定した場合、n 個の観測値 (n は、モデルの NumObservations プロパティで指定される、欠損観測値を除外した観測値の個数) のそれぞれについて以下の手順が実行されます。

  1. その観測値を検証データとして確保し、他の n - 1 個の観測値を使用してモデルに学習をさせる。

  2. n 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている n 行 1 列の cell ベクトルのセルに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'Leaveout','on'

その他の分類オプション

すべて折りたたむ

学習に使用するクラスの名前。'ClassNames' と categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。ClassNames のデータ型は Y と同じでなければなりません。

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

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

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

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

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

ClassNames の既定値は、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 は異なるクラスの数です。

メモ

fitcensembleCost を使用して、Prior で指定されたクラスの事前確率を調整します。その後、fitcensemble は調整した事前確率を学習に使用し、コスト行列を既定設定にリセットします。

例: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]

データ型: double | single | 構造体

各クラスの事前確率。'Prior' と次の表の値から構成されるコンマ区切りのペアとして指定します。

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

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

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

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

fitcensemble は、合計が 1 になるように Prior の事前確率を正規化します。

例: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)

データ型: char | string | double | single | 構造体

スコア変換。'ScoreTransform' と文字ベクトル、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 | 関数ハンドル

観測値の重み。'Weights' と、正の値の数値ベクトルまたは Tbl 内の変数の名前から構成されるコンマ区切りのペアとして指定します。X または Tbl の各行に含まれている観測値は、Weights の対応する値で重み付けされます。Weights のサイズは、X または Tbl の行数と等しくなければなりません。

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

合計が各クラスの事前確率の値と等しくなるように Weights が正規化されます。

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

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

ブースティング法およびバギングのサンプリング オプション

すべて折りたたむ

すべての弱学習器についてリサンプリングされる学習セットの比率。'FResample' と (0,1] の正のスカラーから構成されるコンマ区切りのペアとして指定します。

'FResample' を使用するには、Method'bag' を指定するか、Resample'on' に設定します。

例: 'FResample',0.75

データ型: single | double

復元抽出を示すフラグ。'Replace''off' または 'on' から構成されるコンマ区切りのペアとして指定します。

  • 'on' の場合、学習観測値が復元抽出されます。

  • 'off' の場合、学習観測値が非復元抽出されます。Resample'on' に設定した場合、重みが均一であるという前提で学習観測値がサンプリングされます。ブースティング法も指定した場合、観測値が再重み付けされてブースティングが行われます。

Method'bag' に設定した場合と Resample'on' に設定した場合を除いて、Replace の効果はありません。

例: 'Replace','off'

リサンプリングを示すフラグ。'Resample''off' または 'on' から構成されるコンマ区切りのペアとして指定します。

  • Method がいずれかのブースティング法である場合、次のようになります。

    • 'Resample','on' は、更新された重みを多項サンプリング確率として使用することにより学習観測値をサンプリングするよう指定します。

    • 'Resample','off' は、すべての学習反復で観測値を再重み付けするよう指定します。これは既定の設定です。

  • Method'bag' の場合、'Resample''on' でなければなりません。一定の比率 (FResample を参照) の学習観測値が復元抽出または非復元抽出 (Replace を参照) でリサンプリングされます。

AdaBoostM1、AdaBoostM2、LogitBoost および GentleBoost 法のオプション

すべて折りたたむ

縮小学習率。区間 (0,1] の数値スカラーから構成されるコンマ区切りのペアとして指定します。

縮小を使用してアンサンブルに学習をさせるには、LearnRate1 未満の値 (一般的な 0.1 など) に設定します。縮小を使用してアンサンブルに学習をさせると、学習反復数を増やす必要がありますが、多くの場合精度が向上します。

例: 'LearnRate',0.1

データ型: single | double

RUSBoost 法のオプション

すべて折りたたむ

縮小学習率。区間 (0,1] の数値スカラーから構成されるコンマ区切りのペアとして指定します。

縮小を使用してアンサンブルに学習をさせるには、LearnRate1 未満の値 (一般的な 0.1 など) に設定します。縮小を使用してアンサンブルに学習をさせると、学習反復数を増やす必要がありますが、多くの場合精度が向上します。

例: 'LearnRate',0.1

データ型: single | double

最小相当クラスについてのサンプリング比率。'RatioToSmallest' と数値スカラー、または学習データ内の異なるクラス数と同じ長さをもつ正の値の数値ベクトルから構成されるコンマ区切りのペアとして指定します。

学習データに K 個のクラスがあり、最小相当クラスには m 個の観測値があるとします。

  • 正の数値スカラー s を指定した場合、fitcensembles*m 個の観測値を各クラスから抽出します。つまり、各クラスでサンプリングの比率が同じになります。詳細は、アルゴリズムを参照してください。

  • 数値ベクトル [s1,s2,...,sK] を指定した場合、fitcensemblesi*m 個の観測値をクラス i (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 に関する文献 ([19]など) を調べてください。

例: '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'}

    メモ

    ハイパーパラメーターの最適化の場合、Learners は string 配列や cell 配列ではなく単一の引数でなければなりません。

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

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

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

最適化では、パラメーターを変化させることにより、fitcensemble の交差検証損失 (誤差) を最小化しようとします。(各種の状況における) 交差検証損失の詳細については、分類損失を参照してください。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値のペア HyperparameterOptimizationOptions を使用します。

メモ

'OptimizeHyperparameters' の値は、他の名前と値のペアの引数を使用して設定した値より優先されます。たとえば、'OptimizeHyperparameters''auto' に設定すると、'auto' の値が適用されます。

fitcensemble では、以下のパラメーターを使用できます。

  • Method — クラスの個数によって異なります。

    • 2 つのクラス — 使用可能な方式は 'Bag''GentleBoost''LogitBoost''AdaBoostM1' および 'RUSBoost' です。

    • 3 つ以上のクラス — 使用可能な方式は 'Bag''AdaBoostM2' および 'RUSBoost' です。

  • NumLearningCyclesfitcensemble は、既定では範囲 [10,500] の対数スケールで、正の整数を探索します。

  • LearnRatefitcensemble は、既定では範囲 [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 を使用します。

    load fisheriris % hyperparameters requires data and learner
    params = hyperparameters('fitcensemble',meas,species,'Tree');

    使用可能な、または既定のハイパーパラメーターを調べるには、params を確認します。

既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable オブジェクトのベクトルを渡します。例えば、

load fisheriris
params = hyperparameters('fitcensemble',meas,species,'Tree');
params(4).Range = [1,30];

OptimizeHyperparameters の値として params を渡します。

既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、回帰の場合は log(1 + 交差検証損失)、分類の場合は誤分類率です。反復表示を制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'Verbose フィールドを設定します。プロットを制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'ShowPlots フィールドを設定します。

例については、アンサンブル分類の最適化を参照してください。

例: 'auto'

最適化のオプション。'HyperparameterOptimizationOptions' と構造体から構成されるコンマ区切りのペアとして指定します。この引数を指定すると、名前と値のペアの引数 OptimizeHyperparameters の効果が変化します。この構造体のフィールドは、すべてオプションです。

フィールド名既定の設定
Optimizer
  • 'bayesopt' — ベイズ最適化を使用。内部的には bayesopt が呼び出されます。

  • 'gridsearch' — 次元ごとに NumGridDivisions の値があるグリッド探索を使用。

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

'gridsearch' では、グリッドからの一様な非復元抽出により、無作為な順序で探索します。最適化後、sortrows(Mdl.HyperparameterOptimizationResults) コマンドを使用してグリッド順のテーブルを取得できます。

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

詳細については、bayesopt の名前と値のペアの引数 AcquisitionFunctionName または獲得関数のタイプを参照してください。

'expected-improvement-per-second-plus'
MaxObjectiveEvaluations目的関数評価の最大数。'bayesopt' または 'randomsearch' の場合は 30'gridsearch' の場合はグリッド全体
MaxTime

制限時間。正の実数を指定します。制限時間の単位は、tictoc によって測定される秒です。MaxTime は関数評価を中断させないため、実行時間が MaxTime を超える可能性があります。

Inf
NumGridDivisions'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。10
ShowPlotsプロットを表示するかどうかを示す論理値。true の場合、最良の目的関数の値が反復回数に対してプロットされます。1 つまたは 2 つの最適化パラメーターがあり、Optimizer'bayesopt' である場合、ShowPlots はパラメーターに対する目的関数のモデルのプロットも行います。true
SaveIntermediateResultsOptimizer'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。false
Verbose

コマンド ラインへの表示。

  • 0 — 反復表示なし

  • 1 — 反復表示あり

  • 2 — 追加情報付きで反復表示あり

詳細については、bayesopt の名前と値のペアの引数 Verbose を参照してください。

1
UseParallelベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。詳細については、並列ベイズ最適化を参照してください。false
Repartition

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

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

false
以下の 3 つのフィールド名は 1 つだけ使用できます。
CVPartitioncvpartition によって作成される cvpartition オブジェクト。交差検証フィールドが指定されていない場合 'Kfold',5
Holdoutホールドアウトの比率を表す範囲 (0,1) のスカラー。
Kfold1 より大きい整数。

例: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

データ型: 構造体

出力引数

すべて折りたたむ

学習済みのアンサンブル モデル。次の表のモデル オブジェクトのいずれかとして返されます。

モデル オブジェクト交差検証オプションの指定Method の設定Resample の設定
ClassificationBaggedEnsembleなし'Bag''on'
ClassificationEnsembleなし分類用のアンサンブル集約法のいずれか'off'
ClassificationPartitionedEnsembleありアンサンブル分類集約法のいずれか'off' または 'on'

交差検証を制御する名前と値のペアの引数は CrossValHoldoutKFoldLeaveout および CVPartition です。

Mdl のプロパティを参照するには、ドット表記を使用します。たとえば、交差検証されていないアンサンブルについて弱学習器モデル オブジェクトの cell ベクトルのアクセスまたは表示を行うには、コマンド ラインで Mdl.Trained を入力します。

ヒント

  • 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 を使用して名前と値のペアの引数 MaxNumSplitsMinLeafSize および MinParentSize を指定することにより調整できます。

  • fitcensemble は誤分類コストが大きいクラスをオーバーサンプリングし、誤分類コストが小さいクラスをアンダーサンプリングして、in-bag の標本を生成します。その結果、out-of-bag の標本では、誤分類コストが大きいクラスの観測値は少なくなり、誤分類コストが小さいクラスの観測値は多くなります。小さいデータセットと歪みが大きいコスト行列を使用してアンサンブル分類に学習をさせる場合、クラスあたりの out-of-bag 観測値の数が少なくなる可能性があります。このため、out-of-bag の推定誤差の変動幅が非常に大きくなり、解釈が困難になる可能性があります。事前確率が大きいクラスでも同じ現象が発生する場合があります。

  • アンサンブル集約法 (Method) が RUSBoost である場合、名前と値のペアの引数 RatioToSmallest では最小相当クラスに関して各クラスのサンプリングの比率を指定します。たとえば、学習データに A および B という 2 つのクラスがあるとします。A には 100 個の観測値、B には 10 個の観測値があり、学習データ内の最小相当クラスには m 個の観測値があるとします。

    • 'RatioToSmallest',2 を設定した場合、s*m = 2*10 = 20 になります。したがって、fitcensemble はクラス A の 20 個の観測値とクラス B の 20 個の観測値を使用して、すべての学習器に学習をさせます。'RatioToSmallest',[2 2] を設定した場合も同じ結果になります。

    • 'RatioToSmallest',[2,1] を設定した場合、s1*m = 2*10 = 20 および s2*m = 1*10 = 10 になります。したがって、fitcensemble はクラス A の 20 個の観測値とクラス B の 10 個の観測値を使用して、すべての学習器に学習をさせます。

  • デュアルコア以上のシステムの場合、fitcensemble では Intel® スレッディング ビルディング ブロック (TBB) を使用して学習を並列化します。Intel TBB についての詳細は、https://software.intel.com/en-us/intel-tbb を参照してください。

参照

[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 clasification 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.

拡張機能

R2016b で導入