Main Content

resubPredict

分類木の再代入ラベルを予測

説明

label = resubPredict(tree) は、データ tree.X について tree が予測したラベルを返します。label は、関数 fitctreetree の作成に使用したデータに関する tree の予測です。

[label,posterior] = resubPredict(tree) は、予測に対する事後のクラス確率を返します。

[label,posterior,node] = resubPredict(tree) は、再代入データでの tree のノード数を返します。

[label,posterior,node,cnum] = resubPredict(tree) は、この予測での予測されるクラス数を返します。

[label,___] = resubPredict(tree,Name,Value) では、1 つ以上の Name,Value の引数ペアで指定された追加オプションを使用して、再代入予測を返します。

すべて折りたたむ

分類木では誤分類されるフィッシャーのアヤメのデータの総数を求めます。

load fisheriris
tree = fitctree(meas,species);
Ypredict = resubPredict(tree);    % The predictions
Ysame = strcmp(Ypredict,species); % True when ==
sum(~Ysame) % How many are different?
ans = 3

フィッシャーのアヤメのデータセットを読み込みます。データを学習セット (50%) に分割します。

load fisheriris

すべての花弁の測定値を使用して分類木を成長させます。

Mdl = fitctree(meas(:,3:4),species);
n = size(meas,1); % Sample size
K = numel(Mdl.ClassNames); % Number of classes

分類木を表示します。

view(Mdl,'Mode','graph');

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

この分類木には 4 つの枝刈りレベルがあります。レベル 0 は、(表示のように) 枝刈りされていない完全な木です。レベル 4 はルート ノードのみ (分割なし) です。

レベル 1 および 3 まで枝刈りした部分木を使用して、各クラスの事後確率を推定します。

[~,Posterior] = resubPredict(Mdl,'SubTrees',[1 3]);

Posterior は、事後確率が格納されている n x K x 2 の配列です。Posterior の各行は観測値に、各列は Mdl.ClassNames の順序でクラスに、各ページは枝刈りレベルに対応します。

各部分木を使用して、アヤメ 125 のクラス事後確率を表示します。

Posterior(125,:,:)
ans = 
ans(:,:,1) =

         0    0.0217    0.9783


ans(:,:,2) =

         0    0.5000    0.5000

決定株 (Posterior の 2 ページ) では、アヤメ 125 が versicolor と virginica のどちらであるかを正しく予測することが困難です。

予測子 XX < 0.15 または X > 0.95 の場合は true に分類し、それ以外の場合は false に分類します。

0 と 1 の間で一様分布する 100 個の乱数を生成し、ツリー モデルを使用してそれらを分類します。

rng("default") % For reproducibility
X = rand(100,1);
Y = (abs(X - 0.55) > 0.4);
tree = fitctree(X,Y);
view(tree,"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

ツリーを枝刈りします。

tree1 = prune(tree,"Level",1);
view(tree1,"Mode","graph")

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

枝刈りされたツリーは、0.15 未満の観測値を正しく true に分類しています。また、0.15 から 0.95 までの観測値についても、正しく false に分類しています。しかし、0.95 より大きい観測値は false に誤って分類されます。そのため、0.15 より大きい観測値のスコアは、true では 0.05/0.85=0.06、false では 0.8/0.85=0.94 になります。

X の先頭から 10 行までの予測スコア (事後確率) を計算します。

[~,score] = resubPredict(tree1);
[score(1:10,:) X(1:10)]
ans = 10×3

    0.9059    0.0941    0.8147
    0.9059    0.0941    0.9058
         0    1.0000    0.1270
    0.9059    0.0941    0.9134
    0.9059    0.0941    0.6324
         0    1.0000    0.0975
    0.9059    0.0941    0.2785
    0.9059    0.0941    0.5469
    0.9059    0.0941    0.9575
    0.9059    0.0941    0.9649

実際に、X で 0.15 より小さいすべての値 (右端の列) には、0 と 1 のスコアが関連付けられ (左の列と中央の列)、X のその他の値には、約 0.91 と 0.09 のスコアが関連付けられています。スコアの違い (想定した 0.06 ではなく、0.09) は、統計変動によるものです。範囲 (0.95,1) の X には、想定した 5 個ではなく 8 個の観測値があります。

sum(X > 0.95)
ans = 8

入力引数

すべて折りたたむ

分類木。ClassificationTree オブジェクトとして指定します。分類木オブジェクトの作成には関数 fitctree を使用します。

名前と値の引数

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

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

例: [~,posterior] = resubPredict(tree,'SubTrees',[1 3]);

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

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

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

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

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

例: Subtrees="all"

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

出力引数

すべて折りたたむ

学習データについて tree で予測される応答。ベクトルまたは行列として返されます。label のデータ型は学習応答データ tree.Y と同じです。

名前と値のペアの引数 Subtreesm>1 のエントリが含まれる場合、labelm 列の行列として返され、各列が対応する部分木の予測を表します。それ以外の場合、label はベクトルとして返されます。

tree で予測されるクラスの事後確率。行列または配列として返されます。

名前と値の引数 Subtrees がスカラーであるか指定されていない場合、posteriornk 列の行列になります。ここで、n は学習データ tree.X の行数、k はクラスの数です。

Subtreesm>1 のエントリが含まれる場合、posteriorn×k×m の配列になります。ここで、それぞれの m の行列は対応する部分木の事後確率を示します。

各データ行に関連付けられる tree のノード数。ベクトルまたは行列として返されます。

名前と値の引数 Subtrees がスカラーであるか指定されていない場合、nodetree.X と同じ行数の n 行をもつ数値列ベクトルになります。

Subtreesm>1 のエントリが含まれる場合、nodenm 列の行列になります。各列は、対応するサブツリーのノード予測を表します。

再代入データについて tree で予測されるクラス数。ベクトルまたは行列として返されます。

名前と値の引数 Subtrees がスカラーであるか指定されていない場合、cnumtree.X と同じ行数の n 行をもつ数値列ベクトルになります。

Subtreesm>1 のエントリが含まれる場合、cnumnm 列の行列になります。各列は、対応するサブツリーのクラス予測を表します。

詳細

すべて折りたたむ

事後確率

あるノードにおける分類の事後確率とは、分類によって実際にそのノードに達するのに要した学習シーケンスの数を、そのノードまでの学習シーケンスの数で除算した値です。

例については、分類木の事後確率の定義を参照してください。

拡張機能

バージョン履歴

R2011a で導入