Main Content

resubLoss

クラス: RegressionTree

再代入による回帰誤差

構文

L = resubLoss(tree)
L = resubLoss(tree,Name,Value)
L = resubLoss(tree,'Subtrees',subtreevector)
[L,se] = resubLoss(tree,'Subtrees',subtreevector)
[L,se,NLeaf] = resubLoss(tree,'Subtrees',subtreevector)
[L,se,NLeaf,bestlevel] = resubLoss(tree,'Subtrees',subtreevector)
[L,...] = resubLoss(tree,'Subtrees',subtreevector,Name,Value)

説明

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

L = resubLoss(tree,Name,Value) は、1 つ以上の Name,Value のペア引数で指定された追加オプションを使用して、損失を返します。Name1,Value1,…,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

L = resubLoss(tree,'Subtrees',subtreevector) は、枝刈り順序 subtreevector 内のツリーで平均二乗誤差のベクトルを返します。

[L,se] = resubLoss(tree,'Subtrees',subtreevector) は、分類誤差の標準誤差ベクトルを返します。

[L,se,NLeaf] = resubLoss(tree,'Subtrees',subtreevector) は、枝刈りしたシーケンスのツリーの葉ノードの数を示すベクトルを返します。

[L,se,NLeaf,bestlevel] = resubLoss(tree,'Subtrees',subtreevector) は、TreeSize 名前と値のペアに定義された最適な枝刈りレベルを返します。既定では、bestlevel は、最も損失の少ない、1 標準偏差内の損失の枝刈りレベルです。

[L,...] = resubLoss(tree,'Subtrees',subtreevector,Name,Value) は、1 つ以上の Name,Value のペア引数で指定された追加オプションを使用して、損失統計を返します。Name1,Value1,…,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

入力引数

すべて展開する

fitrtree を使用して構築された回帰木 (RegressionTree モデル オブジェクト)。

名前と値の引数

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

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

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

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

データ型: char | string | function_handle

枝刈りしたサブツリーに関連する Name,Value 引数。

枝刈りレベル。'Subtrees' と昇順の非負の整数のベクトルまたは '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'loss は、損失が最小値から 1 標準偏差以内 (L + se 以内) である枝刈りレベルの中で最大のものを返します。LseSubtrees の最小値に関するものです。

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

出力引数

すべて展開する

回帰損失 (平均二乗誤差)。長さ Subtrees のベクトル。誤差の意味は、Weights および LossFun の値によって異なります。

損失の標準誤差。Subtrees の長さのベクトル。

枝刈りされたサブツリー内の葉 (端末ノード) の数。Subtrees の長さのベクトル。

TreeSize によって値が異なるスカラー。

  • TreeSize = 'se'loss は、損失が最小値から 1 標準偏差以内 (L + se 以内) である枝刈りレベルの中で最大のものを返します。LseSubtrees の最小値に関するものです。

  • TreeSize = 'min'loss は、最も損失が少ない Subtrees の要素を返します。通常、これは Subtrees の最小要素です。

すべて展開する

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

詳細

すべて展開する

拡張機能