Main Content

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

cvloss

交差検証による回帰誤差

説明

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

[E,SE] = cvloss(tree) は、E の標準誤差も返します。

[E,SE,Nleaf] = cvloss(tree) は、tree の葉 (終端ノード) の数を返します。

[E,SE,Nleaf,bestLevel] = cvloss(tree) は、tree の最適な枝刈りレベルを返します。

[___] = cvloss(tree,Name=Value) は、1 つ以上の名前と値の引数で指定された追加オプションを使用して交差検証を行います。

すべて折りたたむ

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

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")

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

最下位から 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")

Figure Regression tree viewer contains an axes object and other objects of type uimenu, uicontrol. The axes object contains 12 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 は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

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

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

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

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

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

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

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

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

例: Subtrees="all"

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

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

  • "se" — 関数 cvloss は、コストが最小コストの 1 標準誤差以内になる最小の木を使用します。

  • "min" — 関数 cvloss は最小コストの木を使用します。

例: TreeSize="min"

交差検証木で使用する分割の数。1 より大きい正の整数として指定します。

例: KFold=8

出力引数

すべて折りたたむ

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

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

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

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

  • TreeSize"se" の場合、誤差が最小の SE の範囲内にある E の値を達成できる最大の枝刈りレベルが bestLevel になります。

  • TreeSize"min" の場合、Subtrees の最小値が bestLevel になります。

代替方法

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

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

拡張機能

バージョン履歴

R2011a で導入

参考

crossval | | |