Main Content

スタッキングアンサンブルの异种混合结合结合

この例,特定学习データセットに対しての机械学习モデルをビルドビルドし,,,,,と呼ばをしてモデルを个々のモデルの精度に対するに対する検定データセットセットの精度をを向上向上向上さ

スタッキングはの异种モデルを组み合わせるにされる手法で,しばしばしばしばしばしばしばしばしばしばしばしばまたは "スタッキング学習器"ともれ。の(ベース)モデルモデルk交差(分类分类たたの分类スコアと応答応答応答応答応答応答応答応答でで,追加追加モデルにに学习ささせるせることによってそれそれををを行い行い行い行い背后背后背后背后背后背后背后背后に分类する,他のモデルそうしそうし场合があるあるものですです。。アルゴリズムアルゴリズムアルゴリズムははこのなな予测予测からから学习学习を行い行い,モデルモデルを组み合わせてベースベースの

1つのははつのデータで,の混合分类モデルに学习学习ささせスタッキングスタッキングをを使用ししててモデルモデル

标本データの読み込み

この例では人口普查1994.matに保存されている 1994 年の国勢調査データを使用します。このデータセットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。この分類タスクでは、年齢、労働階級、教育レベル、婚姻区分、人種などが与えられた人の給与カテゴリを予測するモデルを近似します。

標本データ人口普查1994を読み込みデータの変数表示します。

加载人口普查1994谁是
Name Size Bytes Class Attributes Description 20x74 2960 char adultdata 32561x15 1872567 table adulttest 16281x15 944467 table

人口普查1994には学習データセットadultdataおよび検定データセットadulttestが含まい。この例で,时间短缩するするに,,数据样本を使用して元の tableadultdataおよびadulttestからそれぞれ 5000 の学習観測値と検定観測値をサブサンプリングします (完全なデータセットを使用する場合は、この手順を省略できます)。

numsamples = 5e3;s = randstream('MLFG6331_64',,,,'种子',,,,0);% For reproducibility成人达塔= dataSample(s,成人达塔,numsamples,'Replace',,,,false); adulttest = datasample(s,adulttest,NumSamples,'Replace',,,,false);

サポートベクター マシン (SVM) などの一部のモデルは欠損値を含む観測値を削除しますが、決定木などの他のモデルはそのような観測値を削除しません。モデル間の整合性を維持するには、モデルをあてはめる前に欠損値を含む行を削除します。

成人data = rmmissing(成人达塔);成人test = rmmissing(exult -test);

学习データのの数行プレビューします。

头(成人)
ans =8×15桌age workClass fnlwgt education education_num marital_status occupation relationship race sex capital_gain capital_loss hours_per_week native_country salary ___ ___________ __________ ____________ _____________ __________________ _________________ ______________ _____ ______ ____________ ____________ ______________ ______________ ______ 39 Private 4.91e+05 Bachelors 13 Never-married Exec-managerial Other-relative Black Male 0 0 45 United-States <=50K 25 Private 2.2022e+05 11th 7 Never-married Handlers-cleaners Own-child White Male 0 0 45 United-States <=50K 24 Private 2.2761e+05 10th 6 Divorced Handlers-cleaners Unmarried White Female 0 0 58 United-States <=50K 51 Private 1.7329e+05 HS-grad 9 Divorced Other-service Not-in-family White Female 0 0 40 United-States <=50K 54 Private 2.8029e+05 Some-college 10 Married-civ-spouse Sales Husband White Male 0 0 32 United-States <=50K 53 Federal-gov 39643 HS-grad 9 Widowed Exec-managerial Not-in-family White Female 0 0 58 United-States <=50K 52 Private 81859 HS-grad 9 Married-civ-spouse Machine-op-inspct Husband White Male 0 0 48 United-States >50K 37 Private 1.2429e+05 Some-college 10 Married-civ-spouse Adm-clerical Husband White Male 0 0 50 United-States <=50K

各行年齢教育,职业など,,成人成人人人ををます。最后の列列薪水$ 50,000 $ 50,000 $ 50,000 $ 50,000をかどうかを示します。

データのおよび分类モデル选択选択

统计学和机器学习工具箱™に,分类木判别,単纯ベイズ,,,傍傍,,,アンサンブル分类含む,分类用用の复数ののオプションがががてていいいいいいいいいます分类を参照しください。

問題に使用するアルゴリズムを選択する前に、データセットを検査します。国勢調査データには注目すべき複数の特性があります。

  • データは表形式であり、数値変数とカテゴリカル変数が両方含まれています。

  • データには欠損値が含まれています。

  • 応答変数 (薪水)にに,つのつの(バイナリ分类)がが。。

何か仮定たりデータでに机能することが予测アルゴリズムアルゴリズムのの事前事前知识知识知识をを使用しないないでで,,単纯単纯にに表表形式形式ののデータデータデータデータとバイナリをサポートサポートサポートサポート(ecoc)モデル33つ以上クラスがデータで使用れ。。判别分析分析アルゴリズムアルゴリズムおよび最近傍アルゴリズムはは数値変数変数ととカテゴリカル変数ののの両方両方がが含ま含まれるデータをSVM,,决定木,决定の,および単纯ベイズモデル。。。。

ベース モデルの構築

2つのモデルを一方はガウスもう一方はカーネルをを使用しししてあてはめます。。さらに,,木木,単纯ベイズベイズモデル

% SVM with Gaussian kernelrng('default'% For reproducibilitymdls {1} = fitCSVM(成人达塔,'salary',,,,'KernelFunction',,,,“高斯”,,,,...'Standardize',真的,“内核”,,,,'汽车');与多项式内核的%SVMrng('default')mdls {2} = fitcsvm(成人达塔,'salary',,,,'KernelFunction',,,,'polynomial',,,,...'Standardize',真的,“内核”,,,,'汽车');% 决策树rng('default')mdls{3} = fitctree(adultdata,'salary');%天真的贝叶斯rng('default')mdls {4} = fitcnb(成人data,'salary');决策树的百分比rng('default')mdls {5} = FitCensemble(成人Data,'salary');

スタッキングを使用したモデルの結合

学习データモデル予测スコアのみをとアンサンブルがが适合适合となるなる可能性がありあります。。。过过k分割交差検証されたスコアを使用します。確実に同じk分割のデータ分割を使用して各モデルに学習させるには,CVPARTITIONオブジェクトを作成し、そのオブジェクトを各ベース モデルの関数杂交に渡します例バイナリ分类な,するがあるあるのは阳性またはまたは阴性いずれいずれかのクラスクラスのの

k分割交検证スコア取得します。

rng('default'% For reproducibilityN = numel(mdls); Scores = zeros(size(adultdata,1),N); cv = cvpartition(adultdata.salary,"KFold",5);为了ii = 1:n m = crossVal(mdls {ii},'cvpartition',,,,cv); [~,s] = kfoldPredict(m); Scores(:,ii) = s(:,m.ClassNames=='<= 50k');结尾

次ので検证されたスコアスコア分数で学習を行って、スタッキング アンサンブルを作成します。

  • スタッキングアンサンブルのを得るにはパーパラメーターを最适化しますます。近似关数关数を呼び出し,,そのそのその名前“优化缩影”'汽车'に设定で学习データセットをしパラメーター简単ににできますます

  • “冗长”を0 に指定して、メッセージ表示を無効にします。

  • 再現性を得るために、乱数シードを設定し、'expected-improvement-plus'の获得使用ますまた,フォレストの性をを得るため,木学习器のの名前名前と値のの“可重现”trueに指定し。

rng('default'% For reproducibilityt = templateTree(“可重现”,真的);stckdmdl = fitCensemble(得分,成人萨拉里,...“优化缩影”,,,,'汽车',,,,...“学习者”,,,,t,...“高参数量化措施”,,,,struct(“冗长”,0,“ AccelitionFunctionName”,,,,'expected-improvement-plus');

予測精度の比較

混同行列の検定をし,検定セットで分类器のの性能性能をチェックチェック

検定データラベルとスコア予测予测

ベースモデルアンサンブル検定データセットのラベルスコア损失値値求めますます

まずベースに対して处理を,予测,スコアおよび损失値を计算计算ます。。。

label = [];分数=零(size(成人测验,1),n);mdlloss =零(1,numel(mdls));为了i = 1:n [lbl,s] =预测(mdls {i},成人test);label = [标签,lbl];得分(:,i)= s(:,m.classnames =='<= 50k');Mdlloss(i) = mdls{i}.loss(adulttest);结尾

スタッキング アンサンブルからの予測を标签およびMdllossに追加します。

[lbl,s] = predict(stckdMdl,score); label = [label,lbl]; mdlLoss(end+1) = stckdMdl.loss(score,adulttest.salary);

スタッキングアンサンブルをベースのスコアにし。。。

分数= [得分,s(:,1)];

損失値を表示します。

名称= {'SVM-Gaussian',,,,'SVM-Polynomial',,,,'决策树',,,,“天真的贝叶斯”,,,,...'Ensemble of Decision Trees',,,,“堆叠合奏”}; array2table(mdlLoss,'variablenames',,,,names)
ans =1×6桌SVM-Gaussian SVM-Polynomial Decision Tree Naive Bayes Ensemble of Decision Trees Stacked Ensemble ____________ ______________ _____________ ___________ __________________________ ________________ 0.15668 0.17473 0.1975 0.16764 0.15833 0.14519

スタッキングアンサンブル値はベースモデルの値も低くなっています。

混同行列

关数混乱を使用して、検定データ セットの予測したクラスおよび既知の (true) クラスをもつ混同行列を計算します。

图C =单元格(n+1,1);为了i = 1:numel(c)子图(2,3,i)c {i} = ConfusionChart(成人test.salary,label(:,i));标题(名称{i})结尾

対角要素特定クラスの正しく分类インスタンスの数を示していいます。非対角非対角要素は误分类误分类ししした

マクネマーの仮説検定

予测改善有意かどうをテストにはマクネマーの仮说検定ををする关数关数关数TestCholdOutを使用ますアンサンブルと単纯ベイズを比较します。

[hNB,pNB] = testcholdout(label(:,6),label(:,4),adulttest.salary)
HNB =逻辑1
pNB = 9.7646e-07

スタッキングアンサンブル决定のアンサンブル比较します。

[He,pe] = testCholdOut(label(:6),label(:,5),成人test.salary)
hE =逻辑1
PE = 1.9357E-04

いずれのも,スタッキングののp値が低いことは、その予測が他のモデルの予測よりも統計的に優れていることを確証しています。