Main Content

resubPredict

クラス: ClassificationTree

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

構文

label = resubPredict(tree)
[label,posterior] = resubPredict(tree)
[label,posterior,node] = resubPredict(tree)
[label,posterior,node,cnum] = resubPredict(tree)
[label,...] = resubPredict(tree,Name,Value)

説明

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 の引数ペアで指定された追加オプションを使用して、再代入予測を返します。

入力引数

すべて展開する

tree

fitctree によって構築された分類木。

名前と値の引数

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

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

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

出力引数

label

応答 tree は、学習データについて予測します。label は、学習応答データ tree.Y と同じデータ型です。

Subtrees 名前と値のペアの引数には、m>1 のエントリが含まれる場合、label には m 列が含まれ、それぞれが対応するサブツリーの予測を表します。エントリが含まれない場合、label はベクトルです。

posterior

tree が予測するクラスの事後の確率の行列または配列。

Subtrees 名前と値の引数がスカラーであるか、引数がない場合、posterior は、nk 列の行列です。ここで n は学習データ tree.X の行数、k はクラスの数です。

Subtreesm>1 のエントリが含まれる場合、posterior は、n x k x m の行列です。ここで各 m の行列は、対応するサブツリーでの事後の確率を示します。

node

各データ行に関連付けられる、tree のノード数。

Subtrees 名前と値の引数がスカラーであるか、引数がない場合、node は、tree.X と同じ行数の n 行をもつ数値列ベクトルです。

Subtreesm>1 のエントリが含まれる場合、node は、n x m の行列です。各列は、対応するサブツリーのノード予測を表します。

cnum

tree が再代入データで予測するクラス数。

Subtrees 名前と値の引数がスカラーであるか、引数がない場合、cnum は、tree.X と同じ行数の n 行をもつ数値列ベクトルです。

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

すべて展開する

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

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');

{"String":"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.","Tex":[],"LaTex":[]}

この分類木には 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")

{"String":"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.","Tex":[],"LaTex":[]}

ツリーを枝刈りします。

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

{"String":"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.","Tex":[],"LaTex":[]}

枝刈りされたツリーは、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

詳細

すべて展開する

拡張機能