回归增强决策树
在此示例中,我们将使用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
当数据集很大时,使用较少数量的树木和基于预测值重要性的预测器更少,将导致快速计算和准确的结果。
执照:BSD条款