回归增强决策树

在此示例中,我们将使用UCI机器学习存储库中可用的Boston House价格进行了回归问题。

下载房价

filename =.'住房.txt';urlwrite('http://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data',文件名);Inputnames = {'Crim''Zn''indus''chas''nox''R M''年龄''DIS''rad''税''ptratio''B''lstat'};OutputNames = {'Medv'};SupporTtributes = [InputNames,OutputNames];

导入数据

保存文件后,您可以将数据导入Matlab作为使用表格导入工具使用默认选项。或者,您可以使用以下代码从导入工具中生成的:

formatspec =.'%8f%7f%8f%3f%8f%8f%7f%8f%4f%7f%7f%7f%7f%f%[^ \ n \ r]';fileid = fopen(文件名,'r');dataArray = TextScan(FileID,FormatSpec,'delimiter''''whitespace''''returnonerr', 错误的);fclose(fileid);住房=表(dataArray {1:结束-1},'variablenames',{'varname1''varname2''varname3''varname4''varname5''varname6''varname7''varname8''varname9''varname10''varname11''varname12''varname13''varname14'});%删除文件并清除临时变量Clearvars.文件名formatspec.fileid.dataarray.ANS.;删除Supput.txt.

读入桌子

supann.properties.variablenames = supportattributes;X = HOUNNATH {:,输入名称};y =住房{:,输出名称};

使用住房数据列出回归树

rng(5);重复性的%%留出90%的培训数据cv = cvpartition(高度(外壳),'坚持',0.1);t = regrestiontree.template('minleaf'5);mdl = fitysemble(x(cv.training,:),y(cv.training,:),'lsboost',500,T,......'predictornames',输入名称,'responsebame',输出名称{1},'学习',0.01);l =损失(mdl,x(cv.test,:),y(cv.test),'模式''合奏');fprintf('均值 - 方检测误差=%f \ n',l);
平均方检测误差= 7.056746

情节适合训练数据

图1);%图([y(cv.training),预测(mdl,x(cv.training,:))],'linewidth',2);绘图(y(cv.tring),'B''行宽',2),举行绘图(预测(MDL,x(cv.tring,:)),'r.-''行宽',1,'Markersize'15)%观察前一百分点,平移查看更多xlim([0 100])传奇({'实际的''预料到的'})xlabel('培训数据点');ylabel('中位房价');

情节预测者重要性

绘制预测因子对重要性进行了分类。

[Predictorimportance,sortedIndex] = sort(mdl.predictorimportance);图(2);Barh(预测)集(GCA,'yticklabel',输入名称(SortedIndex))XLabel('预测重要性'

绘图错误

图(3);Trysersitalloss = Resubloss(MDL,'模式''累积');testloss =损失(mdl,x(cv.test,:),y(cv.test),'模式''累积');情节(培训俱乐部),持有情节(testloss,'r') 传奇({'培训集丢失''测试集丢失'})xlabel('树的数量');ylabel('均匀的错误');设置(GCF,'位置',[249 634 1009 420])

正规化并缩小集合

我们可能不需要所有500棵树来获得模型的全部准确性。我们可以基于正则化参数来规范权重和缩小

%尝试套索的两个不同正则化参数值mdl =正规化(MDL,'lambda',[0.001 0.1]);DISP('树的数量:')disp(sum(mdl.regularization.troundweights> 0))
树木数量:194 128

使用缩小集合lambda = 0.1

mdl = shrink(mdl,'teachcolumn',2);DISP('收缩后训练的树木数量')DISP(MDL.NTROAGE)
收缩后训练的树数128

当数据集很大时,使用较少数量的树木和基于预测值重要性的预测器更少,将导致快速计算和准确的结果。

参考和许可证