ClassificationTree
マルチクラス分類用の二分決定木
説明
ClassificationTree
オブジェクトはバイナリ分割により分類を行う決定木を示します。このクラスのオブジェクトは、predict
を使用して、新しいデータに対する応答を予測できます。オブジェクトには学習に使用したデータが格納されているため、resubPredict
を使用して再代入予測も計算できます。
作成
ClassificationTree
オブジェクトの作成には fitctree
を使用します。
プロパティ
BinEdges
— 数値予測子のビンのエッジ
p 個の数値ベクトルの cell 配列
この プロパティ は読み取り専用です。
数値予測子のビンのエッジ。p 個の数値ベクトルが含まれている cell 配列を指定します。p は予測子の個数です。各ベクトルには、数値予測子のビンのエッジを含めます。カテゴリカル予測子はビン化されないので、カテゴリカル予測子の場合は、この cell 配列の要素を空にします。
数値予測子がビン化されるのは、木学習器を使用してモデルに学習をさせるときに名前と値の引数 'NumBins'
として正の整数スカラーを指定した場合だけです。'NumBins'
の値が空 (既定) である場合、BinEdges
プロパティは空になります。
学習済みモデル mdl
の BinEdges
プロパティを使用することにより、ビン化された予測子データ 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
Xbinned
に格納されます。カテゴリカル予測子の場合、Xbinned
の値は 0 になります。X
に NaN
が含まれている場合、対応する Xbinned
の値は NaN
になります。
CategoricalPredictors
— カテゴリカル予測子のインデックス
正の整数のベクトル | []
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
データ型: single
| double
CategoricalSplit
— カテゴリカル分割
n
行 2 列の cell 配列
この プロパティ は読み取り専用です。
カテゴリカル分割。n
行 2 列の cell 配列として返されます。ここで、n
は tree
内のカテゴリカル分割の数です。CategoricalSplit
の各行は、カテゴリカル分割用の左と右の値になります。カテゴリカル予測子変数 z
に基づくカテゴリカル分割をもつ各枝ノード j
において、z
が CategoricalSplit(j,1)
にあれば左の子を選択し、z
が CategoricalSplit(j,2)
にあれば右の子を選択します。分割はツリーのノードと同じ順序で行われます。これらの分割用のノードは、cuttype
を実行し 'categorical'
カットを上から下に選択すれば見つかります。
データ型: cell
Children
— 各ノードの子ノードの数
n
行 2 列の配列
この プロパティ は読み取り専用です。
ツリー内の各ノードの子ノードの数。n
行 2 列の配列として返されます。ここで、n
はノード数です。葉ノードは子ノード 0
をもちます。
データ型: double
ClassCount
— クラス カウント
n 行 k 列の配列
この プロパティ は読み取り専用です。
tree
内のノードのクラス カウント。n 行 k 列の配列として返されます。ここで、n はノード数、k はクラス数です。任意のノード番号 i
に対して、クラス カウント ClassCount(i,:)
はノード i
の条件を満たす各クラスからの (ツリーの当てはめに使用したデータからの) 観測カウント数です。
データ型: double
ClassNames
— 重複が削除された Y
の要素のリスト
categorical 配列 | 文字ベクトルの cell 配列 | 文字配列 | logical ベクトル | 数値ベクトル
この プロパティ は読み取り専用です。
重複が削除された Y
の要素のリスト。categorical 配列、文字ベクトルの cell 配列、文字配列、logical ベクトル、または数値ベクトルとして返されます。ClassNames
のデータ型は引数 Y
のデータと同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
データ型: double
| logical
| char
| cell
| categorical
ClassProbability
— クラス確率
n
行 k 列の配列
この プロパティ は読み取り専用です。
tree
内のノードのクラス確率。n
行 k
列の配列として返されます。ここで、n
はノード数、k
はクラス数です。任意のノード番号 i
に対して、クラス確率 ClassProbability(i,:)
は、ノード i
の条件を満たすポイントに対する各クラスの推定確率です。
データ型: double
Cost
— 真のクラスが i
である場合に点をクラス j
に分類するコスト
正方行列
真のクラスが i
である場合に点をクラス j
に分類するコスト。正方行列として返されます。Cost
の行は真のクラスに対応し、列は予測クラスに対応します。Cost
の行と列の順序は、ClassNames
のクラスの順序に対応します。Cost
の行および列の数は、応答に含まれている一意なクラスの数です。
データ型: double
CutCategories
— 枝で使用されるカテゴリ
n
行 2 列の cell 配列
この プロパティ は読み取り専用です。
tree
内の枝で使用されるカテゴリ。n
行 2 列の cell 配列として返されます。ここで、n
はノード数です。カテゴリカル予測子変数 X
に基づく各枝ノード i
に対して、X
が CutCategories{i,1}
内のカテゴリである場合は左側の子が選択され、X
が CutCategories{i,2}
内のカテゴリである場合は右側の子が選択されます。連続予測子に基づく枝ノードと葉ノードに対する CutCategories
の列は両方とも空です。
CutPoint
には 'continuous'
切り取りの切り取り点が含まれ、CutCategories
にはカテゴリ セットが含まれます。
データ型: cell
CutPoint
— 切り取り点として使用される値
n
要素のベクトル
この プロパティ は読み取り専用です。
tree
内の切り取り点として使用される値。n
要素のベクトルとして返されます。ここで、n
はノード数です。連続予測子変数 X
に基づく各枝ノード i
において、X<CutPoint(i)
の場合は左側の子が選択され、X>=CutPoint(i)
の場合は右側の子が選択されます。カテゴリカル予測子に基づく枝ノードと葉ノードに対する CutPoint
は NaN
です。
CutPoint
には 'continuous'
切り取りの切り取り点が含まれ、CutCategories
にはカテゴリ セットが含まれます。
データ型: double
CutPredictor
— 各ノードの分枝に使用される変数の名前
cell 配列
この プロパティ は読み取り専用です。
tree
内の各ノードの分枝に使用される変数の名前。n
要素の cell 配列として返されます。ここで、n
はノード数です。これらの変数は、"切り取り変数" と呼ばれることもあります。葉ノードの場合、CutPredictor
には空の文字ベクトルが格納されます。
CutPoint
には 'continuous'
切り取りの切り取り点が含まれ、CutCategories
にはカテゴリ セットが含まれます。
データ型: cell
CutPredictorIndex
— 各ノードの分枝に使用される変数のインデックス
n
要素の配列
この プロパティ は読み取り専用です。
tree
内の各ノードの分枝に使用される変数のインデックス。n
要素の配列として返されます。ここで、n
はノード数です。詳細については、CutPredictor
を参照してください。
データ型: double
CutType
— 各ノードの切り取りのタイプ
n
要素の cell 配列
この プロパティ は読み取り専用です。
tree
内の各ノードの切り取りのタイプ。n
要素の cell 配列として返されます。ここで、n
はノード数です。各ノード i
に対して CutType{i}
は次のいずれかです。
'continuous'
— 変数X
と切り取り点v
に対して、切り取りがX < v
形式で定義されている場合。'categorical'
— 変数X
がカテゴリ セット内の値を受け取るかどうかによって切り取りが定義されている場合。''
—i
が葉ノードの場合。
CutPoint
には 'continuous'
切り取りの切り取り点が含まれ、CutCategories
にはカテゴリ セットが含まれます。
データ型: cell
ExpandedPredictorNames
— 展開された予測子名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
展開された予測子名。文字ベクトルの cell 配列として返されます。
モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames
には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNames
は PredictorNames
と同じです。
データ型: cell
HyperparameterOptimizationResults
— ハイパーパラメーターの交差検証最適化の説明
BayesianOptimization
オブジェクト | ハイパーパラメーターおよび関連する値のテーブル
この プロパティ は読み取り専用です。
ハイパーパラメーターの交差検証最適化の説明。BayesianOptimization
オブジェクト、またはハイパーパラメーターと関連する値の table として返されます。作成時に名前と値のペア OptimizeHyperparameters
が空ではない場合、これは空ではありません。値は、作成時の名前と値のペア HyperparameterOptimizationOptions
の設定によって決まります。
'bayesopt'
(既定) —BayesianOptimization
クラスのオブジェクト'gridsearch'
または'randomsearch'
— 使用したハイパーパラメーター、観測された目的関数の値(交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル
IsBranchNode
— 枝ノードのインジケーター
logical ベクトル
この プロパティ は読み取り専用です。
枝ノードのインジケーター。n
要素の logical ベクトルとして返されます。それぞれについて、tree
の枝ノードの場合は true
、葉ノードの場合は false
になります。
データ型: logical
ModelParameters
— tree
の学習に使用されるパラメーター
TreeParams
オブジェクト
この プロパティ は読み取り専用です。
tree
の学習に使用されるパラメーター。TreeParams
オブジェクトとして返されます。すべてのパラメーター値を表示するには、「tree.ModelParameters
」と入力します。特定のパラメーターにアクセスするには、ドット表記を使用します。
NodeClass
— 各ノードの最も確からしいクラスの名前
cell 配列
この プロパティ は読み取り専用です。
tree
内の各ノードの最も確からしいクラスの名前。n
個の要素をもつ cell 配列として返されます。ここで、n
はツリー内のノード数です。この配列の各要素は、ClassNames
に含まれているクラス名のいずれかに等しい文字ベクトルです。
データ型: cell
NodeError
— 各ノードの誤分類確率
n
要素のベクトル
この プロパティ は読み取り専用です。
tree
内の各ノードの誤分類確率。n
要素のベクトルとして返されます。ここで、n
はツリー内のノード数です。
データ型: double
NodeProbability
— ノードの条件を満たす元データ内の観測値の割合
n
要素のベクトル
この プロパティ は読み取り専用です。
tree
内の各ノードの条件を満たす元データ内の観測値の割合。n
要素のベクトルとして返されます。ここで、n
はツリー内のノード数です。NodeProbability
の値は、各クラスに割り当てられているすべての事前確率について調整された値になります。
データ型: double
NodeRisk
— ノードの不純度
n
要素のベクトル
この プロパティ は読み取り専用です。
tree
内の各ノードのノード確率で重み付けされた不純度。n
要素のベクトルとして返されます。ここで、n
はツリー内のノード数です。不純度の尺度はノードのジニ指数または逸脱度であり、ノード確率で重み付けされます。ツリーが twoing によって成長した場合、各ノードのリスクはゼロです。
データ型: double
NodeSize
— ノードのサイズ
n
要素のベクトル
この プロパティ は読み取り専用です。
tree
内のノードのサイズ。n
要素のベクトルとして返されます。ここで、n
はツリー内のノード数です。ノードのサイズは、ノードの条件を満たすツリーを作成するために使用されるデータ内の観測値の数になります。
データ型: double
NumNodes
— ノードの数
正の整数
この プロパティ は読み取り専用です。
tree
内のノードの数。正の整数として返されます。
データ型: double
NumObservations
— 学習データに含まれている観測値の数
正の整数
この プロパティ は読み取り専用です。
学習データ内の観測値の数。正の整数として返されます。入力データまたは応答データに欠損値がある場合、NumObservations
は入力データの行数よりも少なくなることがあります。
データ型: double
Parent
— ノードの親の数
n
要素のベクトル
この プロパティ は読み取り専用です。
tree
内の各ノードの親の数。n
要素の整数ベクトルとして返されます。ここで、n
はツリー内のノード数です。ルート ノードの親は 0
です。
データ型: double
PredictorNames
— 予測子名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
予測子名。文字ベクトルの cell 配列を指定します。PredictorNames
のエントリの順序は学習データと同じになります。
データ型: cell
Prior
— 各クラスの事前確率
m
要素のベクトル
各クラスの事前確率。m
要素のベクトルとして返されます。ここで、m
は応答内の一意のクラスの数です。Prior
の要素の順序は、ClassNames
のクラスの順序に対応します。
データ型: double
PruneAlpha
— ツリーの枝刈りのアルファ値
実数ベクトル
ツリーの枝刈りのアルファ値。枝刈りレベルごとに 1 つの要素をもつ実数ベクトルとして返されます。枝刈りレベルの範囲が 0 ~ M の場合、PruneAlpha
には昇順に並べ替えられた M + 1 要素が含まれます。PruneAlpha(1)
は枝刈りレベル 0 (枝刈りなし) を表し、PruneAlpha(2)
は枝刈りレベル 1 を表すというように続いていきます。
ɑ 値の意味については、決定木での枝刈り順序の作成方法を参照してください。
データ型: double
PruneList
— ツリー内の各ノードの枝刈りレベル
整数ベクトル
ツリー内の各ノードの枝刈りレベル。NumNodes
個の要素をもつ整数ベクトルとして返されます。枝刈りレベルの範囲は 0 (枝刈りなし) から M です。M は最下位の葉からルート ノードまでの距離です。
詳細については、枝刈りを参照してください。
データ型: double
ResponseName
— 応答変数の名前
文字ベクトル
この プロパティ は読み取り専用です。
応答変数の名前。文字ベクトルとして返されます。
データ型: char
RowsUsed
— 当てはめに使用される元の予測子データ X
の行
logical ベクトル
この プロパティ は読み取り専用です。
当てはめに使用される元の予測子データ X
の行。n
要素の logical ベクトルとして返されます。ここで、n
は X
の行数です。オブジェクトの作成に X
のすべての行を使用する場合、RowsUsed
は空の配列 ([]
) になります。
データ型: logical
ScoreTransform
— スコアを変換するための関数
関数ハンドル | 組み込みの変換関数の名前 | 'none'
スコアを変換するための関数。関数ハンドルまたは組み込みの変換関数の名前として指定します。'none'
は変換なしを意味します。つまり、'none'
は @(x)x
と同じ意味になります。組み込みの変換関数のリストとカスタム変換関数の構文は、fitctree
を参照してください。
ドット表記を使用して関数 ScoreTransform
を追加または変更します。
ctree.ScoreTransform = 'function' % or ctree.ScoreTransform = @function
データ型: char
| string
| function_handle
SurrogateCutCategories
— 代理分岐に使用されるカテゴリ
n
要素の cell 配列
この プロパティ は読み取り専用です。
代理分岐に使用されるカテゴリ。n
要素の cell 配列として返されます。ここで、n
は tree
内のノード数です。各ノード k
に対して、SurrogateCutCategories{k}
は cell 配列です。SurrogateCutCategories{k}
の長さは、このノードに見つかった代理予測子の数に等しくなります。SurrogateCutCategories{k}
の各要素は、連続代理予測子の場合は空の文字ベクトル、カテゴリカル代理予測子の場合はカテゴリをもつ 2 要素 cell 配列になります。2 要素 cell 配列の最初の要素には、この代理分岐によって左の子に割り当てられたカテゴリがリストされ、この 2 要素 cell 配列の 2 番目の要素には、この代理分岐によって右の子に割り当てられたカテゴリがリストされます。各ノードの代理分岐変数の順序は、SurrogateCutVar
に存在する変数の順序に一致します。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutCategories
には空のセルが含まれます。
データ型: cell
SurrogateCutFlip
— 代理分岐に使用される数値切り取り点の割り当て
n
要素の cell 配列
この プロパティ は読み取り専用です。
tree
内の代理分岐に使用される数値切り取り点の割り当て。n
要素の cell 配列として返されます。ここで、n
は tree
内のノード数です。各ノード k
に対して、SurrogateCutFlip{k}
は数値ベクトルです。SurrogateCutFlip{k}
の長さは、このノードに見つかった代理予測子の数に等しくなります。SurrogateCutFlip{k}
の各要素はカテゴリカル代理予測子でゼロになるか、連続代理予測子で数値切り取り点の割り当てになります。数値切り取り点の割り当ては、-1 または +1 のいずれかになります。連続予測子変数 Z に基づく数値切り取り C が含まれるすべての代理分岐では、Z<C でこの代理分岐の切り取りの割り当てが +1 であるか、 Z≥C でこの代理分岐の切り取りの割り当てが -1 である場合に、左の子が選択されます。同様に、Z≥C でこの代理分岐の切り取り点割り当てが +1 であるか、 Z<C でこの代理分岐の切り取り点が -1 であれば右の子が選択されます。各ノードにおける代理分岐変数の順序は、SurrogateCutPredictor
によって返される変数の順序に一致します。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutFlip
には空の配列が含まれます。
データ型: cell
SurrogateCutPoint
— 代理分岐に使用される数値
n
要素の cell 配列
この プロパティ は読み取り専用です。
tree
内の代理分岐に使用される数値。n
要素の cell 配列として返されます。ここで、n
は tree
内のノード数です。各ノード k
に対して、SurrogateCutPoint{k}
は数値ベクトルです。SurrogateCutPoint{k}
の長さは、このノードに見つかった代理予測子の数に等しくなります。SurrogateCutPoint{k}
の各要素は、カテゴリカル代理予測子で NaN
になるか、連続代理予測子で数値切り取り点になります。連続予測子変数 Z に基づく数値切り取り C が含まれるすべての代理分岐では、Z<C であり、その代理分岐の SurrogateCutFlip
が +1 である場合、または Z ≥ C であり、その代理分岐の SurrogateCutFlip
が -1 である場合、左の子が選択されます。同様に、Z≥C であり、その代理分岐の SurrogateCutFlip
が +1 である場合、または Z<C であり、その代理分岐の SurrogateCutFlip
が -1 である場合、右の子が選択されます。各ノードの代理分岐変数の順序は、SurrogateCutPredictor
によって返される変数の順序に一致します。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutPoint
には空のセルが含まれます。
データ型: cell
SurrogateCutPredictor
— 各ノードの代理分岐に使用される変数の名前
n
要素の cell 配列
この プロパティ は読み取り専用です。
tree
内の各ノードの代理分岐に使用される変数の名前。n
要素の cell 配列として返されます。ここで、n
は tree
内のノード数です。SurrogateCutPredictor
の各要素は、このノードの代理分岐変数の名前をもつ cell 配列です。変数は、最適予測子との結びつきの予測尺度によって降順に並べ替えられており、かつ正の予測尺度をもつ変数のみが含まれています。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutPredictor
には空のセルが含まれます。
データ型: cell
SurrogateCutType
— 各ノードの代理分岐のタイプ
n
要素の cell 配列
この プロパティ は読み取り専用です。
tree
内の各ノードの代理分岐のタイプ。n
要素の cell 配列として返されます。ここで、n
は tree
内のノード数です。各ノードの k
で、SurrogateCutType{k}
はこのノードの代理分岐変数のタイプをもつ cell 配列です。変数は、最適予測子との結びつきの予測尺度によって降順に並べ替えられており、かつ正の予測尺度をもつ変数のみが含まれています。各ノードにおける代理分岐変数の順序は、SurrogateCutPredictor
によって返される変数の順序に一致します。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogateCutType
には空のセルが含まれます。代理分岐のタイプは、切り取りが変数 Z
に対して Z
<V
の形式で定義されている場合は 'continuous'
に、切り取りが Z
がカテゴリのセットの値を取るかどうかによって定義されている場合は切り取り点 V
または 'categorical'
のいずれかになります。
データ型: cell
SurrogatePredictorAssociation
— 代理分岐の関連性予測尺度
n
要素の cell 配列
この プロパティ は読み取り専用です。
tree
内の代理分岐の関連性予測尺度。n
要素の cell 配列として返されます。ここで、n
は tree
内のノード数です。各ノード k
に対して、SurrogatePredictorAssociation{k}
は数値ベクトルです。SurrogatePredictorAssociation{k}
の長さは、このノードに見つかった代理予測子の数に等しくなります。SurrogatePredictorAssociation{k}
の各要素は、最適分割とこの代理分岐間の関連性予測尺度を与えます。各ノードの代理分岐変数の順序は、SurrogateCutPredictor
に存在する変数の順序になります。このノードの最適分割変数は現れません。枝ではない (葉) ノードの場合、SurrogatePredictorAssociation
には空のセルが含まれます。
データ型: cell
W
— ツリー内のスケーリングされた重み
数値ベクトル
この プロパティ は読み取り専用です。
tree
内のスケーリングされた重み。数値ベクトルとして返されます。W
の長さは n
(学習データの行数) です。
データ型: double
X
— 予測子の値
実数行列 | table
この プロパティ は読み取り専用です。
予測子の値。実数行列または table として返されます。X
の各列が 1 つの変数 (予測子) を表し、各行が 1 つの観測値を表します。
データ型: double
| table
Y
— クラス ラベル
categorical 配列 | 文字ベクトルの cell 配列 | 文字配列 | logical ベクトル | 数値ベクトル
この プロパティ は読み取り専用です。
X
の観測値に対応するクラス ラベル。categorical 配列、文字ベクトルの cell 配列、文字配列、logical ベクトル、または数値ベクトルとして返されます。Y
の各行は、X
の対応する行の分類を表します。
データ型: single
| double
| logical
| char
| string
| cell
| categorical
オブジェクト関数
compact | 分類木モデルのサイズの縮小 |
compareHoldout | 新しいデータを使用して 2 つの分類モデルの精度を比較 |
crossval | 機械学習モデルの交差検証 |
cvloss | 分類木モデルの交差検証による分類誤差 |
edge | Classification edge for classification tree model |
gather | GPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集 |
lime | Local Interpretable Model-agnostic Explanations (LIME) |
loss | 分類木モデルの分類損失 |
margin | Classification margins for classification tree model |
nodeVariableRange | 決定木ノードの変数範囲の取得 |
partialDependence | 部分依存の計算 |
plotPartialDependence | 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成 |
predict | 分類木モデルを使用したラベルの予測 |
predictorImportance | Estimates of predictor importance for classification tree |
prune | 分類木の枝刈りによる分類部分木のシーケンスの生成 |
resubEdge | 分類木モデルの再代入分類エッジ |
resubLoss | 分類木モデルの再代入分類損失 |
resubMargin | 分類木モデルの再代入分類マージン |
resubPredict | 再代入による分類木の観測値の分類 |
shapley | シャープレイ値 |
surrogateAssociation | 分類木における代理分岐に対する関連性の平均予測尺度 |
testckfold | 交差検証の反復により 2 つの分類モデルの精度を比較 |
view | View classification tree |
例
分類木の成長
ionosphere
データ セットを使用して分類木を成長させます。
load ionosphere
tc = fitctree(X,Y)
tc = ClassificationTree ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351
木の深さの制御
名前と値のペアのパラメーター MaxNumSplits
、MinLeafSize
または MinParentSize
を使用すると、木の深さを制御できます。既定では、fitctree
は深い決定木を成長させます。モデルの複雑さや計算時間の削減のために、より浅い木を成長させることもできます。
ionosphere
データ セットを読み込みます。
load ionosphere
分類木を成長させる場合、木の深さの制御に関する既定値は次のとおりです。
MaxNumSplits
はn - 1
。n
は学習標本のサイズです。MinLeafSize
は1
。MinParentSize
は10
。
これらの既定値を使用すると、学習標本のサイズが大きい場合に木が深く成長する傾向があります。
木の深さの制御について既定値を使用して、分類木を学習させます。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)
view(MdlDefault.Trained{1},'Mode','graph')
分割数の平均は約 15 です。
既定の分割数を使用して学習させたものほど複雑ではない (深くない) 分類木が必要であるとします。最大分割数を 7 に設定して別の分類木を学習させることで、既定値の分類木からの平均分割数が約半分になります。10 分割の交差検証をモデルに対して実行します。
Mdl7 = fitctree(X,Y,'MaxNumSplits',7,'CrossVal','on'); view(Mdl7.Trained{1},'Mode','graph')
モデルの交差検証分類誤差を比較します。
classErrorDefault = kfoldLoss(MdlDefault)
classErrorDefault = 0.1168
classError7 = kfoldLoss(Mdl7)
classError7 = 0.1311
Mdl7
は、MdlDefault
より大幅に単純化されており、性能は少しだけ低下します。
詳細
不純度とノード誤差
決定木では、"不純度" または "ノード誤差" に基づいてノードを分割します。
不純度とは、SplitCriterion
名前と値の引数によって、次のいずれかの意味を表します。
ジニ多様性指数 (
gdi
) — ノードのジニ指数は、次の式で表されます。ここで、合計はノードのクラス i 全体が対象であり、p(i) は、ノードに到達したクラス i をもつ観測クラスの比率です。クラスを 1 つだけもつノード ("純粋" ノード) のジニ指数は
0
です。それ以外のノードでは、ジニ指数は正の値です。したがって、ジニ指数はノードの不純度の基準です。逸脱度 (
"deviance"
) — ノードの逸脱度は、ジニ指数と同様に定義された p(i) を用いて次の式で表されます。純粋ノードの逸脱度は
0
です。それ以外のノードでは、逸脱度は正の値です。Twoing 規則 (
"twoing"
) — Twoing はノードの純粋度の基準ではありませんが、ノードの分割を判断するための別の基準の 1 つです。L(i) は、分割後の左側の子ノードのクラス i のメンバーの比率を示し、R(i) は分割後の右側の子ノードのクラス i のメンバーの比率を示すとします。最大化するための分割基準を選択します。ここで、P(L) および P(R) は、それぞれ左側と右側に分割された観測値の比率を表します。式が大きい場合は、分割によって各子ノードの純粋度は高くなります。同様に、式が小さい場合は、分割によって各子ノードが互いに類似するようになります。このため、親ノードとも類似するようになります。分割によるノードの純粋度の向上はありませんでした。
ノード誤差 — ノード誤差はノードで誤分類されたクラスの比率です。j がノードで最大の学習標本数をもつクラスである場合は、ノード誤差は次のように表されます。
1 – p(j).
参照
[1] Breiman, L., J. Friedman, R. Olshen, and C. Stone. Classification and Regression Trees. Boca Raton, FL: CRC Press, 1984.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
Simulink® に分類木モデルの予測を統合するには、Statistics and Machine Learning Toolbox™ ライブラリにある ClassificationTree Predict ブロックを使用するか、MATLAB® Function ブロックを関数
predict
と共に使用します。fitctree
を使用して分類木に学習をさせる場合、以下の制限が適用されます。名前と値のペアの引数
'ScoreTransform'
の値を無名関数にすることはできません。固定小数点コードの生成では、'ScoreTransform'
の値を'invlogit'
にすることはできません。代理分岐は使用できません。つまり、名前と値のペアの引数
'Surrogate'
の値は'off'
でなければなりません。固定小数点コードの生成およびコーダー コンフィギュアラーを使用するコード生成では、以下の追加制限が適用されます。
カテゴリカル予測子 (
logical
、categorical
、char
、string
、またはcell
) はサポートされません。名前と値の引数CategoricalPredictors
は使用できません。カテゴリカル予測子をモデルに含めるには、モデルを当てはめる前にdummyvar
を使用してカテゴリカル予測子を前処理します。categorical
データ型のクラス ラベルはサポートされません。学習データ内のクラス ラベル値 (Tbl
またはY
) および名前と値の引数ClassNames
の値はどちらもcategorical
データ型の配列にはできません。
詳細は、コード生成の紹介を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
次のオブジェクト関数は GPU 配列を完全にサポートしています。
次のオブジェクト関数は GPU 配列のサポートに制限があります。
次の少なくとも 1 つに該当する場合、オブジェクト関数は GPU で実行されます。
モデルが GPU 配列を使用して当てはめられている。
オブジェクト関数に渡す予測子データが GPU 配列である。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2011a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)