メインコンテンツ

cvloss

分類木モデルの交差検証による分類誤差

説明

E = cvloss(tree) は、学習済み分類木モデル tree の交差検証による分類誤差 (損失) E を返します。関数 cvloss は層化区分を使用して交差検証済みのセットを作成します。つまり、tree に学習をさせるために使用したデータとほぼ同じ比率のクラスが各分割に含まれます。

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

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

すべて折りたたむ

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

ionosphere データ セットを読み込みます。

load ionosphere

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

Mdl = fitctree(X,Y);

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

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

E は 10 分割の誤分類誤差です。

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

ionosphere データ セットを読み込みます。

load ionosphere

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

Mdl = fitctree(X,Y);
view(Mdl,'Mode','graph')

Figure Classification 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

最大の枝刈りレベルを除く各部分木について、5 分割の交差検証誤差を計算します。すべての部分木で最適な枝刈りレベルを返すように指定します。

rng(1); % For reproducibility
m = max(Mdl.PruneList) - 1
m = 
7
[E,~,~,bestLevel] = cvloss(Mdl,'Subtrees',0:m,'KFold',5)
E = 8×1

    0.1282
    0.1254
    0.1225
    0.1282
    0.1282
    0.1197
    0.0997
    0.1738

bestLevel = 
6

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

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

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

Figure Classification 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

入力引数

すべて折りたたむ

分類木モデル。fitctree で学習させた ClassificationTree モデル オブジェクトとして指定します。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを 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 プロパティは空以外でなければなりません。言い換えると、fitctree を使用するときに 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 を返しません。また、kfoldLoss では分類誤差以外の誤差を調べることはできません。

拡張機能

すべて展開する

バージョン履歴

R2011a で導入