メインコンテンツ

resubPredict

再代入による分類木の観測値の分類

説明

label = resubPredict(tree) は、tree.X に格納されている予測子データを使用して、学習済み分類木モデル tree の予測クラス ラベルを返します。label のデータ型は学習応答データ tree.Y と同じす。

label = resubPredict(tree,Subtrees=subtrees) は、subtrees で指定されたレベルまで tree の枝刈りも行います。

[label,posterior,node,cnum] = resubPredict(tree) は、前の構文におけるいずれかの入力引数を使用して、再代入データの tree の事後クラス確率、予測クラス番号、ノード番号も返します。

すべて折りたたむ

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

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

入力引数

すべて折りたたむ

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

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

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

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

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

関数で subtrees を呼び出すために、treePruneList プロパティと PruneAlpha プロパティは空以外でなければなりません。言い換えると、fitctree を使用するときに Prune="on" を設定して tree を成長させるか、prune を使用して tree を枝刈りすることで成長させます。

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

出力引数

すべて折りたたむ

学習データに対する予測クラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として返されます。label のデータ型は学習応答データ tree.Y と同じです。

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

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

subtrees がスカラーであるか指定されていない場合、resubPredictposteriornk 列の数値行列として返します。ここで、n は学習データ tree.X の行数、k はクラスの数です。

subtreesm > 1 のエントリが含まれる場合、resubPredictposteriorn×k×m の数値配列として返します。ここで、それぞれの m の行列は対応する部分木の事後確率を示します。

予測クラスのノード番号。数値列ベクトルまたは数値行列として返されます。

subtrees がスカラーであるか指定されていない場合、resubPredictnoden 行 (tree.X と同じ行数) の数値列ベクトルとして返します。

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

再代入データの予測クラス番号。数値列ベクトルまたは数値行列として返されます。

subtrees がスカラーであるか指定されていない場合、cnumn 行 (tree.X と同じ行数) の数値列ベクトルになります。

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

詳細

すべて折りたたむ

拡張機能

すべて展開する

バージョン履歴

R2011a で導入