ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

cvloss

クラス: ClassificationTree

交差検証による分類誤差

説明

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

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

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

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

[___] = cvloss(tree,Name,Value) は、前の構文のいずれかを使用し、1 つ以上の Name,Value ペア引数で指定されたオプションを追加して、交差検証を行います。Name1,Value1,…,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

入力引数

すべて展開する

学習済みの分類木。fitctree が生成した ClassificationTree モデル オブジェクトを指定します。

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

枝刈りレベル。'Subtrees' と昇順の非負の整数のベクトルまたは '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

木のサイズ。'TreeSize' と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。

  • 'se'cvloss は、コストが最小コストの 1 標準誤差以内になる最小のツリーを使用します。

  • 'min'cvloss は最小コストのツリーを使用します。

例: 'TreeSize','min'

交差検証標本の数。KFold と 1 より大きい正の整数値から構成されるコンマ区切りのペアとして指定します。

例: 'KFold',8

出力引数

すべて展開する

交差検証の分類誤差 (損失)。名前と値のペア Subtrees の設定に応じてベクトルまたはスカラーが返されます。

E の標準誤差。名前と値のペア Subtrees の設定に応じてベクトルまたはスカラーが返されます。

tree の葉ノードの数。名前と値のペア Subtrees の設定に応じてベクトルまたはスカラーが返されます。葉ノードは終了ノードであり、分割ではなく分類を作成します。

最適な枝刈りレベル。スカラー値として返されます。既定の設定では、誤差が最小の SE の範囲内にある、E の値を達成できる最大の枝刈りレベルを表すスカラーです。TreeSize'min' に設定した場合は、BestLevel は、Subtrees の最小値です。

すべて展開する

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

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

load ionosphere

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

Mdl = fitctree(X,Y);

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

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

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

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

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

load ionosphere

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

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

最大の枝刈りレベルを除く各部分木について、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.1368
    0.1339
    0.1311
    0.1339
    0.1339
    0.1254
    0.0997
    0.1738

bestLevel = 6

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

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

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

代替方法

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

しかし、cvloss と異なり、kfoldLossSENleaf および BestLevel を返しません。また、kfoldLoss では分類誤差以外の誤差を調べることはできません。