机器学习与MATLAB

回归与提高了决策树

在这个示例中,我们将探讨使用波士顿房价回归问题的数据集可以从UCI机器学习库。

下载的房价

文件名=“housing.txt”;urlwrite (“http://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data”文件名);inputNames = {“罪犯”,“锌”,“印度”,‘底盘’,“诺克斯”,“RM”,“年龄”,“说”,RAD的,“税收”,“PTRATIO”,“B”,“LSTAT”};outputNames = {“MEDV”};housingAttributes = [inputNames, outputNames];

导入数据

一旦文件被保存,你可以将数据导入MATLAB作为表使用导入工具使用默认选项。或者你可以使用下面的代码,可以自动生成从导入工具:

formatSpec =' % 8 f % 7 f % 8 f % 3 f % 8 f % 8 f % 7 f % 8 f % 4 f % 7 f % 7 f % 7 f % 7 f % f % ^ \ n \ [r];文件标识= fopen(文件名,“r”);formatSpec dataArray = textscan(文件标识,“分隔符”,,“空格”,,“ReturnOnError”、假);文件关闭(文件标识);住房=表(dataArray {1: end-1},“VariableNames”,{“VarName1”,“VarName2”,“VarName3”,“VarName4”,“VarName5”,“VarName6”,“VarName7”,“VarName8”,“VarName9”,“VarName10”,“VarName11”,“VarName12”,“VarName13”,“VarName14”});%删除文件和清晰的临时变量clearvars文件名formatSpec文件标识dataArray;删除housing.txt

读入一个表

housing.Properties。VariableNames = housingAttributes;X =房价{:inputNames};住房y = {: outputNames};

火车使用住房数据回归树

rng (5);%的再现性%留出90%的数据进行训练简历= cvpartition(高度(住房),“坚持”,0.1);t = RegressionTree.template (“MinLeaf”5);mdl = fitensemble (X (cv.training:), y (cv.training:)“LSBoost”,500年,t,“PredictorNames”inputNames,“ResponseName”,outputNames {1},“LearnRate”,0.01);L =损失(mdl X (cv.test:), y (cv.test),“模式”,“合奏”);流(“方测试误差= % f \ n”L);
方测试错误= 7.056746

情节适合对训练数据

图(1);%的阴谋([y (cv.training),预测(mdl X (cv.training,:))),“线宽”,2);情节(y (cv.training),“b”,“线宽”2)持有图(预测(mdl X (cv.training,:)),' r . - ',“线宽”,1“MarkerSize”15)%观察第一个几百点,潘多视图xlim(100[0])传说({“实际”,“预测”})包含(“训练数据点”);ylabel (“房价中值”);

图预测的重要性

情节的预测分类的重要性。

[predictorImportance, sortedIndex] = (mdl.predictorImportance)进行排序;图(2);barh (predictorImportance)组(gca,“ytickLabel”inputNames (sortedIndex))包含(“预测的重要性”)

情节错误

图(3);trainingLoss = resubLoss (mdl,“模式”,“累积”);testLoss =损失(mdl X (cv.test:), y (cv.test),“模式”,“累积”);情节(trainingLoss)情节(testLoss“r”)({传奇“训练集的损失”,“测试集的损失”})包含(树木的数量);ylabel (的均方误差);集(gcf,“位置”,249 634 1009 420)

调整和缩小

我们可能不需要500棵树模型的完整准确性。我们可以调整重量和减少基于正则化参数

套索%尝试两种不同的正则化参数值mdl =调整(mdl,“λ”[0.001 - 0.1]);disp (树木的数量:)disp ((mdl.Regularization求和。TrainedWeights > 0))
树木的数量:194 128

缩小整体使用λ= 0.1

mdl =收缩(mdl,“weightcolumn”2);disp (许多树木训练后收缩的)disp (mdl.NTrained)
许多树在128年收缩训练

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

参考和许可