ClassificationGAM
説明
ClassificationGAM
オブジェクトは、バイナリ分類用の一般化加法モデル (GAM) オブジェクトです。これは、一変量および二変量の形状関数の和を使用してクラス スコア (クラス確率のロジット) を説明する解釈可能なモデルです。
関数 predict
を使用して新しい観測値を分類し、関数 plotLocalEffects
を使用して観測値の予測 (分類スコア) に対する各形状関数の効果をプロットできます。ClassificationGAM
のオブジェクト関数の完全な一覧については、オブジェクト関数を参照してください。
作成
ClassificationGAM
オブジェクトの作成には fitcgam
を使用します。予測子の線形項と交互作用項の両方を指定して、学習済みモデルに一変量の形状関数 (予測子木) と二変量の形状関数 (交互作用木) をそれぞれ含めることができます。
学習済みモデルは resume
または addInteractions
を使用して更新できます。
関数
resume
は、モデル内の既存の項の学習を再開します。関数
addInteractions
は、線形項のみを含むモデルに交互作用項を追加します。
プロパティ
GAM のプロパティ
BinEdges
— 数値予測子のビンのエッジ
数値ベクトルの 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
になります。
データ型: cell
Interactions
— 交互作用項のインデックス
正の整数の 2 列の行列 | []
この プロパティ は読み取り専用です。
交互作用項のインデックス。正の整数の t
行 2 列の行列を指定します。ここで、t
はモデル内の交互作用項の数です。行列の各行は 1 つの交互作用項を表し、交互作用項の予測子データ X
の列インデックスを格納します。モデルに交互作用項が含まれない場合、このプロパティは空 ([]
) になります。
交互作用項は、p 値に基づく重要度の順序でモデルに追加されます。交互作用項がモデルに追加される順序を確認するには、このプロパティを使用します。
データ型: double
Intercept
— モデルの切片項
数値スカラー
この プロパティ は読み取り専用です。
モデルの切片 (定数) 項。予測子木と交互作用木における切片項の和です。数値スカラーを指定します。
データ型: single
| double
ModelParameters
— モデルの学習に使用するパラメーター
モデル パラメーター オブジェクト
この プロパティ は読み取り専用です。
モデルの学習に使用されたパラメーター。モデル パラメーター オブジェクトとして指定されます。ModelParameters
には、モデルの学習に使用された名前と値の引数の値などのパラメーター値が格納されます。推定パラメーターは ModelParameters
に格納されません。
ModelParameters
のフィールドにアクセスするには、ドット表記を使用します。たとえば、交互作用木あたりの決定分岐の最大数にアクセスするには Mdl.ModelParameters.MaxNumSplitsPerInteraction
を使用します。
PairDetectionBinEdges
— 交互作用項を検出するためのビンのエッジ
数値ベクトルの cell 配列
この プロパティ は読み取り専用です。
数値予測子の交互作用項を検出するためのビンのエッジ。p 個の数値ベクトルの cell 配列として指定されます。p は予測子の個数です。各ベクトルには、数値予測子のビンのエッジを含めます。カテゴリカル予測子はビン化されないので、カテゴリカル予測子の場合は、この cell 配列の要素を空にします。
交互作用項の検出プロセスを高速化するために、最大 8 個の同確率のビンに数値予測子がビン化されます。予測子に含まれる一意の値が 8 より少なければ、ビンの数を 8 より少なくすることができます。
データ型: cell
ReasonForTermination
— 学習の停止理由
構造体
この プロパティ は読み取り専用です。
モデルの学習が停止した理由。PredictorTrees
と InteractionTrees
の 2 つのフィールドをもつ構造体として指定されます。
このプロパティは、指定した数の木がモデルに含まれているかどうかを線形項 ('NumTreesPerPredictor'
) と交互作用項 ('NumTreesPerInteraction'
) のそれぞれについて確認する場合に使用します。関数 fitcgam
で指定した数の木を追加する前に学習が終了した場合、このプロパティに終了理由が格納されます。
データ型: struct
他の分類のプロパティ
CategoricalPredictors
— カテゴリカル予測子のインデックス
正の整数のベクトル | []
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
データ型: double
ClassNames
— 一意のクラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
学習で使用する一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames
のデータ型はクラス ラベル Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。ClassNames
はクラスの順序も決定します。
データ型: single
| double
| logical
| char
| cell
| categorical
Cost
— 誤分類のコスト
2 行 2 列の数値行列
誤分類コスト。2 行 2 列の数値行列として指定されます。
Cost(
は、真のクラスが i
,j
)i
である点をクラス j
に分類するコストです。Cost
の行と列の順序は、ClassNames
のクラスの順序に対応します。
Cost
の値は予測に使用されますが、学習には使用されません。値はドット表記を使用して変更できます。
例: Mdl.Cost = C;
データ型: double
ExpandedPredictorNames
— 展開された予測子名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
展開された予測子名。文字ベクトルの cell 配列を指定します。
ExpandedPredictorNames
は、一般化加法モデルの PredictorNames
と同じです。
データ型: cell
NumObservations
— 観測値の数
数値スカラー
この プロパティ は読み取り専用です。
X
および Y
に格納されている学習データ内の観測値の個数。数値スカラーを指定します。
データ型: double
PredictorNames
— 予測子変数名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames
の要素の順序は、予測子名が学習データに現れる順序に対応します。
データ型: cell
Prior
— 事前クラス確率
数値ベクトル
この プロパティ は読み取り専用です。
クラスの事前確率。2 要素の数値ベクトルとして指定されます。要素の順序は ClassNames
における要素の順序に対応します。
データ型: double
ResponseName
— 応答変数名
文字ベクトル
この プロパティ は読み取り専用です。
応答変数名。文字ベクトルを指定します。
データ型: char
RowsUsed
— 当てはめに使用した行
[]
| logical ベクトル
この プロパティ は読み取り専用です。
ClassificationGAM
モデルの当てはめに使用した元の学習データの行。logical ベクトルを指定します。すべての行を使用した場合、このプロパティは空になります。
データ型: logical
ScoreTransform
— スコア変換
文字ベクトル | 関数ハンドル
スコア変換。文字ベクトルまたは関数ハンドルを指定します。ScoreTransform
は、組み込みの変換関数または予測した分類スコアを変換する関数のハンドルを表します。
スコア変換関数を function
などに変更するには、ドット表記を使用します。
組み込み関数の場合は、文字ベクトルを入力します。
Mdl.ScoreTransform = 'function';
次の表は、使用可能な組み込み関数の一覧です。
値 説明 'doublelogit'
1/(1 + e–2x) 'invlogit'
log(x / (1 – x)) 'ismax'
最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する 'logit'
1/(1 + e–x) 'none'
または'identity'
x (変換なし) 'sign'
x < 0 のとき –1
x = 0 のとき 0
x > 0 のとき 1'symmetric'
2x – 1 'symmetricismax'
最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する 'symmetriclogit'
2/(1 + e–x) – 1 MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。
Mdl.ScoreTransform = @function;
function
は、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。
このプロパティによって、predict
、margin
、edge
などのオブジェクト関数で使用する出力スコアの計算が決まります。事後確率の計算には 'logit'
、事後確率のロジットの計算には 'none'
を使用します。
データ型: char
| function_handle
W
— 観測値の重み
数値ベクトル
この プロパティ は読み取り専用です。
モデルの学習に使用された観測値の重み。n 行 1 列の数値ベクトルとして指定されます。n は観測値の個数 (NumObservations
) です。
特定のクラスにおける W
の要素の合計がそのクラスの事前確率になるように、名前と値の引数 'Weights'
で指定された観測値の重みが正規化されます。
データ型: double
X
— 予測子
数値行列 | テーブル
この プロパティ は読み取り専用です。
モデルの学習に使用された予測子。数値行列または table として指定されます。
X
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
データ型: single
| double
| table
Y
— クラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
モデルの学習に使用されたクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定されます。Y
のデータ型はモデルの学習に使用された応答変数と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
Y
の各行は、X
の対応する行の観測された分類を表します。
データ型: single
| double
| logical
| char
| cell
| categorical
ハイパーパラメーター最適化のプロパティ
HyperparameterOptimizationResults
— ハイパーパラメーターの交差検証最適化の説明
BayesianOptimization
オブジェクト | テーブル
この プロパティ は読み取り専用です。
ハイパーパラメーターの交差検証最適化の説明。BayesianOptimization
オブジェクト、またはハイパーパラメーターおよび関連する値が含まれているテーブルを指定します。オブジェクトの作成時に fitcgam
の名前と値の引数 'OptimizeHyperparameters'
が 'none'
(既定値) 以外であった場合、このプロパティは空以外になります。HyperparameterOptimizationResults
の値は、オブジェクト作成時の fitcgam
の構造体 HyperparameterOptimizationOptions
における Optimizer
フィールドの設定によって変化します。
Optimizer フィールドの値 | HyperparameterOptimizationResults の値 |
---|---|
'bayesopt' (既定の設定) | BayesianOptimization クラスのオブジェクト |
'gridsearch' または 'randomsearch' | 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル |
オブジェクト関数
CompactClassificationGAM
の作成
compact | 機械学習モデルのサイズの縮小 |
ClassificationPartitionedGAM
の作成
crossval | 機械学習モデルの交差検証 |
GAM の更新
addInteractions | 一変量の一般化加法モデル (GAM) への交互作用項の追加 |
resume | 一般化加法モデル (GAM) の学習の再開 |
予測の解釈
lime | Local Interpretable Model-agnostic Explanations (LIME) |
partialDependence | 部分依存の計算 |
plotLocalEffects | 一般化加法モデル (GAM) 内の項の局所的効果のプロット |
plotPartialDependence | 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成 |
shapley | シャープレイ値 |
新しい観測値での予測性能の評価
学習データでの予測性能の評価
resubPredict | 学習済み分類器を使用した学習データの分類 |
resubLoss | 再代入分類損失 |
resubMargin | 再代入分類マージン |
resubEdge | 再代入分類エッジ |
精度の比較
compareHoldout | 新しいデータを使用して 2 つの分類モデルの精度を比較 |
testckfold | 交差検証の反復により 2 つの分類モデルの精度を比較 |
例
一般化加法モデルの学習
予測子の線形項が格納されている一変量の一般化加法モデルに学習させます。その後、関数plotLocalEffects
を使用して指定のデータ インスタンスについての予測を解釈します。
ionosphere
データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応が含まれています。
load ionosphere
レーダー反射が不良 ('b'
) と良好 ('g'
) のどちらであるかを識別する一変量の GAM に学習させます。
Mdl = fitcgam(X,Y)
Mdl = ClassificationGAM ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'logit' Intercept: 2.2715 NumObservations: 351
Mdl
は ClassificationGAM
モデル オブジェクトです。モデル表示には、モデルのプロパティの一部のみが表示されます。プロパティの完全な一覧を表示するには、ワークスペースで変数名 Mdl
をダブルクリックします。Mdl
の変数エディターが開きます。あるいは、コマンド ウィンドウでドット表記を使用してプロパティを表示できます。たとえば、Mdl
のクラスの順序を表示します。
classOrder = Mdl.ClassNames
classOrder = 2x1 cell
{'b'}
{'g'}
学習データの最初の観測値を分類し、予測に対する Mdl
内の項の局所的効果をプロットします。
label = predict(Mdl,X(1,:))
label = 1x1 cell array
{'g'}
plotLocalEffects(Mdl,X(1,:))
関数predict
で、最初の観測値 X(1,:)
を 'g'
として分類します。関数plotLocalEffects
で、予測に対する上位 10 個の重要な項の局所的効果を示す横棒グラフを作成します。局所的効果の各値は、'g'
の分類スコアへの各項の寄与を示します。これは、観測値の分類が 'g'
となる事後確率のロジットです。
交互作用項をもつ GAM の学習
3 つの異なる方法で、予測子の線形項と交互作用項が格納された一般化加法モデルに学習させます。
入力引数
formula
を使用して交互作用項を指定します。名前と値の引数
'Interactions'
を指定します。線形項をもつモデルを構築してから、そのモデルに関数
addInteractions
を使用して交互作用項を追加します。
フィッシャーのアヤメのデータ セットを読み込みます。versicolor と virginica の観測値を格納する table を作成します。
load fisheriris inds = strcmp(species,'versicolor') | strcmp(species,'virginica'); tbl = array2table(meas(inds,:),'VariableNames',["x1","x2","x3","x4"]); tbl.Y = species(inds,:);
formula
の指定
4 つの線形項 (x1
、x2
、x3
、および x4
) と 2 つの交互作用項 (x1*x2
および x2*x3
) が格納された GAM に学習させます。'Y ~ terms'
という形式の式を使用して項を指定します。
Mdl1 = fitcgam(tbl,'Y ~ x1 + x2 + x3 + x4 + x1:x2 + x2:x3');
交互作用項は重要度の順序でモデルに追加されます。Interactions
プロパティを使用して、モデル内の交互作用項とそれらが fitcgam
でモデルに追加された順序を確認できます。Interactions
プロパティを表示します。
Mdl1.Interactions
ans = 2×2
2 3
1 2
Interactions
の各行は 1 つの交互作用項を表し、交互作用項の予測子変数の列インデックスを格納します。
'Interactions'
の指定
学習データ (tbl
) と tbl
内の応答変数の名前を fitcgam
に渡し、それ以外のすべての変数の線形項が予測子として含まれるようにします。logical 行列を使用して名前と値の引数 'Interactions'
を指定して、2 つの交互作用項 x1*x2
と x2*x3
を含めます。
Mdl2 = fitcgam(tbl,'Y','Interactions',logical([1 1 0 0; 0 1 1 0])); Mdl2.Interactions
ans = 2×2
2 3
1 2
'Interactions'
では、交互作用項の数を指定したり、'all'
を指定して利用可能なすべての交互作用項を含めることもできます。fitcgam
は、指定された交互作用項の中から p 値が 'MaxPValue'
の値以下であるものを特定し、それらをモデルに追加します。'MaxPValue'
の既定値は 1 であり、指定したすべての交互作用項がモデルに追加されます。
'Interactions','all'
を指定し、名前と値の引数 'MaxPValue'
を 0.01 に設定します。
Mdl3 = fitcgam(tbl,'Y','Interactions','all','MaxPValue',0.01); Mdl3.Interactions
ans = 5×2
3 4
2 4
1 4
2 3
1 3
Mdl3
には、利用可能な 6 組の交互作用項のペアのうち 5 組が含まれます。
関数 addInteractions
の使用
予測子の線形項が格納されている一変量の GAM に学習させ、学習済みのモデルに関数addInteractions
を使用して交互作用項を追加します。addInteractions
の 2 番目の入力引数を fitcgam
の名前と値の引数 'Interactions'
と同じ方法で指定します。交互作用項のリスト (logical 行列を使用)、交互作用項の数、または 'all'
を指定できます。
交互作用項の数を 5 と指定して、学習済みのモデルに上位 5 つの重要な交互作用項を追加します。
Mdl4 = fitcgam(tbl,'Y');
UpdatedMdl4 = addInteractions(Mdl4,5);
UpdatedMdl4.Interactions
ans = 5×2
3 4
2 4
1 4
2 3
1 3
Mdl4
は一変量の GAM、UpdatedMdl4
は Mdl4
のすべての項と 5 つの追加の交互作用項を格納する更新された GAM です。
GAM 内の予測子木の学習の再開
反復回数を少なくして一変量の分類の GAM (線形項のみを格納) に学習させます。反復回数を増やしてモデルに追加で学習させてから、再代入損失を比較します。
ionosphere
データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応が含まれています。
load ionosphere
レーダー反射が不良 ('b'
) と良好 ('g'
) のどちらであるかを識別する一変量の GAM に学習させます。線形項あたりの木の数を 2 と指定します。fitcgam
は、反復回数の指定に従ってブースティング アルゴリズムを反復します。それぞれのブースティング反復において、線形項ごとに 1 つの木が追加されます。'Verbose'
を 2 と指定して、1 回の反復ごとに診断メッセージを表示します。
Mdl = fitcgam(X,Y,'NumTreesPerPredictor',2,'Verbose',2);
|========================================================| | Type | NumTrees | Deviance | RelTol | LearnRate | |========================================================| | 1D| 0| 486.59| - | - | | 1D| 1| 166.71| Inf| 1| | 1D| 2| 78.336| 0.58205| 1|
fitcgam
で指定した数の木の学習が実行されたかどうかを確認するには、学習済みモデルの ReasonForTermination
プロパティを表示し、表示されるメッセージを確認します。
Mdl.ReasonForTermination
ans = struct with fields:
PredictorTrees: 'Terminated after training the requested number of trees.'
InteractionTrees: ''
学習データの分類損失を計算します。
resubLoss(Mdl)
ans = 0.0142
モデルの学習を再開し、100 回の反復を追加で実行します。Mdl
には線形項のみが格納されているため、関数 resume
は線形項の学習を再開し、それらについての木 (予測子木) を追加します。'Verbose'
と 'NumPrint'
を指定して、10 回の反復ごとに診断メッセージを表示します。
UpdatedMdl = resume(Mdl,100,'Verbose',1,'NumPrint',10);
|========================================================| | Type | NumTrees | Deviance | RelTol | LearnRate | |========================================================| | 1D| 0| 78.336| - | - | | 1D| 1| 38.364| 0.17429| 1| | 1D| 10| 0.16311| 0.011894| 1| | 1D| 20| 0.00035693| 0.0025178| 1| | 1D| 30| 8.1191e-07| 0.0011006| 1| | 1D| 40| 1.7978e-09| 0.00074607| 1| | 1D| 50| 3.6113e-12| 0.00034404| 1| | 1D| 60| 1.7497e-13| 0.00016541| 1|
UpdatedMdl.ReasonForTermination
ans = struct with fields:
PredictorTrees: 'Unable to improve the model fit.'
InteractionTrees: ''
resume
は、木を追加してもモデルの当てはめの逸脱度が改善されなくなると学習を終了します。
更新されたモデルを使用して分類損失を計算します。
resubLoss(UpdatedMdl)
ans = 0
反復回数を増やして resume
でモデルを更新すると、分類損失が減少します。
詳細
バイナリ分類用の一般化加法モデル (GAM)
一般化加法モデル (GAM) は、予測子の一変量および二変量の形状関数の和を使用してクラス スコア (クラス確率のロジット) を説明する解釈可能なモデルです。
fitcgam
では、各予測子および必要に応じて予測子の各ペアの形状関数としてブースティング木を使用するため、予測子と応答変数の間の非線形関係を取得できます。予測 (分類スコア) に対する個々の形状関数の寄与が十分に分離されるため、このモデルは解釈が容易です。
標準の GAM では、各予測子の一変量の形状関数を使用します。
y は応答変数で、n 個の観測値における成功確率 (陽性クラスの確率) μ の二項分布になります。g(μ) はロジット リンク関数、c は切片 (定数) 項です。fi(xi) は i 番目の予測子についての一変量の形状関数で、予測子の線形項のブースティング木 (予測子木) になります。
重要な交互作用項の二変量の形状関数をモデルに追加して、予測子同士の交互作用をモデルに含めることができます。
fij(xixj) は i 番目と j 番目の予測子についての二変量の形状関数で、予測子の交互作用項のブースティング木 (交互作用木) になります。
fitcgam
は、重要な交互作用項を F 検定の p 値に基づいて特定します。詳細については、交互作用項の検出を参照してください。
参照
[1] Lou, Yin, Rich Caruana, and Johannes Gehrke. "Intelligible Models for Classification and Regression." Proceedings of the 18th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD ’12). Beijing, China: ACM Press, 2012, pp. 150–158.
[2] Lou, Yin, Rich Caruana, Johannes Gehrke, and Giles Hooker. "Accurate Intelligible Models with Pairwise Interactions." Proceedings of the 19th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD ’13) Chicago, Illinois, USA: ACM Press, 2013, pp. 623–631.
バージョン履歴
R2021a で導入
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)