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

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

介绍

汽车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模型4:功率—> trn=4.2577, chk=4.0863 ANFIS模型5:Acceler—> trn=6.9789, chk=6.9317 ANFIS模型6:年—> trn=6.2255, chk=6.1693

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

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

图和函数的结果清楚地表明输入属性的权重是最具影响力的。训练误差和检查误差具有可比性,这意味着不存在过拟合。这意味着我们可以进一步探索是否可以选择多个输入属性来构建ANFIS模型。

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

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:气缸,达到新高:> = 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:ANFIS model 17: Power Weight years—> trn=2.4371, chk=3.2852 ANFIS model 19: Power Weight years—> 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为了能够快速找到正确的输入,只对每个ANFIS进行单一历元的训练。现在输入是固定的,我们可以花更多的时间在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: 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的预测总是要根据数据分布来解释。

另请参阅

||

相关的话题