Main Content

ClassificationTree

マルチクラス分類用の二分決定木

説明

ClassificationTree オブジェクトはバイナリ分割により分類を行う決定木を示します。このクラスのオブジェクトは、predict を使用して、新しいデータに対する応答を予測できます。オブジェクトには学習に使用したデータが格納されているため、resubPredict を使用して再代入予測も計算できます。

作成

ClassificationTree オブジェクトの作成には fitctree を使用します。

プロパティ

すべて展開する

この プロパティ は読み取り専用です。

数値予測子のビンのエッジ。p 個の数値ベクトルが含まれている cell 配列を指定します。p は予測子の個数です。各ベクトルには、数値予測子のビンのエッジを含めます。カテゴリカル予測子はビン化されないので、カテゴリカル予測子の場合は、この cell 配列の要素を空にします。

数値予測子がビン化されるのは、木学習器を使用してモデルに学習をさせるときに名前と値の引数 'NumBins' として正の整数スカラーを指定した場合だけです。'NumBins' の値が空 (既定) である場合、BinEdges プロパティは空になります。

学習済みモデル mdlBinEdges プロパティを使用することにより、ビン化された予測子データ Xbinned を再現できます。

X = mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
    idxNumeric = idxNumeric';
end
for j = idxNumeric 
    x = X(:,j);
    % Convert x to array if x is a table.
    if istable(x) 
        x = table2array(x);
    end
    % Group x into bins by using the discretize function.
    xbinned = discretize(x,[-inf; edges{j}; inf]); 
    Xbinned(:,j) = xbinned;
end
数値予測子の場合、1 からビンの個数までの範囲にあるビンのインデックスが Xbinned に格納されます。カテゴリカル予測子の場合、Xbinned の値は 0 になります。XNaN が含まれている場合、対応する Xbinned の値は NaN になります。

この プロパティ は読み取り専用です。

カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: single | double

この プロパティ は読み取り専用です。

カテゴリカル分割。n 行 2 列の cell 配列として返されます。ここで、ntree 内のカテゴリカル分割の数です。CategoricalSplit の各行は、カテゴリカル分割用の左と右の値になります。カテゴリカル予測子変数 z に基づくカテゴリカル分割をもつ各枝ノード j において、zCategoricalSplit(j,1) にあれば左の子を選択し、zCategoricalSplit(j,2) にあれば右の子を選択します。分割はツリーのノードと同じ順序で行われます。これらの分割用のノードは、cuttype を実行し 'categorical' カットを上から下に選択すれば見つかります。

データ型: cell

この プロパティ は読み取り専用です。

ツリー内の各ノードの子ノードの数。n 行 2 列の配列として返されます。ここで、n はノード数です。葉ノードは子ノード 0 をもちます。

データ型: double

この プロパティ は読み取り専用です。

tree 内のノードのクラス カウント。nk 列の配列として返されます。ここで、n はノード数、k はクラス数です。任意のノード番号 i に対して、クラス カウント ClassCount(i,:) はノード i の条件を満たす各クラスからの (ツリーの当てはめに使用したデータからの) 観測カウント数です。

データ型: double

この プロパティ は読み取り専用です。

重複が削除された Y の要素のリスト。categorical 配列、文字ベクトルの cell 配列、文字配列、logical ベクトル、または数値ベクトルとして返されます。ClassNames のデータ型は引数 Y のデータと同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。

データ型: double | logical | char | cell | categorical

この プロパティ は読み取り専用です。

tree 内のノードのクラス確率。nk 列の配列として返されます。ここで、n はノード数、k はクラス数です。任意のノード番号 i に対して、クラス確率 ClassProbability(i,:) は、ノード i の条件を満たすポイントに対する各クラスの推定確率です。

データ型: double

真のクラスが i である場合に点をクラス j に分類するコスト。正方行列として返されます。Cost の行は真のクラスに対応し、列は予測クラスに対応します。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。Cost の行および列の数は、応答に含まれている一意なクラスの数です。

データ型: double

この プロパティ は読み取り専用です。

tree 内の枝で使用されるカテゴリ。n 行 2 列の cell 配列として返されます。ここで、n はノード数です。カテゴリカル予測子変数 X に基づく各枝ノード i に対して、XCutCategories{i,1} 内のカテゴリである場合は左側の子が選択され、XCutCategories{i,2} 内のカテゴリである場合は右側の子が選択されます。連続予測子に基づく枝ノードと葉ノードに対する CutCategories の列は両方とも空です。

CutPoint には 'continuous' 切り取りの切り取り点が含まれ、CutCategories にはカテゴリ セットが含まれます。

データ型: cell

この プロパティ は読み取り専用です。

tree 内の切り取り点として使用される値。n 要素のベクトルとして返されます。ここで、n はノード数です。連続予測子変数 X に基づく各枝ノード i において、X<CutPoint(i) の場合は左側の子が選択され、X>=CutPoint(i) の場合は右側の子が選択されます。カテゴリカル予測子に基づく枝ノードと葉ノードに対する CutPointNaN です。

CutPoint には 'continuous' 切り取りの切り取り点が含まれ、CutCategories にはカテゴリ セットが含まれます。

データ型: double

この プロパティ は読み取り専用です。

tree 内の各ノードの分枝に使用される変数の名前。n 要素の cell 配列として返されます。ここで、n はノード数です。これらの変数は、"切り取り変数" と呼ばれることもあります。葉ノードの場合、CutPredictor には空の文字ベクトルが格納されます。

CutPoint には 'continuous' 切り取りの切り取り点が含まれ、CutCategories にはカテゴリ セットが含まれます。

データ型: cell

この プロパティ は読み取り専用です。

tree 内の各ノードの分枝に使用される変数のインデックス。n 要素の配列として返されます。ここで、n はノード数です。詳細については、CutPredictor を参照してください。

データ型: double

この プロパティ は読み取り専用です。

tree 内の各ノードの切り取りのタイプ。n 要素の cell 配列として返されます。ここで、n はノード数です。各ノード i に対して CutType{i} は次のいずれかです。

  • 'continuous' — 変数 X と切り取り点 v に対して、切り取りが X < v 形式で定義されている場合。

  • 'categorical' — 変数 X がカテゴリ セット内の値を受け取るかどうかによって切り取りが定義されている場合。

  • ''i が葉ノードの場合。

CutPoint には 'continuous' 切り取りの切り取り点が含まれ、CutCategories にはカテゴリ セットが含まれます。

データ型: cell

この プロパティ は読み取り専用です。

展開された予測子名。文字ベクトルの cell 配列として返されます。

モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNamesPredictorNames と同じです。

データ型: cell

この プロパティ は読み取り専用です。

ハイパーパラメーターの交差検証最適化の説明。BayesianOptimization オブジェクト、またはハイパーパラメーターと関連する値の table として返されます。作成時に名前と値のペア OptimizeHyperparameters が空ではない場合、これは空ではありません。値は、作成時の名前と値のペア HyperparameterOptimizationOptions の設定によって決まります。

  • 'bayesopt' (既定) — BayesianOptimization クラスのオブジェクト

  • 'gridsearch' または 'randomsearch' — 使用したハイパーパラメーター、観測された目的関数の値(交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル

この プロパティ は読み取り専用です。

枝ノードのインジケーター。n 要素の logical ベクトルとして返されます。それぞれについて、tree の枝ノードの場合は true、葉ノードの場合は false になります。

データ型: logical

この プロパティ は読み取り専用です。

tree の学習に使用されるパラメーター。TreeParams オブジェクトとして返されます。すべてのパラメーター値を表示するには、「tree.ModelParameters」と入力します。特定のパラメーターにアクセスするには、ドット表記を使用します。

この プロパティ は読み取り専用です。

tree 内の各ノードの最も確からしいクラスの名前。n 個の要素をもつ cell 配列として返されます。ここで、n はツリー内のノード数です。この配列の各要素は、ClassNames に含まれているクラス名のいずれかに等しい文字ベクトルです。

データ型: cell

この プロパティ は読み取り専用です。

tree 内の各ノードの誤分類確率。n 要素のベクトルとして返されます。ここで、n はツリー内のノード数です。

データ型: double

この プロパティ は読み取り専用です。

tree 内の各ノードの条件を満たす元データ内の観測値の割合。n 要素のベクトルとして返されます。ここで、n はツリー内のノード数です。NodeProbability の値は、各クラスに割り当てられているすべての事前確率について調整された値になります。

データ型: double

この プロパティ は読み取り専用です。

tree 内の各ノードのノード確率で重み付けされた不純度。n 要素のベクトルとして返されます。ここで、n はツリー内のノード数です。不純度の尺度はノードのジニ指数または逸脱度であり、ノード確率で重み付けされます。ツリーが twoing によって成長した場合、各ノードのリスクはゼロです。

データ型: double

この プロパティ は読み取り専用です。

tree 内のノードのサイズ。n 要素のベクトルとして返されます。ここで、n はツリー内のノード数です。ノードのサイズは、ノードの条件を満たすツリーを作成するために使用されるデータ内の観測値の数になります。

データ型: double

この プロパティ は読み取り専用です。

tree 内のノードの数。正の整数として返されます。

データ型: double

この プロパティ は読み取り専用です。

学習データ内の観測値の数。正の整数として返されます。入力データまたは応答データに欠損値がある場合、NumObservations は入力データの行数よりも少なくなることがあります。

データ型: double

この プロパティ は読み取り専用です。

tree 内の各ノードの親の数。n 要素の整数ベクトルとして返されます。ここで、n はツリー内のノード数です。ルート ノードの親は 0 です。

データ型: double

この プロパティ は読み取り専用です。

予測子名。文字ベクトルの cell 配列を指定します。PredictorNames のエントリの順序は学習データと同じになります。

データ型: cell

各クラスの事前確率。m 要素のベクトルとして返されます。ここで、m は応答内の一意のクラスの数です。Prior の要素の順序は、ClassNames のクラスの順序に対応します。

データ型: double

ツリーの枝刈りのアルファ値。枝刈りレベルごとに 1 つの要素をもつ実数ベクトルとして返されます。枝刈りレベルの範囲が 0 ~ M の場合、PruneAlpha には昇順に並べ替えられた M + 1 要素が含まれます。PruneAlpha(1) は枝刈りレベル 0 (枝刈りなし) を表し、PruneAlpha(2) は枝刈りレベル 1 を表すというように続いていきます。

ɑ 値の意味については、決定木での枝刈り順序の作成方法を参照してください。

データ型: double

ツリー内の各ノードの枝刈りレベル。NumNodes 個の要素をもつ整数ベクトルとして返されます。枝刈りレベルの範囲は 0 (枝刈りなし) から M です。M は最下位の葉からルート ノードまでの距離です。

詳細については、枝刈りを参照してください。

データ型: double

この プロパティ は読み取り専用です。

応答変数の名前。文字ベクトルとして返されます。

データ型: char

この プロパティ は読み取り専用です。

当てはめに使用される元の予測子データ X の行。n 要素の logical ベクトルとして返されます。ここで、nX の行数です。オブジェクトの作成に X のすべての行を使用する場合、RowsUsed は空の配列 ([]) になります。

データ型: logical

スコアを変換するための関数。関数ハンドルまたは組み込みの変換関数の名前として指定します。'none' は変換なしを意味します。つまり、'none'@(x)x と同じ意味になります。組み込みの変換関数のリストとカスタム変換関数の構文は、fitctree を参照してください。

ドット表記を使用して関数 ScoreTransform を追加または変更します。

ctree.ScoreTransform = 'function'
% or
ctree.ScoreTransform = @function

データ型: char | string | function_handle

この プロパティ は読み取り専用です。

代理分岐に使用されるカテゴリ。n 要素の cell 配列として返されます。ここで、ntree 内のノード数です。各ノード k に対して、SurrogateCutCategories{k} は cell 配列です。SurrogateCutCategories{k} の長さは、このノードに見つかった代理予測子の数に等しくなります。SurrogateCutCategories{k} の各要素は、連続代理予測子の場合は空の文字ベクトル、カテゴリカル代理予測子の場合はカテゴリをもつ 2 要素 cell 配列になります。2 要素 cell 配列の最初の要素には、この代理分岐によって左の子に割り当てられたカテゴリがリストされ、この 2 要素 cell 配列の 2 番目の要素には、この代理分岐によって右の子に割り当てられたカテゴリがリストされます。各ノードの代理分岐変数の順序は、SurrogateCutVar に存在する変数の順序に一致します。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutCategories には空のセルが含まれます。

データ型: cell

この プロパティ は読み取り専用です。

tree 内の代理分岐に使用される数値切り取り点の割り当て。n 要素の cell 配列として返されます。ここで、ntree 内のノード数です。各ノード k に対して、SurrogateCutFlip{k} は数値ベクトルです。SurrogateCutFlip{k} の長さは、このノードに見つかった代理予測子の数に等しくなります。SurrogateCutFlip{k} の各要素はカテゴリカル代理予測子でゼロになるか、連続代理予測子で数値切り取り点の割り当てになります。数値切り取り点の割り当ては、-1 または +1 のいずれかになります。連続予測子変数 Z に基づく数値切り取り C が含まれるすべての代理分岐では、Z<C でこの代理分岐の切り取りの割り当てが +1 であるか、 ZC でこの代理分岐の切り取りの割り当てが -1 である場合に、左の子が選択されます。同様に、ZC でこの代理分岐の切り取り点割り当てが +1 であるか、 Z<C でこの代理分岐の切り取り点が -1 であれば右の子が選択されます。各ノードにおける代理分岐変数の順序は、SurrogateCutPredictor によって返される変数の順序に一致します。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutFlip には空の配列が含まれます。

データ型: cell

この プロパティ は読み取り専用です。

tree 内の代理分岐に使用される数値。n 要素の cell 配列として返されます。ここで、ntree 内のノード数です。各ノード k に対して、SurrogateCutPoint{k} は数値ベクトルです。SurrogateCutPoint{k} の長さは、このノードに見つかった代理予測子の数に等しくなります。SurrogateCutPoint{k} の各要素は、カテゴリカル代理予測子で NaN になるか、連続代理予測子で数値切り取り点になります。連続予測子変数 Z に基づく数値切り取り C が含まれるすべての代理分岐では、Z<C であり、その代理分岐の SurrogateCutFlip が +1 である場合、または ZC であり、その代理分岐の SurrogateCutFlip が -1 である場合、左の子が選択されます。同様に、ZC であり、その代理分岐の SurrogateCutFlip が +1 である場合、または Z<C であり、その代理分岐の SurrogateCutFlip が -1 である場合、右の子が選択されます。各ノードの代理分岐変数の順序は、SurrogateCutPredictor によって返される変数の順序に一致します。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutPoint には空のセルが含まれます。

データ型: cell

この プロパティ は読み取り専用です。

tree 内の各ノードの代理分岐に使用される変数の名前。n 要素の cell 配列として返されます。ここで、ntree 内のノード数です。SurrogateCutPredictor の各要素は、このノードの代理分岐変数の名前をもつ cell 配列です。変数は、最適予測子との結びつきの予測尺度によって降順に並べ替えられており、かつ正の予測尺度をもつ変数のみが含まれています。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutPredictor には空のセルが含まれます。

データ型: cell

この プロパティ は読み取り専用です。

tree 内の各ノードの代理分岐のタイプ。n 要素の cell 配列として返されます。ここで、ntree 内のノード数です。各ノードの k で、SurrogateCutType{k} はこのノードの代理分岐変数のタイプをもつ cell 配列です。変数は、最適予測子との結びつきの予測尺度によって降順に並べ替えられており、かつ正の予測尺度をもつ変数のみが含まれています。各ノードにおける代理分岐変数の順序は、SurrogateCutPredictor によって返される変数の順序に一致します。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutType には空のセルが含まれます。代理分岐のタイプは、切り取りが変数 Z に対して Z<V の形式で定義されている場合は 'continuous' に、切り取りが Z がカテゴリのセットの値を取るかどうかによって定義されている場合は切り取り点 V または 'categorical' のいずれかになります。

データ型: cell

この プロパティ は読み取り専用です。

tree 内の代理分岐の関連性予測尺度。n 要素の cell 配列として返されます。ここで、ntree 内のノード数です。各ノード k に対して、SurrogatePredictorAssociation{k} は数値ベクトルです。SurrogatePredictorAssociation{k} の長さは、このノードに見つかった代理予測子の数に等しくなります。SurrogatePredictorAssociation{k} の各要素は、最適分割とこの代理分岐間の関連性予測尺度を与えます。各ノードの代理分岐変数の順序は、SurrogateCutPredictor に存在する変数の順序になります。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogatePredictorAssociation には空のセルが含まれます。

データ型: cell

この プロパティ は読み取り専用です。

tree 内のスケーリングされた重み。数値ベクトルとして返されます。W の長さは n (学習データの行数) です。

データ型: double

この プロパティ は読み取り専用です。

予測子の値。実数行列または table として返されます。X の各列が 1 つの変数 (予測子) を表し、各行が 1 つの観測値を表します。

データ型: double | table

この プロパティ は読み取り専用です。

X の観測値に対応するクラス ラベル。categorical 配列、文字ベクトルの cell 配列、文字配列、logical ベクトル、または数値ベクトルとして返されます。Y の各行は、X の対応する行の分類を表します。

データ型: single | double | logical | char | string | cell | categorical

オブジェクト関数

compact分類木モデルのサイズの縮小
compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
crossval機械学習モデルの交差検証
cvloss分類木モデルの交差検証による分類誤差
edgeClassification edge for classification tree model
gatherGPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集
limeLocal Interpretable Model-agnostic Explanations (LIME)
loss分類木モデルの分類損失
marginClassification margins for classification tree model
nodeVariableRange決定木ノードの変数範囲の取得
partialDependence部分依存の計算
plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
predict分類木モデルを使用したラベルの予測
predictorImportanceEstimates of predictor importance for classification tree
prune分類木の枝刈りによる分類部分木のシーケンスの生成
resubEdge分類木モデルの再代入分類エッジ
resubLoss分類木モデルの再代入分類損失
resubMargin分類木モデルの再代入分類マージン
resubPredict再代入による分類木の観測値の分類
shapleyシャープレイ値
surrogateAssociation分類木における代理分岐に対する関連性の平均予測尺度
testckfold交差検証の反復により 2 つの分類モデルの精度を比較
viewView classification tree

すべて折りたたむ

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

load ionosphere
tc = fitctree(X,Y)
tc = 
  ClassificationTree
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
          NumObservations: 351


名前と値のペアのパラメーター MaxNumSplitsMinLeafSize または MinParentSize を使用すると、木の深さを制御できます。既定では、fitctree は深い決定木を成長させます。モデルの複雑さや計算時間の削減のために、より浅い木を成長させることもできます。

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

load ionosphere

分類木を成長させる場合、木の深さの制御に関する既定値は次のとおりです。

  • MaxNumSplitsn - 1n は学習標本のサイズです。

  • MinLeafSize1

  • MinParentSize10

これらの既定値を使用すると、学習標本のサイズが大きい場合に木が深く成長する傾向があります。

木の深さの制御について既定値を使用して、分類木を学習させます。10 分割の交差検証をモデルに対して実行します。

rng(1); % For reproducibility
MdlDefault = fitctree(X,Y,'CrossVal','on');

木に適用される分割数のヒストグラムを描画します。また、木の 1 つを表示します。

numBranches = @(x)sum(x.IsBranch);
mdlDefaultNumSplits = cellfun(numBranches, MdlDefault.Trained);

figure;
histogram(mdlDefaultNumSplits)

Figure contains an axes object. The axes object contains an object of type histogram.

view(MdlDefault.Trained{1},'Mode','graph')

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

分割数の平均は約 15 です。

既定の分割数を使用して学習させたものほど複雑ではない (深くない) 分類木が必要であるとします。最大分割数を 7 に設定して別の分類木を学習させることで、既定値の分類木からの平均分割数が約半分になります。10 分割の交差検証をモデルに対して実行します。

Mdl7 = fitctree(X,Y,'MaxNumSplits',7,'CrossVal','on');
view(Mdl7.Trained{1},'Mode','graph')

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

モデルの交差検証分類誤差を比較します。

classErrorDefault = kfoldLoss(MdlDefault)
classErrorDefault = 
0.1168
classError7 = kfoldLoss(Mdl7)
classError7 = 
0.1311

Mdl7 は、MdlDefault より大幅に単純化されており、性能は少しだけ低下します。

詳細

すべて展開する

参照

[1] Breiman, L., J. Friedman, R. Olshen, and C. Stone. Classification and Regression Trees. Boca Raton, FL: CRC Press, 1984.

拡張機能

バージョン履歴

R2011a で導入