Если значение оптимального предиктора разделения для наблюдения отсутствует, при указании использования суррогатных разбиений программа отправляет наблюдение в левый или правый дочерний узел с использованием наилучшего суррогатного предиктора. Когда отсутствуют данные, деревья и ансамбли деревьев с суррогатными расколами дают лучшие прогнозы. В этом примере показано, как повысить точность прогнозов для данных с отсутствующими значениями с помощью деревьев решений с суррогатными разделениями.
Загрузить 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';
Ytest_preds = predict(Mdls,Xtest);
figure
cms = confusionchart(Ytest,Ytest_preds);
cms.Title = 'Model with Surrogates';
Все не диагональные элементы матрицы путаницы представляют неправильно классифицированные данные. Хороший классификатор дает матрицу путаницы, которая выглядит преимущественно диагональной. В этом случае ошибка классификации ниже для модели, обученной с суррогатными разделениями.
Оценка совокупных ошибок классификации. Определить 'Mode','Cumulative' при оценке ошибок классификации с помощью loss функция. 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')

Значение ошибки уменьшается по мере увеличения числа деревьев, что указывает на хорошую производительность. Ошибка классификации ниже для модели, обученной с суррогатными разделениями.
Проверьте статистическую значимость разницы в результатах с помощью compareHoldout. Эта функция использует тест McNemar.
[~,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' для обучающихся на деревьях ансамбля. В противном случае программное обеспечение может не выбирать некоторые предикторы, недооценивая их важность. Пример см. в разделе Выбор предикторов для случайных лесов.
compareHoldout | fitcensemble | fitrensemble