ドキュメンテーション

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

predict

分類木の使用によるラベルの予測

構文

label = predict(Mdl,X)
label = predict(Mdl,X,Name,Value)
[label,score,node,cnum] = predict(___)

説明

label = predict(Mdl,X) は、学習済みの完全またはコンパクトな分類木 Mdl に基づいて、テーブルまたは行列 X 内の予測子データに対する予測クラス ラベルのベクトルを返します。

label = predict(Mdl,X,Name,Value) は、1 つ以上の Name,Value 引数のペアによって指定された追加オプションを使用します。たとえば、Mdl を特定のレベルまで枝刈りした後にラベルを予測するように指定できます。

[label,score,node,cnum] = predict(___) は、前の構文の入力引数のいずれかを使用して、さらに以下を返します。

  • ラベルが特定のクラスから派生する尤度を示す分類スコアの行列 (score)。分類木の場合、スコアは事後確率です。X 内の各観測値について、予測クラス ラベルは、すべてのクラスの中で最小の予測誤分類コストに対応します。

  • 分類の予測ノード番号のベクトル (node)。

  • 分類の予測クラス番号のベクトル (cnum)。

入力引数

すべて展開する

学習済みの分類木。ClassificationTree または CompactClassificationTree モデル オブジェクトを指定します。つまり、Mdlfitctree または compact が返す学習済み分類モデルです。

分類対象の予測子データ。数値行列またはテーブルを指定します。

X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

  • 数値行列の場合

    • X の列を構成する変数の順序は、Mdl に学習させた予測子変数の順序と同じでなければなりません。

    • テーブル (たとえば Tbl) を使用して Mdl に学習をさせた場合、Tbl に含まれている予測子変数がすべて数値変数であれば、X を数値行列にすることができます。学習時に Tbl 内の数値予測子をカテゴリカルとして扱うには、fitctree の名前と値のペアの引数 CategoricalPredictors を使用してカテゴリカル予測子を同定します。Tbl に種類の異なる予測子変数 (数値および categorical データ型など) が混在し、X が数値行列である場合、predict でエラーがスローされます。

  • テーブルの場合

    • predict は、文字ベクトルの cell 配列ではない cell 配列と複数列の変数をサポートしません。

    • テーブル (たとえば Tbl) を使用して Mdl に学習をさせた場合、X 内のすべての予測子変数は変数名およびデータ型が、Mdl に学習させた (Mdl.PredictorNames に格納されている) 変数と同じでなければなりません。ただし、X の列の順序が Tbl の列の順序に対応する必要はありません。TblX に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict はこれらを無視します。

    • 数値行列を使用して Mdl に学習をさせた場合、Mdl.PredictorNames 内の予測子名と X 内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定する方法については、fitctree の名前と値のペアの引数 PredictorNames を参照してください。X 内の予測子変数はすべて数値ベクトルでなければなりません。X に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict はこれらを無視します。

データ型: テーブル | double | single

名前と値のペアの引数

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

枝刈りレベル。'Subtrees' と昇順の非負の整数のベクトルまたは 'all' から構成されるコンマ区切りのペアとして指定します。

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

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

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

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

例: 'Subtrees','all'

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

出力引数

すべて展開する

予測クラス ラベル。ベクトルまたは配列として返されます。label の各エントリは、X に対応する行で予測コストが最小のクラスと一致します。

SubtreesT 個の要素が含まれている数値ベクトルであり ('all' の場合、Subtrees 参照)、X には N 行があるとします。

  • 応答のデータ型が char の場合、次のようになります。

    • T = 1 の場合、labelN 行が含まれている文字行列になります。各行には、部分木 Subtrees によって生成された予測ラベルが格納されます。

    • T > 1 の場合、labelNT 列の cell 配列になります。

  • それ以外の場合、label は応答と同じデータ型の NT 列の配列になります。(string 配列は文字ベクトルの cell 配列として扱われます)。

後の 2 つの場合、部分木 Subtrees(j) によって生成された予測ラベルのベクトルが label の列 j に格納されます。

事後確率。NK 列の数値行列として返されます。NX に含まれている観測値 (行) の数、K は (Mdl.ClassNames に含まれている) クラスの数です。score(i,j) は、X の行 i がクラス j である事後確率です。

SubtreesT 個の要素が、XN 個の行が含まれている場合、scoreN x K x T の配列、nodecnumNT 列の行列になります。

予測したクラスのノード番号。数値ベクトルとして返されます。各エントリは、X の対応する行で Mdl 内の予測されるノードに対応します。

予測した labels に対応するクラスの番号。数値ベクトルとして返されます。cnum の各エントリは、X の対応する行で予測されるクラス番号に対応します。

すべて展開する

学習から除外されたデータセットの数行について予測を確認します。

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris

データを学習セット (50%) と検定セット (50%) に分割します。

n = size(meas,1);
rng(1) % For reproducibility
idxTrn = false(n,1);
idxTrn(randsample(n,round(0.5*n))) = true; % Training set logical indices
idxVal = idxTrn == false;                  % Validation set logical indices

学習セットを使用して分類木を成長させます。

Mdl = fitctree(meas(idxTrn,:),species(idxTrn));

検定データのラベルを予測します。誤分類した観測値の数をカウントします。

label = predict(Mdl,meas(idxVal,:));
label(randsample(numel(label),5)) % Display several predicted labels
ans = 5x1 cell array
    {'setosa'    }
    {'setosa'    }
    {'setosa'    }
    {'virginica' }
    {'versicolor'}

numMisclass = sum(~strcmp(label,species(idxVal)))
numMisclass = 3

3 つの標本外観測値が誤分類されています。

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris

データを学習セット (50%) と検定セット (50%) に分割します。

n = size(meas,1);
rng(1) % For reproducibility
idxTrn = false(n,1);
idxTrn(randsample(n,round(0.5*n))) = true; % Training set logical indices
idxVal = idxTrn == false;                  % Validation set logical indices

学習セットを使用して分類木を成長させ、表示します。

Mdl = fitctree(meas(idxTrn,:),species(idxTrn));
view(Mdl,'Mode','graph')

生成された木には 4 つのレベルがあります。

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

[~,Posterior] = predict(Mdl,meas(idxVal,:),'SubTrees',[1 3]);
Mdl.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Posterior(randsample(size(Posterior,1),5),:,:),...
    % Display several posterior probabilities
ans = 
ans(:,:,1) =

    1.0000         0         0
    1.0000         0         0
    1.0000         0         0
         0         0    1.0000
         0    0.8571    0.1429


ans(:,:,2) =

    0.3733    0.3200    0.3067
    0.3733    0.3200    0.3067
    0.3733    0.3200    0.3067
    0.3733    0.3200    0.3067
    0.3733    0.3200    0.3067

Posterior の要素はクラスの事後確率です。

  • 各行は検定セットの観測値に対応します。

  • 各列は Mdl.ClassNames に含まれているクラスに対応します。

  • 各ページは部分木に対応します。

レベル 1 まで枝刈りした部分木は、レベル 3 (ルート ノード) まで枝刈りした部分木より予測が確実です。

詳細

すべて展開する

アルゴリズム

predict は、葉ノードまたは欠損値に達するまで、Mdl の枝に沿って予測を生成します。predict が、葉ノードに達したら、そのノードの分類が返されます。

predict が予測子の欠損値をもつノードに達した場合の振る舞いは、fitctreeMdl を作成したときの Surrogate 名前と値のペアの設定により異なります。

  • Surrogate = 'off' (既定値) — predict は、そのノードに達する学習標本の最大数をもつラベルを返します。

  • Surrogate = 'on'predict は、そのノードで最適な代理分岐を使用します。正の"関連性予測尺度"を含むすべての代理分岐変数がない場合、predict は、そのノードに達する学習標本の最大数をもつラベルを返します。この定義については、関連性予測尺度を参照してください。

拡張機能

R2011a で導入