Этот пример, как то, как предсказать ответы из выборки деревьев регрессии, и затем построить результаты.
Загрузите набор данных carsmall
. Считайте Weight
как предиктор ответа MPG
.
load carsmall
idxNaN = isnan(MPG + Weight);
X = Weight(~idxNaN);
Y = MPG(~idxNaN);
n = numel(X);
Разделите данные в обучение (50%) и валидацию (50%-е) наборы.
rng(1) % For reproducibility idxTrn = false(n,1); idxTrn(randsample(n,round(0.5*n))) = true; % Training set logical indices idxVal = idxTrn == false; % Validation set logical indices
Вырастите дерево регрессии использование учебных наблюдений.
Mdl = fitrtree(X(idxTrn),Y(idxTrn)); view(Mdl,'Mode','graph')
Вычислите адаптированные значения наблюдений валидации для каждого из нескольких поддеревьев.
m = max(Mdl.PruneList); pruneLevels = 0:2:m; % Pruning levels to consider z = numel(pruneLevels); Yfit = predict(Mdl,X(idxVal),'SubTrees',pruneLevels);
Yfit
является z
n
матрицей приспособленных значений, в которых строки соответствуют наблюдениям, и столбцы соответствуют поддереву.
Постройте Yfit
и Y
против X
.
figure; sortDat = sortrows([X(idxVal) Y(idxVal) Yfit],1); % Sort all data with respect to X plot(sortDat(:,1),sortDat(:,2),'*'); hold on; plot(repmat(sortDat(:,1),1,size(Yfit,2)),sortDat(:,3:end)); lev = cellstr(num2str((pruneLevels)','Level %d MPG')); legend(['Observed MPG'; lev]) title 'Out-of-Sample Predictions' xlabel 'Weight (lbs)'; ylabel 'MPG'; h = findobj(gcf); axis tight; set(h(4:end),'LineWidth',3) % Widen all lines
Значения Yfit
для более низких уровней сокращения имеют тенденцию следовать за данными более тесно, чем более высокие уровни. Выше сокращающие уровни имеют тенденцию быть плоскими для больших интервалов X
.