ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

代理分岐

欠損データがある場合、木および木のアンサンブルに代理分岐が含まれることで、予測性能が向上します。さらに、代理分岐では、予測子の重要度の推定が異なることよくあります。重要度の低い予測子を推測することによって、予測に必要な時間やメモリを節約できるだけでなく、予測の動作についても理解しやすくなります。

この例では、テスト セットに欠損値が含まれるデータの予測に、代理分岐を使用した場合の影響を示します。

標本データを読み込みます。そのデータを学習セットおよびテスト セットに分割します。

load ionosphere;

rng(10) % for reproducibility
cv = cvpartition(Y,'Holdout',0.3);
Xtrain = X(training(cv),:);
Ytrain = Y(training(cv));
Xtest = X(test(cv),:);
Ytest = Y(test(cv));

代理分岐を使用してまたは使用せずに決定木をバギングします。

b = fitcensemble(Xtrain,Ytrain,'Method','Bag','NumLearningCycles',50);

templS = templateTree('Surrogate','On');
bs = fitcensemble(Xtrain,Ytrain,'Method','Bag','NumLearningCycles',50,...
    'Learners',templS);

テスト セットの値の半分が欠損しているものとします。

Xtest(rand(size(Xtest))>0.5) = NaN;

代理分岐を使用してまたは使用せずに精度を検定します。

figure;
plot(loss(b,Xtest,Ytest,'Mode','Cumulative'));
hold on;
plot(loss(bs,Xtest,Ytest,'Mode','Cumulative'),'r--');
legend('Regular trees','Trees with surrogate splits');
xlabel('Number of trees');
ylabel('Test classification error');

マクネマー検定を使用して結果に見られる相違の統計的有意性をチェックします。ラベルを nominal データ型に変換して、等価性を簡単にチェックできるようにします。

Yfit = nominal(predict(b,Xtest));
YfitS = nominal(predict(bs,Xtest));
N10 = sum(Yfit==nominal(Ytest) & YfitS~=nominal(Ytest));
N01 = sum(Yfit~=nominal(Ytest) & YfitS==nominal(Ytest));
mcnemar = (abs(N10-N01) - 1)^2/(N10+N01);
pval = 1 - chi2cdf(mcnemar,1)
pval = 1.7683e-04

p 値が極端に低いのは、代理分岐を使用したアンサンブルが統計的有意性から見ても優れた結果を残していることを示しています。

参考

|

関連するトピック