スタッキングアンサンブルへの異種混合モデルの結合
この例では,特定の学習デ,タセットに対して複数の機械学習モデルをビルドし,“スタッキング”と呼ばれる手法を使用してモデルを結合し,個々のモデルの精度に対する検定データセットの精度を向上させる方法を示します。
スタッキングは,複数の異種混合モデルを組み合わせるために使用される手法で,しばしば”スタッキングアンサンブルモデル”または"スタッキング学習器"とも呼ばれます。元の(ベ,ス)モデルのk分割交差検証された予測(分類モデルの分類スコアと回帰モデルの予測応答)で,追加のモデルに学習させることによってそれを行います。スタッキングの背後にある考え方は,特定のモデルが検定観測値を正しく分類する一方で,他のモデルはそうしない場合があるというものです。アルゴリズムはこの多様な予測から学習を行い,モデルを組み合わせてベースモデルの予測精度を向上させようとします。
この例では1つのデータセットで,いくつかの異種混合分類モデルに学習させ,スタッキングを使用してモデルを結合します。
標本デ,タの読み込み
この例ではcensus1994.mat
に保存されている1994年の国勢調査デタを使用します。このデータセットは,個人の年収が50000美元を超えるかどうかを予測するための,米国勢調査局の人口統計データから構成されます。この分類タスクでは,年齢,労働階級,教育レベル,婚姻区分,人種などが与えられた人の給与カテゴリを予測するモデルを近似します。
標本デ,タcensus1994
を読み込み,デ,タセットの変数を表示します。
负载census1994谁
名称大小字节类属性描述20x74 2960 char adultdata 32561x15 1872567 table adultttest 16281x15 944467 table
census1994
には学習デ,タセットadultdata
および検定デ,タセット成人
が含まれています。この例では、実行時間を短縮するために、関数datasample
を使用して元の表adultdata
および成人
5000年からそれぞれの学習観測値と検定観測値をサブサンプリングします(完全なデータセットを使用する場合は,この手順を省略できます)。
NumSamples = 5e3;s = RandStream(“mlfg6331_64”,“种子”, 0);%用于再现性成人数据= datasample(s,成人数据,NumSamples,“替换”、假);adulttest = datasample(s,adulttest,NumSamples)“替换”、假);
サポートベクターマシン(SVM)などの一部のモデルは欠損値を含む観測値を削除しますが,決定木などの他のモデルはそのような観測値を削除しません。モデル間の整合性を維持するには,モデルをあてはめる前に欠損値を含む行を削除します。
成人数据= rmmissing(成人数据);Adulttest = rmmissing(Adulttest);
学習デ,タセットの最初の数行をプレビュ,します。
头(adultdata)
ans =8×15表年龄workClass fnlwgt教育education_num marital_status种族职业关系性capital_gain capital_loss hours_per_week native_country薪水 ___ ___________ __________ ____________ _____________ __________________ _________________ ______________ _____ ______ ____________ ____________ ______________ ______________ ______ 39私人4.91 e + 05单身汉13未婚Exec-managerial相关黑人男性45 0 0美国< = 50 k 25私人2.2022 e + 05年11日7从未结过婚独生子女白人男性0 0 45美国<=50K 24二等兵2.2761e+05 10 6离了婚的二等兵-清洁工未婚白人女性0 0 58美国<=50K 51二等兵1.7329e+05 HS-grad 9离了婚的其他服务没有家庭的白人女性0 0 40美国<=50K 54二等兵2.8029e+05一些大学10已婚公民配偶销售丈夫白人男性0 0 32美国<=50K 53联邦政府39643 HS-grad 9丧偶执行管理没有家庭的白人女性0 0 58美国<=50K52二等兵81859 HS-grad 9已婚文明配偶机器-op- inspect丈夫白人男性0 0 48美国>50K 37二等兵1.2429e+05一些大学10已婚文明配偶行政-文书丈夫白人男性0 0 50美国<=50K
各行は,年齢,教育,職業など,成人1人の属性を表します。最後の列工资
は個人の年収が$50,000以下か,$50,000を超えるかどうかを示します。
デ,タの理解および分類モデルの選択
统计和机器学习工具箱™には,分類木,判別分析,単純ベイズ,最近傍,支持向量机,アンサンブル分類を含む,分類用の複数のオプションが用意されています。アルゴリズムの完全なリストにいては,分類を参照してください。
問題に使用するアルゴリズムを選択する前に,デ,タセットを検査します。国勢調査デ,タには注目すべき複数の特性があります。
デ,タは表形式であり,数値変数とカテゴリカル変数が両方含まれています。
デ,タには欠損値が含まれています。
応答変数 (
工资
)には,2のクラス(バ)。
何かを仮定したり,データで十分に機能することが予測されるアルゴリズムの事前知識を使用しないで,単純に表形式のデータとバイナリ分類をサポートするすべてのアルゴリズムに学習させます。誤り訂正出力符号(ecoc)モデルは3以上のクラスがあるデタで使用されます。判別分析アルゴリズムおよび最近傍アルゴリズムは数値変数とカテゴリカル変数の両方が含まれるデータを解析しません。したがって,この例に適したアルゴリズムは,支持向量机,決定木,決定木のアンサンブル,および単純ベイズモデルです。
ベ,スモデルの構築
2つのSVMモデルを,一方はガウスカーネル,もう一方は多項式カーネルを使用してあてはめます。さらに,決定木,単純ベaaplズモデル,および決定木のアンサンブルをあてはめます。
% SVM与高斯核rng (“默认”)%用于再现性Mdls {1} = fitcsvm(成人数据,“工资”,“KernelFunction”,“高斯”,...“标准化”,真的,“KernelScale”,“汽车”);%支持向量机与多项式核rng (“默认”) mdls{2} = fitcsvm(成人数据,“工资”,“KernelFunction”,多项式的,...“标准化”,真的,“KernelScale”,“汽车”);%决策树rng (“默认”) mdls{3} = fitctree(成人数据,“工资”);%朴素贝叶斯rng (“默认”) mdls{4} = fitcnb(成人数据,“工资”);%决策树的集合rng (“默认”) mdls{5} = fitcensemble(成人数据,“工资”);
スタッキングを使用したモデルの結合
学習データでベースモデルの予測スコアのみを使用すると,スタッキングアンサンブルが過適合となる可能性があります。過適合を減らすには,代わりにk分割交差検証されたスコアを使用します。確実に同じk分割のデ,タ分割を使用して各モデルに学習させるには,cvpartition
オブジェクトを作成し,そのオブジェクトを各ベ,スモデルの関数crossval
に渡します。この例はバイナリ分類問題なので,考慮する必要があるのは陽性または陰性いずれかのクラスのスコアのみです。
k分割交差検証スコアを取得します。
rng (“默认”)%用于再现性N =数字(mdls);分数= 0 (size(adultdata,1),N);CV = cvpartition(adultdata.salary,“KFold”5);为m = crossval(mdls{ii},“cvpartition”、简历);[~,s] = kfoldPredict(m);分数(:,ii) = s(:,m。一会= =“< = 50 k”);结束
次のオプションで交差検証された分類スコア分数
で学習を行って,スタッキングアンサンブルを作成します。
。近似関数を呼び出し,その名前と値のペアの引数
“OptimizeHyperparameters”
を“汽车”
に設定することで,学習デ,タセットを近似し,パラメ,タ,を簡単に調整できます。“详细”
を0に指定して,メッセ,ジ表示を無効にします。再現性を得るために,乱数シ,ドを設定し,
“expected-improvement-plus”
の獲得関数を使用します。また,ランダムフォレストアルゴリズムの再現性を得るため,木学習器の名前と値のペアの引数“复制”
を真正的
に指定します。
rng (“默认”)%用于再现性t = templateTree(“复制”,真正的);stckdMdl = fitcensemble(Scores,adultdata.salary,...“OptimizeHyperparameters”,“汽车”,...“学习者”t...“HyperparameterOptimizationOptions”结构(“详细”0,“AcquisitionFunctionName”,“expected-improvement-plus”));
予測精度の比較
混同行列およびマクネマ,の仮説検定を使用して,検定デ,タセットで分類器の性能をチェックします。
検定デ,タのラベルとスコアの予測
ベースモデルおよびスタッキングアンサンブルに対する検定データセットの予測ラベル,スコア,損失値を求めます。
まず,ベ,スモデルに対して反復処理を行い,予測ラベル,スコア,および損失値を計算します。
Label = [];score = 0 (size(adulttest,1),N);mdlLoss = 0(1,数字(mdls));为i = 1:N [lbl,s] = predict(mdls{i},adulttest);Label = [Label,lbl];分数(:,i) = s(:,m)。一会= =“< = 50 k”);mdlLoss(i) = mdls{i}.loss(adulttest);结束
スタッキングアンサンブルからの予測を标签
およびmdlLoss
に追加します。
[lbl,s] = predict(stckdMdl,score);Label = [Label,lbl];mdlLoss(end+1) = stckdMdl.loss(score,adulttest.salary);
スタッキングアンサンブルのスコアをベ,スモデルのスコアに連結します。
Score = [Score,s(:,1)];
損失値を表示します。
名称= {“SVM-Gaussian”,“SVM-Polynomial”,“决策树”,“天真的贝叶斯,...“决策树集合”,“堆叠合奏”};array2table (mdlLoss“VariableNames”的名字)
ans =1×6表SVM-Gaussian SVM-Polynomial决策树朴素贝叶斯决策树堆合奏的合奏 ____________ ______________ _____________ ___________ __________________________ ________________ 0.15668 0.17473 0.1975 0.16764 0.15833 0.14519
スタッキングアンサンブルの損失値は,ベ,スモデルの損失値よりも低くなっています。
混同行列
関数confusionchart
を使用して,検定データセットの予測したクラスおよび既知の(真正的)クラスをもつ混同行列を計算します。
图c = cell(N+1,1);为I = 1:数字(c) subplot(2,3, I) c{I} = confusionchart(adulttest.salary,label(:, I));标题(名字{我})结束
対角要素は,特定のクラスの正しく分類された。非対角要素は誤分類した観測値の@ @ンスタンスです。
マクネマ,の仮説検定
予測の改善が有意であるかどうかをテストするには,マクネマ,の仮説検定を実行する関数testcholdout
を使用します。スタッキングアンサンブルと単純ベ@ @ズモデルを比較します。
[hNB,pNB] = testcholdout(label(:,6),label(:,4),adulttest.salary)
hNB =逻辑1
pNB = 9.7646e-07
スタッキングアンサンブルと決定木のアンサンブルを比較します。
[hE,pE] = testcholdout(label(:,6),label(:,5),adulttest.salary)
他=逻辑1
pE = 1.9357e-04
いずれの場合も,スタッキングアンサンブルのp値が低いことは,その予測が他のモデルの予測よりも統計的に優れていることを確証しています。