一加仑汽油所行驶的里程的预测

这个例子展示了如何使用先前记录的观察数据来预测汽车的燃料消耗(每加仑英里数)。

介绍

汽车MPG(英里/加仑)预测是一个典型的非线性回归问题,其中汽车轮廓信息的几个属性被用来预测另一个连续属性,即MPG中的油耗。训练数据可从UCI(加州大学欧文分校)获得。机器学习库并包含从各种不同的制造和型号的汽车收集的数据。

上面的表格是来自MPG数据集的几个观察结果或样本。汽缸、排水量、马力、重量、加速度和型号年份。要预测的输出变量是MPG中的油耗。(表中第一列的汽车制造商和车型不用于预测)。

分区数据

数据集从原始数据文件“auto-gas.dat”获得。然后将数据集划分为训练集(索引为奇数的样本)和检查集(索引为偶数的样本)。

(数据、input_name) = loadgas;trn_data =数据(1:2:最终,);chk_data =数据(2:2:最终,);

输入选择

这个函数exhsrch对可用输入进行彻底的搜索,以选择对燃油消耗影响最大的输入集。函数的第一个参数指定搜索期间尝试的输入组合的数量。从本质上讲,exhsrch为每个组合建立一个ANFIS模型,并对其进行一个epoch的培训,并报告所获得的性能。在下面的例子中,exhsrch用于确定在预测输出时最有影响的输入属性。

exhsrch (1 trn_data chk_data input_name);
训练6个ANFIS模型,每个模型从6个候选对象中选择1个输入…ANFIS model 1: Cylinder—> trn=4.6400, chk=4.7255 ANFIS model 2: Disp—> trn=4.3106, chk=4.4316 ANFIS model 3: Power—> trn=4.5399, chk=4.1713 ANFIS model 4: Weight—> trn=4.2577, chk=4.0863 ANFIS model 5: Acceler—> trn=6.9789, chk=6.9317 ANFIS model 6: Year—> trn=6.2255, chk=6.1693

图1:各输入变量对油耗的影响

图1中最左边的输入变量的错误最少,换句话说,与输出的相关性最大。

从函数的图形和结果可以清楚地看出,输入属性“Weight”的影响最大。训练和检查错误是可比较的,这意味着没有过拟合。这意味着我们可以进一步探索是否可以选择多个输入属性来构建ANFIS模型。

直观地说,我们可以简单地选择重量Disp直接因为他们有最少的错误,如图所示。然而,这并不一定是两个输入的最佳组合,从而导致最小的训练误差。为了验证这一点,我们可以使用exhsrch搜索两个输入属性的最佳组合。

input_index = exhsrch (2 trn_data chk_data input_name);
训练15个ANFIS模型,每个模型从6个候选对象中选择2个输入…简称ANFIS模型1:汽缸Disp——> trn = 3.9320,分= 4.7920简称ANFIS模型2:气缸功率达到新高:> = 3.7364,分= 4.8683简称ANFIS模型3:汽缸体重达到新高:- - > = 3.8741,分= 4.6763简称ANFIS模型4:气缸加速者——> trn = 4.3287,分= 5.9625简称ANFIS模型5:气缸- - > trn = 3.7129,分= 4.5946简称ANFIS模型6:Disp权力——> trn = 3.8087,分= 3.8594简称ANFIS模型7:Disp体重达到新高:- - > = 4.0271,分= 4.6350简称ANFIS模型8:Disp加速者——> trn = 4.0782,分= 4.4890简称ANFIS模型9:Disp——> trn = 2.9565,嗯= 3.3905简称ANFIS模型10:权力体重达到新高:- - > = 3.9310,分= 4.2976简称ANFIS模型11:力量加速者——> trn = 4.2740,分= 3.8738简称ANFIS模型12:权力,达到新高:> = 3.3796,分= 3.3505简称ANFIS模型13:体重加速者达到新高:- - > = 4.0875,分= 4.0095简称ANFIS模型14:重量,达到新高:> = 2.7657,分= 2.9953简称ANFIS模型15:加速者,达到新高:> = 5.6242,嗯= 5.6481

图2:所有两个输入变量组合及其对燃油消耗的影响

的结果exhsrch表明,重量一年形成两个输入属性的最优组合。训练和检查错误越来越明显,表明过度拟合的开始。在构建ANFIS模型时使用两个以上的输入可能不太明智。我们可以检验这个前提来验证它的有效性。

exhsrch (3 trn_data chk_data input_name);
训练20个ANFIS模型,每个模型从6个候选对象中选择3个输入…简称ANFIS模型1:汽缸Disp权力——> trn = 3.4446,分= 11.5329简称ANFIS模型2:汽缸Disp体重达到新高:- - > = 3.6686,分= 4.8922简称ANFIS模型3:汽缸Disp加速者——> trn = 3.6610,分= 5.2384简称ANFIS模型4:汽缸Disp年达到新高:- - > = 2.5463,分= 4.9001简称ANFIS模型5:气缸功率重量达到新高:- - > = 3.4797,分= 9.3761简称ANFIS模型6:气缸加速者——> trn = 3.5432,分= 4.4804简称ANFIS模型7:气缸功率达到新高:- - > = 2.6300,分= 3.6300简称ANFIS模型8:气缸加速者体重达到新高:- - > = 3.5708,嗯= 4.8379简称ANFIS模型9:汽缸重量,达到新高:> = 2.4951,分= 4.0435简称ANFIS模型10:气缸加速者达到新高:- - > = 3.2698,分= 6.2616简称ANFIS模型11:Disp功率重量达到新高:- - > = 3.5879,分= 7.4942简称ANFIS模型12:Disp力量加速者——> trn = 3.5395,分= 3.9953简称ANFIS模型13:Disp力量达到新高:- - > = 2.4607,分= 3.3563简称ANFIS模型14:Disp体重加速者达到新高:- - > = 3.6075,分= 4.2318简称ANFIS模型15:Disp重量达到新高:- - > = 2.5617,分= 3.7866简称ANFIS模型16:Disp Acceler Year—> trn=2.4149, chk=3.2480 ANFIS model 17: Power Weight Acceler—> trn=3.7884, chk=4.0480 ANFIS model 18: Power Weight Year—> trn=2.4371, chk=3.2852 ANFIS model 19: Power Acceler Year—> trn=2.7276, chk=3.2580 ANFIS model 20: Weight Acceler Year—> trn=2.3603, chk=2.9152

图3:三种输入变量组合及其对油耗的影响

图中显示了选择三个输入的结果,其中重量,一年,加速者被选为三个输入变量的最佳组合。然而,最小的训练(和检查)错误并没有显著减少最佳双输入模型的错误,这表明新添加的属性加速者预测没有太大改善。为了更好的泛化,我们总是喜欢结构简单的模型。因此,我们将坚持双输入ANFIS进行进一步的探索。

然后,我们从原始的训练和检查数据集中提取所选的输入属性。

关闭所有;new_trn_data = trn_data(:,[input_index, size(trn_data,2)]);new_chk_data = chk_data(:,[input_index, size(chk_data,2)]);

简称ANFIS训练模型

这个函数exhsrch只训练每个anfi一个历元,以便能够快速找到正确的输入。现在输入是固定的,我们可以花更多的时间在ANFIS训练上(100个epoch)。

genfis函数从训练数据生成初始FIS,然后由ANFIS进行微调以生成最终的模型。

in_fismat = genfis (new_trn_data (: 1: end-1), new_trn_data(:,结束));anfisOpt = anfisOptions (“InitialFIS”in_fismat,“EpochNumber”,100,“StepSizeDecreaseRate”,0.5,“StepSizeIncreaseRate”,1.5,“ValidationData”new_chk_data,“DisplayANFISInformation”0,“DisplayErrorValues”0,“DisplayStepSize”0,“DisplayFinalResults”,0);[trn_out_fismat, trn_error step_size、chk_out_fismat chk_error] =简称anfis (new_trn_data anfisOpt);

ANFIS返回关于其输出参数列表中的训练数据和检查数据的错误。错误图提供了有关训练过程的有用信息。

[a, b] = min (chk_error);trn_error情节(1:10 0,“g -”,chk_error 1:10 0的r -,b,,“柯”)标题(“训练(绿色)和检查(红色)错误曲线”,“字形大小”(10)包含“数字时代”,“字形大小”(10)ylabel“RMS错误”,“字形大小”,10)

图4:ANFIS培训和检查错误

上图为ANFIS训练100个epoch的误差曲线。绿色曲线表示训练误差,红色曲线表示检查误差。最小的检查错误发生在纪元45左右,由一个圆圈表示。注意,检查错误曲线在50个epoch之后会上升,这表明进一步的训练与数据的吻合度过高,从而导致更糟糕的泛化

ANFIS vs线性回归

在这一点上,一个很好的练习是用线性回归模型检查ANFIS模型的性能。

ANFIS预测可以与线性回归模型进行比较,方法是将它们各自的RMSE(均方根)值与检查数据进行比较。

执行线性回归的百分比N =大小(trn_data, 1);A = [trn_data(:,1:6) ones(N,1)];B = trn_data (: 7);系数= \ B;从训练数据中求解回归参数数控=大小(chk_data, 1);A_ck = [chk_data(:,1:6) ones(Nc,1)];B_ck = chk_data (: 7);lr_rmse =规范(A_ck * coef-B_ck) /√(Nc);%打印结果流('\nRMSE针对检查数据\nANFIS: %1.3f\tLinear Regression: %1.3f\n',lr_rmse);
检验数据RMSE ANFIS: 2.980线性回归:3.444

可以看出ANFIS模型优于线性回归模型。

简称ANFIS模型分析

的变量chk_out_fismat表示训练过程中最小检查误差时ANFIS模型的快照。模型的输入-输出曲面如下图所示。

chk_out_fismat.Inputs (1)。Name =“重量”;chk_out_fismat.Inputs (2)。Name =“年”;chk_out_fismat.Outputs (1)。Name =“英里”;%生成FIS输出曲面图gensurf (chk_out_fismat);

图5:用于训练FIS的输入-输出曲面

上面所示的输入-输出曲面是一个非线性单调曲面,并说明了ANFIS模型将如何响应“权重”和“年份”的不同值。

限制和注意事项

我们可以在表面的远端角落看到一些虚假的影响。抬高的转角表示,汽车越重,其耗油效率就越高。这完全违背直觉,是缺乏数据的直接结果。

情节(new_trn_data (: 1) new_trn_data (:, 2),“波”,new_chk_data (: 1), new_chk_data (:, 2),“处方”)包含(“重量”,“字形大小”(10)ylabel“年”,“字形大小”10)标题(“培训(o)及核对(x)资料”,“字形大小”,10)

图6:权重与年份图显示右上角缺少数据

上面的图显示了数据分布。右上角训练数据的缺乏导致了前面提到的假ANFIS面。因此,ANFIS的预测总是要考虑到数据的分布。

另请参阅

||

相关的话题