Main Content

resubLoss

回帰木モデルの再代入損失

説明

L = resubLoss(tree) は、関数 fitrtreetree の作成に使用したデータについて計算された再代入損失を返します。既定では、resubLoss は平均二乗誤差を使用して L を計算します。

L = resubLoss(tree,___,Name,Value) は、1 つ以上の Name=Value のペアの引数を使用して追加オプションを指定します。たとえば、resubLoss が損失の計算に使用する損失関数、枝刈りレベル、木のサイズを指定できます。

[L,SE,Nleaf,BestLevel] = resubLoss(___) は、損失の標準誤差、枝刈り順序の木に含まれる葉ノードの数、および名前と値の引数 TreeSize で定義される最適な枝刈りレベルも返します。既定では、BestLevel は、損失が最小損失の 1 標準偏差以内になる枝刈りレベルです。

すべて折りたたむ

carsmall データ セットを読み込みます。DisplacementHorsepower および Weight が応答 MPG の予測子であると考えます。

load carsmall
X = [Displacement Horsepower Weight];

すべての観測値を使用して回帰木を成長させます。

Mdl = fitrtree(X,MPG);

再代入の MSE を計算します。

resubLoss(Mdl)
ans = 4.8952

枝刈りをしていない決定木は、過適合になる傾向があります。モデルの複雑さと標本外性能のバランスをとる方法の 1 つとして、標本内性能と標本外性能が十分高くなるように木の枝刈りを行います (つまり木の成長を制限します)。

carsmall データ セットを読み込みます。DisplacementHorsepower および Weight が応答 MPG の予測子であると考えます。

load carsmall
X = [Displacement Horsepower Weight];
Y = MPG;

データを学習セット (50%) と検証セット (50%) に分割します。

n = size(X,1);
rng(1) % For reproducibility
idxTrn = false(n,1);
idxTrn(randsample(n,round(0.5*n))) = true; % Training set logical indices 
idxVal = idxTrn == false;                  % Validation set logical indices

学習セットを使用して回帰木を成長させます。

Mdl = fitrtree(X(idxTrn,:),Y(idxTrn));

回帰木を表示します。

view(Mdl,Mode="graph");

この回帰木には 7 つの枝刈りレベルがあります。レベル 0 は、(表示のように) 枝刈りされていない完全な木です。レベル 7 はルート ノードのみ (分割なし) です。

最上位レベルを除く各部分木 (枝刈りレベル) について、学習標本の MSE を確認します。

m = max(Mdl.PruneList) - 1;
trnLoss = resubLoss(Mdl,SubTrees=0:m)
trnLoss = 7×1

    5.9789
    6.2768
    6.8316
    7.5209
    8.3951
   10.7452
   14.8445

  • 枝刈りされていない完全な木の MSE は約 6 単位です。

  • レベル 1 まで枝刈りされた木の MSE は約 6.3 単位です。

  • レベル 6 (切り株) まで枝刈りされた木の MSE は約 14.8 単位です。

最上位を除く各レベルで検証標本の MSE を確認します。

valLoss = loss(Mdl,X(idxVal,:),Y(idxVal),Subtrees=0:m)
valLoss = 7×1

   32.1205
   31.5035
   32.0541
   30.8183
   26.3535
   30.0137
   38.4695

  • 枝刈りされていない完全な木 (レベル 0) の MSE は約 32.1 単位です。

  • レベル 4 まで枝刈りされた木の MSE は約 26.4 単位です。

  • レベル 5 まで枝刈りされた木の MSE は約 30.0 単位です。

  • レベル 6 (切り株) まで枝刈りされた木の MSE は約 38.5 単位です。

モデルの複雑さと標本外性能のバランスをとるには、Mdl をレベル 4 まで枝刈りすることを検討します。

pruneMdl = prune(Mdl,Level=4);
view(pruneMdl,Mode="graph")

入力引数

すべて折りたたむ

回帰木モデル。fitrtree で学習させた RegressionTree モデル オブジェクトとして指定します。

名前と値の引数

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

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

例: L = resubloss(tree,Subtrees="all") は、すべての部分木を枝刈りします。

損失関数。"mse" (平均二乗誤差) または関数ハンドルとして指定します。関数ハンドル fun を渡す場合、resubLoss でこの関数を次のように呼び出します。

fun(Y,Yfit,W)

ここで、YYfitW は、すべて同じ長さの数値ベクトルです。

  • Y は、観測された応答です。

  • Yfit は予測された応答です。

  • W は観測の重みです。

fun(Y,Yfit,W) の戻り値はスカラーでなければなりません。

例: LossFun="mse"

例: LossFun=@Lossfun

データ型: char | string | function_handle

枝刈りレベル。昇順の非負の整数のベクトルまたは "all" として指定します。

ベクトルを指定する場合、すべての要素が 0 から max(tree.PruneList) の範囲になければなりません。0 は枝刈りしない完全な木を、max(tree.PruneList) は完全に枝刈りした木 (つまり、ルート ノードのみ) を表します。

"all" を指定した場合、resubLoss はすべての部分木、つまり枝刈り順序全体に作用します。これは、0:max(tree.PruneList) を指定することと同じです。

resubLoss では、Subtrees で指定された各レベルまで tree の枝刈りを行ってから、対応する出力引数を推定します。Subtrees のサイズにより、一部の出力引数のサイズが決まります。

関数で Subtrees を呼び出すために、treePruneList プロパティと PruneAlpha プロパティは空以外でなければなりません。言い換えると、fitrtree を使用するときに Prune="on" を設定して tree を成長させるか、prune を使用して tree を枝刈りすることで成長させます。

例: Subtrees="all"

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

木のサイズ。次の値のいずれかとして指定します。

  • "se"resubLoss は、損失が最小値 (L+se、ここで LseSubtrees における最小値) の 1 標準偏差以内である最も高い枝刈りレベルを最適な枝刈りレベル (BestLevel) として返します。

  • "min"resubLoss は、損失が最も小さい Subtrees の要素を最適な枝刈りレベルとして返します。通常、この要素は Subtrees の最小要素です。

例: TreeSize="min"

データ型: char | string

出力引数

すべて折りたたむ

再代入損失。Subtrees と同じ長さの正の値の数値ベクトルとして返されます。それぞれの木の誤差は、Weights で重み付けされた平均二乗誤差です。LossFun を指定する場合、LossFun で計算される損失が L に反映されます。

損失の標準誤差。Subtrees と同じ長さの正の値の数値ベクトルとして返されます。

枝刈りされた部分木における葉の数。Subtrees と同じ長さの非負の値の数値ベクトルとして返されます。葉ノードは終端ノードであり、分割ではなく応答を与えます。

最適な枝刈りレベル。数値スカラーとして返されます。値は TreeSize に応じて次のようになります。

  • TreeSize"se" の場合、関数 loss は、損失が最小値 (L+se、ここで LseSubtrees における最小値) の 1 標準偏差以内である最も高い枝刈りレベルを返します。

  • TreeSize"min" の場合、関数 loss は、損失が最も小さい Subtrees の要素を返します。通常、これは Subtrees の最小要素です。

詳細

すべて折りたたむ

損失関数

組み込み損失関数は、平均二乗誤差を意味する "mse" です。

ユーザー独自の損失関数を作成するには、次の形式の関数ファイルを作成します。

function loss = lossfun(Y,Yfit,W)
  • N は、tree.X の行数です。

  • Y は、観測された応答を表す、N 要素のベクトルです。

  • Yfit は、予測された応答を表す、N 要素のベクトルです。

  • W は、観測の重みを表す、N 要素のベクトルです。

  • 出力 loss はスカラーでなければなりません。

関数ハンドル @lossfun を名前と値の引数 LossFun の値として渡します。

拡張機能

バージョン履歴

R2011a で導入