Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

templateEnsemble

アンサンブル学習テンプレート

説明

t = templateEnsemble(Method,NLearn,Learners) は、アンサンブル集約法 Method、学習サイクル数 NLearn および弱学習器 Learners を使用するように指定するアンサンブル学習テンプレートを返します。

アンサンブル学習専用のテンプレート (t) のその他すべてのオプションは空で表示されますが、学習中は対応する既定値が使用されます。

t = templateEnsemble(Method,NLearn,Learners,Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、アンサンブル テンプレートを返します。

たとえば、各ランダム部分空間学習器の予測子の数、縮小学習率または RobustBoost の目標分類誤差を指定できます。

t をコマンド ウィンドウに表示した場合、名前と値のペアの引数を使用して指定したオプションを除くすべてのオプションが空 ([]) として表示されます。学習中、空のオプションに既定値が使用されます。

すべて折りたたむ

templateEnsemble を使用して、アンサンブル学習テンプレートを指定します。アンサンブル法、学習サイクルの数、弱学習器の型を指定しなければなりません。たとえば、AdaBoostM1 法、100 個の学習器および分類木弱学習器を指定します。

t = templateEnsemble('AdaBoostM1',100,'tree')
t = 
Fit template for classification AdaBoostM1.

                Type: 'classification'
              Method: 'AdaBoostM1'
    LearnerTemplates: 'Tree'
              NLearn: 100
           LearnRate: []

MethodTypeLearnerTemplates および NLearn を除き、テンプレート オブジェクトのすべてのプロパティは空です。学習の際、空のプロパティはそれぞれの既定値で入力されます。たとえば、LearnRate プロパティは、1 で入力されます。

t はアンサンブル学習器の計画で、それを指定する場合、計算は実行されません。tfitcecocに渡して、ECOC マルチクラス学習のアンサンブル バイナリ学習器を指定できます。

fitcecocで使用するためのアンサンブル テンプレートを作成します。

不整脈データ セットを読み込みます。

load arrhythmia
tabulate(categorical(Y));
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%
rng(1); % For reproducibility

一部のクラスでは、データ内の相対的頻度が小さいです。

分類木の AdaBoostM1 アンサンブルに対するテンプレートを作成し、100 個の学習器および 0.1 という縮小を使用するよう指定します。既定の設定では、ブースティングは切り株 (たとえば葉のセットをもつ 1 つのノード) を成長させます。頻度の小さいクラスがあるので、少数のクラスが十分な感度をもつように、ツリーのリーフ数を多くしなければなりません。葉ノードの観測値の最小数を 3 に指定します。

tTree = templateTree('MinLeafSize',20);
t = templateEnsemble('AdaBoostM1',100,tTree,'LearnRate',0.1);

MethodType および関数呼び出し内の名前と値のペア引数の対応するプロパティを除き、テンプレート オブジェクトのすべてのプロパティは空です。t を学習関数に渡す場合、空のプロパティはそれぞれの既定値で入力されます。

t を ECOC マルチクラス モデルのバイナリ学習器として指定します。既定の 1 対 1 の 符号化設計を使用して学習させます。

Mdl = fitcecoc(X,Y,'Learners',t);
  • MdlClassificationECOC マルチクラス モデルです。

  • Mdl.BinaryLearnersCompactClassificationEnsemble モデルの 78 行 1 列の cell 配列です。

  • Mdl.BinaryLearners{j}.Trained は、j = 1,...,78 の場合に CompactClassificationTree モデルの 100 行 1 列の cell 配列です。

view を使用して、バイナリ学習器のいずれかが、切り株ではない弱学習器を含むことを検証できます。

view(Mdl.BinaryLearners{1}.Trained{1},'Mode','graph')

標本内 (再代入) 誤分類誤差を表示します。

L = resubLoss(Mdl,'LossFun','classiferror')
L = 0.0819

代理分岐をもつ決定木の GentleBoost アンサンブルを使用して、1 対他の ECOC 分類器に学習をさせます。学習を高速化するため、数値予測子をビン化し、並列計算を使用します。ビン化は、fitcecoc が木学習器を使用する場合のみ有効です。学習後、10 分割交差検証を使用して分類誤差を推定します。並列計算には Parallel Computing Toolbox™ が必要であることに注意してください。

標本データの読み込み

arrhythmia データ セットを読み込み検証します。

load arrhythmia
[n,p] = size(X)
n = 452
p = 279
isLabels = unique(Y);
nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%

このデータ セットには 279 個の予測子が含まれ、452 という標本サイズは相対的に小さいものです。16 個の異なるラベルのうち、13 個のみが応答 (Y) で表現されています。各ラベルは不整脈のさまざまな段階を表しており、観測値の 54.20% がクラス 1 に含まれています。

1 対他 ECOC 分類器の学習

アンサンブル テンプレートを作成します。少なくとも 3 つの引数を指定しなければなりません。手法、学習器の数、および学習器のタイプです。この例では、手法として 'GentleBoost'、学習器の個数として 100 を指定します。欠損観測値があるので、代理分岐を使用する決定木テンプレートを指定します。

tTree = templateTree('surrogate','on');
tEnsemble = templateEnsemble('GentleBoost',100,tTree);

tEnsemble はテンプレート オブジェクトです。ほとんどのプロパティは空ですが、学習中に既定値が入力されます。

決定木のアンサンブルをバイナリ学習器として使用して、1 対他の ECOC 分類器を学習させます。学習を高速化するため、ビン化と並列計算を使用します。

  • ビン化 ('NumBins',50) — 学習データ セットが大きい場合、名前と値のペアの引数 'NumBins' を使用することにより学習を高速化できます (精度が低下する可能性があります)。この引数は、fitcecoc が木学習器を使用する場合のみ有効です。'NumBins' の値を指定した場合、指定した個数の同確率のビンにすべての数値予測子がビン化され、元のデータではなくビンのインデックスに対して木が成長します。はじめに 'NumBins',50 を試してから、精度と学習速度に応じて 'NumBins' の値を変更できます。

  • 並列計算 ('Options',statset('UseParallel',true)) — Parallel Computing Toolbox のライセンスがある場合、プール内のワーカーに各バイナリ学習器を送る並列計算を使用して、計算を高速化できます。ワーカーの個数はシステム構成によって異なります。デュアルコア以上のシステムの場合、バイナリ学習器について決定木を使用すると、fitcecoc は Intel® スレッディング ビルディング ブロック (TBB) を使用して学習を並列化します。したがって、単一のコンピューターで 'UseParallel' オプションを指定しても役に立ちません。このオプションは、クラスターに対して使用します。

さらに、事前確率として 1/K を指定します。K = 13 は異なるクラスの個数です。

options = statset('UseParallel',true);
Mdl = fitcecoc(X,Y,'Coding','onevsall','Learners',tEnsemble,...
                'Prior','uniform','NumBins',50,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

MdlClassificationECOC モデルです。

交差検証

10 分割交差検証を使用して ECOC 分類器の交差検証を実行します。

CVMdl = crossval(Mdl,'Options',options);
Warning: One or more folds do not contain points from all the groups.

CVMdlClassificationPartitionedECOC モデルです。少なくとも 1 つの分割の学習中に、いくつかのクラスが表示されないことが警告でわかります。したがって、これらの分割は欠損クラスに対するラベルを予測できません。cell のインデックス指定とドット表記を使用して、分割の結果を調査できます。たとえば、1 番目の分割の結果にアクセスするには CVMdl.Trained{1} と入力します。

交差検証済みの ECOC 分類器を使用して、検証分割のラベルを予測します。混同行列は、confusionchart を使用して計算できます。内側の位置のプロパティを変更してチャートを移動およびサイズ変更することにより、行要約の内部にパーセントが表示されるようにします。

oofLabel = kfoldPredict(CVMdl,'Options',options);
ConfMat = confusionchart(Y,oofLabel,'RowSummary','total-normalized');
ConfMat.InnerPosition = [0.10 0.12 0.85 0.85];

ビン化されたデータの再現

学習済みモデルの BinEdges プロパティと関数discretizeを使用して、ビン化された予測子データを再現します。

X = Mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = Mdl.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 になります。XNaN が含まれている場合、対応する Xbinned の値は NaN になります。

入力引数

すべて折りたたむ

アンサンブル集約法。次の一覧に記載されている方式名のいずれかを指定します。

  • 2 つのクラスによる分類:

    • 'AdaBoostM1' — 適応ブースティング

    • 'LogitBoost' — 適応ロジスティック回帰

    • 'GentleBoost' — ジェントル適応ブースティング

    • 'RobustBoost' — ロバスト ブースティング (Optimization Toolbox™ が必要)

    • 'LPBoost' — 線形計画ブースティング (Optimization Toolbox が必要)

    • 'TotalBoost' — 完全補正ブースティング (Optimization Toolbox が必要)

    • 'RUSBoost' — ランダム アンダーサンプリング ブースティング

    • 'Subspace' — ランダム部分空間

    • 'Bag' — bootstrap aggregation (バギング)

  • 3 つ以上のクラスによる分類:

    • 'AdaBoostM2' — 適応ブースティング

    • 'LPBoost' — 線形計画ブースティング (Optimization Toolbox が必要)

    • 'TotalBoost' — 完全補正ブースティング (Optimization Toolbox が必要)

    • 'RUSBoost' — ランダム アンダーサンプリング ブースティング

    • 'Subspace' — ランダム部分空間

    • 'Bag' — bootstrap aggregation (バギング)

  • 回帰:

    • 'LSBoost' — 最小二乗ブースティング

    • 'Bag' — bootstrap aggregation (バギング)

'Bag' は分類問題と回帰問題に対して指定できるので、'Method','Bag' を指定する場合、名前と値のペアの引数 Type を使用して問題のタイプを指定します。

アンサンブル集約アルゴリズムの詳細と例については、アンサンブル アルゴリズムおよび適用するアンサンブル集約法の選択を参照してください。

アンサンブル学習サイクルの数。正の整数または 'AllPredictorCombinations' を指定します。

  • 正の整数を指定した場合、すべての学習サイクルで、1 つの弱学習器が Learners 内のすべてのテンプレート オブジェクトについて学習します。この結果、延べ NLearn*numel(Learners) 個の学習器が学習を行います。

  • 'AllPredictorCombinations' を指定する場合は、Method'Subspace' に設定し、Learners で 1 つの学習器のみを指定します。このように設定すると、予測子が一度に NPredToSample 個抽出され、その可能な組み合わせすべてに対して学習器が学習を行います。この結果、nchoosek(size(X,2),NPredToSample) 個の学習器が学習を行います。

詳細は、ヒントを参照してください。

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

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

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

詳細は、NLearnおよびヒントを参照してください。

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

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'LearningRate',0.05,'NPrint',5 は、学習率として 0.05 を使用し、5 個の学習器に学習をさせるたびにメッセージをコマンド ラインに表示するよう指定します。

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

すべて折りたたむ

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

これまでに学習をさせた "弱学習器" または "分割" の個数を追跡するには、正の整数を指定します。つまり、正の整数 m を指定し、さらに

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

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

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

ヒント

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

例: 'NPrint',5

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

教師あり学習のタイプ。'Type''classification' または 'regression' から構成されるコンマ区切りのペアとして指定します。

  • Method'bag' の場合、教師あり学習のタイプが明確ではなくなります。このため、バギングを行うときは Type を指定します。

  • それ以外の場合は、Method の値により教師あり学習のタイプが決まります。

例: 'Type','classification'

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

すべて折りたたむ

すべての弱学習器についてリサンプリングされる学習セットの比率。(0,1] の正のスカラーとして指定します。'FResample' を使用するには、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 を参照) でリサンプリングされます。

Resample を使用してリサンプリングを指定する場合は、データ セット全体に対してのリサンプリングをお勧めします。つまり、FResample の既定設定である 1 を使用します。

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

すべて折りたたむ

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

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

例: 'LearnRate',0.1

データ型: single | double

RUSBoost 法のオプション

すべて折りたたむ

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

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

例: 'LearnRate',0.1

データ型: single | double

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

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

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

  • 数値ベクトル [s1,s2,...,sK] を指定した場合、si*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

出力引数

すべて折りたたむ

アンサンブル学習の分類テンプレート。テンプレート オブジェクトとして返されます。t を、たとえば fitcecoc に渡して、ECOC モデルのアンサンブル学習分類器の作成方法を指定できます。

コマンド ウィンドウで t を表示する場合、すべての未指定のオプションは空 ([]) で表示されます。しかし、空のオプションは学習中に対応する既定値に置き換えられます。

ヒント

  • NLearn は数十から数千までさまざまな数になります。通常、予測力が高いアンサンブルでは数百から数千の弱学習器が必要です。しかし、このような多数のサイクルの学習をアンサンブルが一度に行う必要はありません。数十個の学習器の学習から開始してアンサンブルの性能を調査し、必要な場合は分類問題用の resume または回帰問題用の resume を使用して弱学習器の数を増やすことができます。

  • アンサンブルの性能は、アンサンブルの設定と弱学習器の設定によって決まります。つまり、既定のパラメーターを使用する弱学習器を指定すると、アンサンブルの性能が低下する可能性があります。このため、アンサンブルの設定と同じように、テンプレートを使用して弱学習器のパラメーターを調整し、汎化誤差が最小になる値を選択することをお勧めします。

  • Resample を使用してリサンプリングを指定する場合は、データ セット全体に対してのリサンプリングをお勧めします。つまり、FResample の既定設定である 1 を使用します。

  • 分類問題の場合 (つまり、Type'classification' の場合)

    • アンサンブル集約法 (Method) が 'bag' であり、

      • 誤分類コストが非常に不均衡である場合、in-bag の標本について、ペナルティが大きいクラスから一意な観測値がオーバーサンプリングされます。

      • クラスの事前確率の歪みが大きい場合、事前確率が大きいクラスから一意な観測値がオーバーサンプリングされます。

      これらの組み合わせにより、標本サイズが小さい場合、ペナルティまたは事前確率が大きいクラスから抽出される 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);

アルゴリズム

  • アンサンブル集約アルゴリズムの詳細については、アンサンブル アルゴリズムを参照してください。

  • Method がブースティング アルゴリズム、Learners が決定木になるように指定した場合、既定では "切り株" が成長します。決定株は、2 つの終端ノード (葉ノード) に接続されている 1 つのルート ノードです。木の深さは、templateTree を使用して名前と値のペアの引数 MaxNumSplitsMinLeafSize および MinParentSize を指定することにより調整できます。

  • 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 になります。したがって、すべての学習器の学習では、クラス A の 20 個の観測値とクラス B の 20 個の観測値が使用されます。'RatioToSmallest',[2 2] を設定した場合も同じ結果になります。

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

  • 決定木のアンサンブルの場合とデュアルコア以上のシステムの場合、fitcensemblefitrensemble では Intel® スレッディング ビルディング ブロック (TBB) を使用して学習を並列化します。Intel TBB の詳細については、https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.htmlを参照してください。

バージョン履歴

R2014b で導入