ClassificationPartitionedGAM
説明
ClassificationPartitionedGAM
は、交差検証分割で学習を行った一般化加法モデルのセットです。kfold 関数 kfoldPredict
、kfoldLoss
、kfoldMargin
、kfoldEdge
、kfoldfun
を 1 つ以上使用して、交差検証分類の品質を評価します。
すべての kfold オブジェクト関数では、学習分割 (分割内) 観測値で学習させたモデルを使用して検証分割 (分割外) 観測値に対する応答を予測します。たとえば、データを 5 つに分割して交差検証を行うとします。ほぼ等しいサイズの 5 つのグループに各観測値が無作為に割り当てられます。"学習分割" にはグループのうち 4 つ (データの約 4/5) が含まれ、"検証分割" には他のグループ (データの約 1/5) が含まれます。この場合、交差検証は次のように処理されます。
(
CVMdl.Trained{1}
に格納されている) 1 番目のモデルの学習には最後の 4 つのグループの観測値が使用され、1 番目のグループの観測値は検証用に確保されます。(
CVMdl.Trained{2}
に格納されている) 2 番目のモデルの学習には、1 番目のグループと最後の 3 つのグループの観測値が使用されます。2 番目のグループの観測値は、検証用に予約されます。3 番目、4 番目および 5 番目のモデルに対しても同様に続けられます。
kfoldPredict
を使用して検証する場合、i 番目のモデルを使用してグループ i の観測値について予測が計算されます。つまり、それぞれの観測値に対する応答は、その観測値を使用せずに学習させたモデルによって推定されます。
作成
ClassificationPartitionedGAM
モデルは 2 つの方法で作成できます。
オブジェクト関数
crossval
を使用して、GAM オブジェクトClassificationGAM
から交差検証済みモデルを作成する。関数
fitcgam
を使用し、名前と値の引数'CrossVal'
、'CVPartition'
、'Holdout'
、'KFold'
、'Leaveout'
のいずれかを指定して、交差検証済みモデルを作成する。
プロパティ
交差検証のプロパティ
CrossValidatedModel
— 交差検証されたモデル名
'GAM'
この プロパティ は読み取り専用です。
交差検証済みモデルの名前。'GAM'
として指定されます。
KFold
— 交差検証された分割の数
正の整数
この プロパティ は読み取り専用です。
交差検証された分割の数。正の整数で指定します。
データ型: double
ModelParameters
— 交差検証パラメーター値
オブジェクト
この プロパティ は読み取り専用です。
交差検証パラメーター値。オブジェクトを指定します。パラメーター値は、一般化加法モデルの交差検証に使用した名前と値の引数の値に対応します。推定されたパラメーターは ModelParameters
に含まれません。
ドット表記を使用して ModelParameters
のプロパティにアクセスできます。
Partition
— データ分割
cvpartition
モデル
この プロパティ は読み取り専用です。
データを交差検証分割に分割する方法を含むデータ分割。cvpartition
モデルとして指定します。
Trained
— 交差検証分割で学習させたコンパクトな分類器
CompactClassificationGAM
モデルの cell 配列
この プロパティ は読み取り専用です。
交差検証分割で学習させたコンパクトな分類器。CompactClassificationGAM
モデル オブジェクトの cell 配列として指定されます。Trained
には k 個のセルがあります。k は分割数です。
データ型: cell
他の分類のプロパティ
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
NumObservations
— 観測値の数
数値スカラー
この プロパティ は読み取り専用です。
X
および Y
に格納されている学習データ内の観測値の個数。数値スカラーを指定します。
データ型: double
PredictorNames
— 予測子変数名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames
の要素の順序は、予測子名が学習データに現れる順序に対応します。
データ型: cell
Prior
— 事前クラス確率
数値ベクトル
この プロパティ は読み取り専用です。
クラスの事前確率。2 要素の数値ベクトルとして指定されます。要素の順序は ClassNames
における要素の順序に対応します。
データ型: double
ResponseName
— 応答変数名
文字ベクトル
この プロパティ は読み取り専用です。
応答変数名。文字ベクトルを指定します。
データ型: char
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
は、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。
このプロパティによって、kfoldPredict
、kfoldMargin
、kfoldEdge
などのオブジェクト関数で使用する出力スコアの計算が決まります。事後確率の計算には '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
オブジェクト関数
kfoldPredict | 交差検証済み分類モデルの観測値の分類 |
kfoldLoss | 交差検証済み分類モデルの分類損失 |
kfoldMargin | 交差検証済み分類モデルの分類マージン |
kfoldEdge | 交差検証済み分類モデルの分類エッジ |
kfoldfun | 分類での関数の交差検証 |
例
fitcgam
を使用した交差検証済みの GAM の作成
fitcgam
を使用して、交差検証済みの 10 分割 (既定の交差検証オプション) の GAM に学習させます。その後、kfoldPredict
を使用し、学習分割観測値に対して学習させたモデルを使用して、検証分割観測値のクラス ラベルを予測します。
ionosphere
データセットを読み込みます。このデータセットには、レーダー反射についての 34 個の予測子と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応が含まれています。
load ionosphere
既定の交差検証オプションを使用して交差検証済み GAM を作成します。名前と値の引数 'CrossVal'
を 'on'
として指定します。
rng('default') % For reproducibility CVMdl = fitcgam(X,Y,'CrossVal','on')
CVMdl = ClassificationPartitionedGAM CrossValidatedModel: 'GAM' PredictorNames: {'x1' 'x2' 'x3' 'x4' 'x5' 'x6' 'x7' 'x8' 'x9' 'x10' 'x11' 'x12' 'x13' 'x14' 'x15' 'x16' 'x17' 'x18' 'x19' 'x20' 'x21' 'x22' 'x23' 'x24' 'x25' 'x26' 'x27' 'x28' 'x29' 'x30' 'x31' 'x32' 'x33' 'x34'} ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 cvpartition] NumTrainedPerFold: [1x1 struct] ClassNames: {'b' 'g'} ScoreTransform: 'logit'
関数 fitcgam
で 10 分割の ClassificationPartitionedGAM
モデル オブジェクト CVMdl
が作成されます。交差検証時は、以下の手順が実行されます。
データを 10 個のセットに無作為に分割する。
各セットについて、そのセットを検証データとして予約し、他の 9 個のセットを使用してモデルに学習させる。
10 個のコンパクトな学習済みモデルを交差検証済みモデル オブジェクト
ClassificationPartitionedGAM
のTrained
プロパティに 10 行 1 列の cell ベクトルとして格納する。
既定の交差検証の設定は、名前と値の引数 'CVPartition'
、'Holdout'
、'KFold'
、'Leaveout'
を使用してオーバーライドできます。
kfoldPredict
を使用して X
の観測値を分類します。それぞれの観測値に対するクラス ラベルが、その観測値を使用せずに学習させたモデルを使用して予測されます。
label = kfoldPredict(CVMdl);
混同行列を作成して、観測値の真のクラスを予測されたラベルと比較します。
C = confusionchart(Y,label);
分類誤差を計算します。
L = kfoldLoss(CVMdl)
L = 0.0712
10 個の分割の平均誤分類率は約 7%です。
crossval
を使用した交差検証済みの GAM の作成
fitcgam
を使用して GAM に学習させ、crossval
とホールドアウト オプションを使用して交差検証済み GAM を作成します。その後、kfoldPredict
を使用し、学習分割観測値に対して学習をさせたモデルを使用して、検証分割観測値の応答を予測します。
census1994.mat
に保存されている 1994 年の国勢調査データを読み込みます。このデータセットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。この分類タスクでは、年齢、労働階級、教育レベル、婚姻区分、人種などが与えられた人の給与カテゴリを予測するモデルを当てはめます。
load census1994
census1994
には学習データ セット adultdata
およびテスト データ セット adulttest
が含まれています。この例では、実行時間を短縮するために、関数datasample
を使用して adultdata
から 500 の学習観測値をサブサンプリングします。
rng('default') NumSamples = 5e2; adultdata = datasample(adultdata,NumSamples,'Replace',false);
予測子の線形項と交互作用項の両方が格納されている GAM に学習させます。p 値が 0.05 以下である利用可能な交互作用項をすべて含めるように指定します。
Mdl = fitcgam(adultdata,'salary','Interactions','all','MaxPValue',0.05);
Mdl
は ClassificationGAM
モデル オブジェクトです。
30% のホールドアウト標本を指定して、モデルを交差検証します。
CVMdl = crossval(Mdl,'Holdout',0.3)
CVMdl = ClassificationPartitionedGAM CrossValidatedModel: 'GAM' PredictorNames: {'age' 'workClass' 'fnlwgt' 'education' 'education_num' 'marital_status' 'occupation' 'relationship' 'race' 'sex' 'capital_gain' 'capital_loss' 'hours_per_week' 'native_country'} CategoricalPredictors: [2 4 6 7 8 9 10 14] ResponseName: 'salary' NumObservations: 500 KFold: 1 Partition: [1x1 cvpartition] NumTrainedPerFold: [1x1 struct] ClassNames: [<=50K >50K] ScoreTransform: 'logit'
関数 crossval
は、ホールドアウト オプションを使用して ClassificationPartitionedGAM
モデル オブジェクトの CVMdl
を作成します。交差検証時は、以下の手順が実行されます。
30% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。
コンパクトな学習済みモデルを交差検証済みモデル オブジェクト
ClassificationPartitionedGAM
のTrained
プロパティに格納する。
名前と値の引数 'CrossVal'
、'CVPartition'
、'KFold'
または 'Leaveout'
を使用すると、別の交差検証の設定を選択できます。
kfoldPredict
を使用して検証分割観測値を分類します。この関数は、学習分割観測値に対して学習させたモデルを使用して、検証分割観測値のクラス ラベルを予測します。この関数では、最も頻繁に予測されたラベルが学習分割観測値に割り当てられます。
[labels,scores] = kfoldPredict(CVMdl);
検証分割観測値を検出します。kfoldPredict
は、学習分割観測値の両方のクラスに対してスコア 0 を返します。したがって、スコアがいずれもゼロである観測値を調べれば検証分割観測値を特定できます。
idx = find(sum(abs(scores),2)~=0);
混同行列を作成して、観測値の真のクラスを予測されたラベルと比較し、検証分割観測値の分類誤差を計算します。
C = confusionchart(adultdata.salary(idx),labels(idx));
L = kfoldLoss(CVMdl)
L = 0.1800
kfoldLoss
を使用した GAM の最適な木の数の特定
交差検証済みの 10 分割の一般化加法モデル (GAM) に学習させます。その後、kfoldLoss
を使用して交差検証の累積分類誤差 (10 進数の誤分類率) を計算します。誤差を使用して、予測子 (予測子の線形項) あたりの最適な木の数と交互作用項あたりの最適な木の数を特定します。
代わりに、名前と値の引数OptimizeHyperparametersを使用して fitcgam
の名前と値の引数の最適な値を特定することもできます。例については、OptimizeHyperparameters を使用した GAM の最適化を参照してください。
ionosphere
データセットを読み込みます。このデータセットには、レーダー反射についての 34 個の予測子と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応が含まれています。
load ionosphere
既定の交差検証オプションを使用して交差検証済み GAM を作成します。名前と値の引数 'CrossVal'
を 'on'
として指定します。p 値が 0.05 以下である利用可能な交互作用項をすべて含めるように指定します。
rng('default') % For reproducibility CVMdl = fitcgam(X,Y,'CrossVal','on','Interactions','all','MaxPValue',0.05);
'Mode'
を 'cumulative'
として指定すると、関数 kfoldLoss
は累積誤差を返します。これは、各分割に同じ数の木を使用して取得したすべての分割の平均誤差です。各分割の木の数を表示します。
CVMdl.NumTrainedPerFold
ans = struct with fields:
PredictorTrees: [65 64 59 61 60 66 65 62 64 61]
InteractionTrees: [1 2 2 2 2 1 2 2 2 2]
kfoldLoss
では、最大で 59 個の予測子木と 1 個の交互作用木を使用して累積誤差を計算できます。
10 分割交差検証を行った累積分類誤差 (10 進数の誤分類率) をプロットします。'IncludeInteractions'
を false
として指定して、計算から交互作用項を除外します。
L_noInteractions = kfoldLoss(CVMdl,'Mode','cumulative','IncludeInteractions',false); figure plot(0:min(CVMdl.NumTrainedPerFold.PredictorTrees),L_noInteractions)
L_noInteractions
の最初の要素は、切片 (定数) 項のみを使用して取得したすべての分割の平均誤差です。L_noInteractions
の (J+1
) 番目の要素は、切片項と各線形項の最初の J
個の予測子木を使用して取得した平均誤差です。累積損失をプロットすると、GAM の予測子木の数が増えるにつれて誤差がどのように変化するかを観察できます。
最小誤差とその最小誤差の達成時に使用された予測子木の数を調べます。
[M,I] = min(L_noInteractions)
M = 0.0655
I = 23
GAM に 22 個の予測子木が含まれるときに誤差が最小になっています。
線形項と交互作用項の両方を使用して累積分類誤差を計算します。
L = kfoldLoss(CVMdl,'Mode','cumulative')
L = 2×1
0.0712
0.0712
L
の最初の要素は、切片 (定数) 項と各線形項のすべての予測子木を使用して取得したすべての分割の平均誤差です。L
の 2 番目の要素は、切片項、各線形項のすべての予測子木、および各交互作用項の 1 つの交互作用木を使用して取得した平均誤差です。交互作用項を追加しても誤差は小さくなっていません。
予測子木の数が 22 個のときの誤差で問題がなければ、一変量の GAM にもう一度学習させ、交差検証を使用せずに 'NumTreesPerPredictor',22
と指定して予測モデルを作成できます。
バージョン履歴
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)