Main Content

cvloss

回帰木モデルの交差検証による回帰誤差

説明

E = cvloss(tree) は、学習済み回帰木モデル tree の交差検証による回帰誤差 (損失) E を返します。

[E,SE,Nleaf,BestLevel] = cvloss(tree) は、E の標準誤差、tree の葉ノードの数、および tree の最適な枝刈りレベルも返します。

E = cvloss(tree,Name=Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、枝刈りレベル、木のサイズ、交差検証標本の数を指定できます。

[E,SE,Nleaf,BestLevel] = cvloss(___) は、前の構文におけるいずれかの入力引数の組み合わせを使用して、E の標準誤差、tree の葉ノードの数、および tree の最適な枝刈りレベルも返します。

すべて折りたたむ

既定の回帰木について交差検証誤差を計算します。

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

load carsmall
X = [Displacement Horsepower Weight];

データ セット全体を使用して回帰木を成長させます。

Mdl = fitrtree(X,MPG);

交差検証誤差を計算します。

rng(1); % For reproducibility
E = cvloss(Mdl)
E = 27.6976

E は、(分割内のテスト観測値の個数で重みを付けた) 10 分割の加重平均 MSE です。

k 分割の交差検証を適用して、すべての部分木について最適な回帰木の枝刈りレベルを探索します。

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

load carsmall
X = [Displacement Horsepower Weight];

データ セット全体を使用して回帰木を成長させます。生成された木を表示します。

Mdl = fitrtree(X,MPG);
view(Mdl,Mode="graph")

最下位から 2 つおよび最上位の枝刈りレベルを除き、部分木ごとに 5 分割の交差検証誤差を計算します。すべての部分木で最適な枝刈りレベルを返すように指定します。

rng(1); % For reproducibility
m = max(Mdl.PruneList) - 1
m = 15
[~,~,~,bestLevel] = cvloss(Mdl,SubTrees=2:m,KFold=5)
bestLevel = 14

15 個の枝刈りレベルの中で、最適な枝刈りレベルは 14 です。

最適なレベルまで木を枝刈りします。生成された木を表示します。

MdlPrune = prune(Mdl,Level=bestLevel);
view(MdlPrune,Mode="graph")

入力引数

すべて折りたたむ

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

名前と値の引数

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

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

例: [E,SE,Nleaf,BestLevel] = cvloss(tree,KFold=5) は、5 個の交差検証標本を使用するように指定します。

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

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

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

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

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

例: Subtrees="all"

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

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

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

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

例: TreeSize="min"

データ型: char | string

交差検証標本の数。1 より大きい正の整数値として指定します。

例: KFold=8

データ型: single | double

出力引数

すべて折りたたむ

交差検証の平均二乗誤差 (損失)。Subtrees と同じ長さの数値ベクトルとして返されます。

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

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

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

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

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

代替方法

crossval を使用して交差検証木のモデルを作成し、cvloss の代わりに kfoldLoss を呼び出すことができます。交差検証を行った木を複数回調べる場合、この代替方法では時間が節約できる可能性があります。

ただし、cvloss と異なり、kfoldLossSENleaf、または BestLevel を返しません。

拡張機能

バージョン履歴

R2011a で導入