Main Content

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

resubLoss

再代入による回帰誤差

説明

L = resubLoss(tree) は、再代入損失を返します。これは、fitrtreetree の作成に使用したデータで計算した損失です。

L = resubLoss(tree,Name=Value) は、1 つ以上の名前と値の引数で指定された追加オプションを使用して再代入損失を返します。

[L,se] = resubLoss(___) は、分類誤差の標準誤差も返します。

[L,se,NLeaf] = resubLoss(___) は、葉ノードの数も返します。

[L,se,NLeaf,bestLevel] = resubLoss(___) は、最適な枝刈りレベルも返します。既定では、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");

Figure Regression tree viewer contains an axes object and other objects of type uimenu, uicontrol. The axes object contains 27 objects of type line, text. One or more of the lines displays its values using only markers

この回帰木には 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")

Figure Regression tree viewer contains an axes object and other objects of type uimenu, uicontrol. The axes object contains 15 objects of type line, text. One or more of the lines displays its values using only markers

入力引数

すべて折りたたむ

回帰木。関数 fitrtree を使用して作成した RegressionTree オブジェクトとして指定します。

名前と値の引数

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

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

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

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

損失関数。平均二乗誤差を意味する "mse" または関数ハンドルを指定します。

損失関数に説明されている構文の、独自の損失関数を作成できます。

データ型: 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 プロパティを空にすることはできません。言い換えると、Prune="on" を設定して tree を成長させるか、prune を使用して tree の枝刈りを行います。

例: Subtrees="all"

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

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

  • "se" — 関数 resubloss は、最小の 1 標準偏差内の損失 (L+se、このとき L および se は、Subtrees での最小値に相関します) をもつ、最も高い枝刈りレベルを返します。

  • "min" — 関数 resubloss は、最も損失が少ない Subtrees の要素を戻します。通常、これは Subtrees の最小要素です。

例: TreeSize="min"

出力引数

すべて折りたたむ

回帰損失。長さが Subtrees のベクトルとして返されます。

損失の標準誤差。長さが Subtrees のベクトルとして返されます。

枝刈りされた部分木における葉 (終端ノード) の数。長さが Subtrees のベクトルとして返されます。

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

  • TreeSize"se" の場合、bestLevel は、最小の 1 標準偏差内の損失 (L+se、このとき L および se は、Subtrees での最小値に相関します) をもつ、最も高い枝刈りレベルです。

  • TreeSize"min" の場合、bestLevel は、最も損失が少ない Subtrees の要素です。通常、これは Subtrees の最小要素です。

詳細

すべて折りたたむ

損失関数

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

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

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

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

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

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

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

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

拡張機能

バージョン履歴

R2011a で導入