Суррогатные сплайты

Когда значение оптимального предиктора разделения для наблюдения отсутствует, если вы задаете, чтобы использовать суррогатные разделения, программа отправляет наблюдение в левый или правый дочерний узел, используя лучший суррогатный предиктор. Когда у вас отсутствуют данные, деревья и ансамбли деревьев с суррогатными сплитами дают лучшие предсказания. В этом примере показано, как улучшить точность предсказаний для данных с отсутствующими значениями с помощью деревьев решений с суррогатными разделениями.

Загрузка выборочных данных

Загрузите ionosphere набор данных.

load ionosphere

Разделите набор данных на наборы для обучения и тестирования. Продержитесь 30% данных для проверки.

rng('default') % For reproducibility
cv = cvpartition(Y,'Holdout',0.3);

Идентифицируйте обучающие и тестовые данные.

Xtrain = X(training(cv),:);
Ytrain = Y(training(cv));
Xtest = X(test(cv),:);
Ytest = Y(test(cv));

Предположим, что половина значений в тестовом наборе отсутствует. Установите половину значений в тестовом наборе равной NaN.

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

Обучите случайный лес

Обучите случайный лес из 150 классификационных деревьев без суррогатных расщеплений.

templ = templateTree('Reproducible',true);  % For reproducibility of random predictor selections
Mdl = fitcensemble(Xtrain,Ytrain,'Method','Bag','NumLearningCycles',150,'Learners',templ);

Создайте шаблон дерева решений, который использует суррогатные разделения. Дерево, использующее суррогатные разделения, не отбрасывает все наблюдение, когда оно включает отсутствующие данные в некоторых предикторах.

templS = templateTree('Surrogate','On','Reproducible',true);

Обучите случайный лес с помощью шаблона templS.

Mdls = fitcensemble(Xtrain,Ytrain,'Method','Bag','NumLearningCycles',150,'Learners',templS);

Точность теста

Проверяйте точность предсказаний с и без суррогатных расщеплений.

Спрогнозируйте ответы и создайте матричные графики неточностей, используя оба подхода.

Ytest_pred = predict(Mdl,Xtest);
figure
cm = confusionchart(Ytest,Ytest_pred);
cm.Title = 'Model Without Surrogates';

Figure contains an object of type ConfusionMatrixChart. The chart of type ConfusionMatrixChart has title Model Without Surrogates.

Ytest_preds = predict(Mdls,Xtest);
figure
cms = confusionchart(Ytest,Ytest_preds);
cms.Title = 'Model with Surrogates';

Figure contains an object of type ConfusionMatrixChart. The chart of type ConfusionMatrixChart has title Model with Surrogates.

Все off-диагональные элементы в матрице неточностей представляют неправильно классифицированные данные. Хороший классификатор приводит к матрице неточностей, которая выглядит доминирующим образом по диагонали. В этом случае классификационная ошибка ниже для модели, обученной с суррогатными сплитами.

Вычислите совокупные ошибки классификации. Задайте 'Mode','Cumulative' при оценке классификационных ошибок при помощи loss функция. The loss функция возвращает вектор, в котором находится элемент J указывает на ошибку при использовании первого J учащиеся.

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

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Trees without surrogate splits, Trees with surrogate splits.

Значение ошибки уменьшается, когда количество деревьев увеличивается, что указывает на хорошую эффективность. Классификационная ошибка ниже для модели, обученной с суррогатными сплитами.

Проверяйте статистическую значимость различия в результатах при помощи compareHoldout. Эта функция использует тест Макнемара.

[~,p] = compareHoldout(Mdls,Mdl,Xtest,Xtest,Ytest,'Alternative','greater')
p = 0.0384

Низкое значение p указывает, что ансамбль с суррогатными расщеплениями лучше статистически значимым образом.

Оценка важности предиктора

Оценки важности предиктора могут варьироваться в зависимости от того, использует ли дерево суррогатные расщепления. Оцените измерения важности предиктора путем перестановки наблюдений вне мешка. Затем найдите пять самых важных предикторов.

imp = oobPermutedPredictorImportance(Mdl);
[~,ind] = maxk(imp,5)
ind = 1×5

     5     3    27     8    14

imps = oobPermutedPredictorImportance(Mdls);
[~,inds] = maxk(imps,5)
inds = 1×5

     3     5     8    27     7

После оценки важности предиктора можно исключить неважные предикторы и снова обучить модель. Устранение неважных предикторов экономит время и память для предсказаний и облегчает понимание предсказаний.

Если обучающие данные включают много предикторов, и вы хотите проанализировать важность предиктора, задайте 'NumVariablesToSample' от templateTree функционировать как 'all' для древовидных учеников ансамбля. В противном случае программное обеспечение может не выбрать некоторые предикторы, недооценив их важность. Для получения примера смотрите Выбор предикторов для случайных лесов.

См. также

| |

Похожие темы