主要内容

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

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

汽车每加仑英里数(MPG)预测是一个典型的非线性回归问题,它利用汽车的几个特征来预测每加仑英里数的油耗。这个例子的训练数据可以在加州大学欧文分校获得机器学习库并包含了从不同品牌和型号的汽车中收集的数据。

在这个数据集中,六个输入变量是汽缸数、排量、马力、重量、加速度和车型年份。预测的输出变量是MPG中的油耗。在本例中,您不使用来自数据集的制造和建模信息。

对数据进行分区

从原始数据文件中获取数据集auto-gas.dat使用loadGasData函数。

[data,input_name]=loadGasData;

将数据集划分为训练集(奇数索引样本)和验证集(偶数索引样本)。

trn_data =数据(1:2:最终,);val_data =数据(2:2:最终,);

选择输入

使用穷尽研究函数在可用输入中执行详尽搜索,以选择最影响油耗的输入集。使用的第一个参数穷尽研究指定每个组合的输入数量(本例为1)。穷尽研究为每个组合建立一个ANFIS模型,对其进行一个历元的训练,并报告所取得的性能穷尽研究来确定哪个变量本身能最好地预测输出。

穷举搜索(1,trn_数据,val_数据,输入_名称);
第6列ANFIS模型,每个模型有1个从6个候选中选择的输入…ANFIS模型1:气缸-->trn=4.6400,val=4.7255 ANFIS模型2:Disp-->trn=4.3106,val=4.4316 ANFIS模型3:功率-->trn=4.5399,val=4.1713 ANFIS模型4:重量-->trn=4.2577,val=4.0863 ANFIS模型5:加速计-->trn=6.9789,val=6.9317 ANFIS模型6:年份-->trn=6.2255,val=6.1693

图中包含一个轴对象。标题为Error for相应输入的axis对象包含3个类型为line的对象。这些对象代表训练,验证。

图表表明W八个变量的均方根误差最小。换句话说,它能最好地预测MPG。

重量,训练误差和验证误差具有可比性,表明几乎没有过拟合。因此,您可以在ANFIS模型中使用多个输入变量。

尽管模型使用重量Disp单个变量的误差最小,这两个变量的组合不一定会产生最小的训练误差。要确定两个输入变量的哪种组合产生的误差最小,请使用穷尽研究搜索每个组合。

input_index = exhaustiveSearch (2 trn_data val_data input_name);
训练15个ANFIS模型,每个模型从6个候选模型中选择2个输入。ANFIS model 1: Cylinder Disp—> trn=3.9320, val=4.7920 ANFIS model 2: Cylinder Power—> trn=3.7364, val=4.8683 ANFIS model 3: Cylinder Weight—> trn=3.8741, val=4.6763 ANFIS model 4: Cylinder Acceler—> trn=4.3287, val=5.9625 ANFIS model 5: Cylinder Year—> trn=3.7129, val=4.5946 ANFIS model 6:Disp Power—> trn=3.8087, val=3.8594 ANFIS模型7:Disp Weight—> trn=4.0271, val=4.6347 ANFIS模型8:Disp加速器—> trn=4.0782, val=4.4890 ANFIS模型9:Disp Year—> trn=2.9565, val=3.3905ANFIS模型14:Weight Year—> trn=2.7657, val=2.9954 ANFIS模型15:accelerer Year—> trn=5.6242, val=5.6481

图中包含一个轴对象。标题为Error for相应输入的axis对象包含3个类型为line的对象。这些对象代表训练,验证。

结果来自穷尽研究表明,重量一年形成两个输入变量的最优组合。然而,训练误差和验证误差之间的差异大于单独变量之间的差异,这表明包含更多的变量会增加过拟合。运行穷尽研究使用三个输入变量的组合来查看这些差异是否随着模型复杂性的增加而进一步增加。

exhaustiveSearch (3 trn_data val_data input_name);
训练20个ANFIS模型,每个模型从6个候选模型中选择3个输入……ANFIS model 1: Cylinder Disp Power—> trn=3.4446, val=11.5329 ANFIS model 2: Cylinder Disp Weight—> trn=3.6686, val=4.8923 ANFIS model 3: Cylinder Disp accer—> trn=3.6610, val=5.2384 ANFIS model 4: Cylinder Disp Year—> trn=2.5463, val=4.9001ANFIS model 8: Cylinder Weight Acceler—> trn=3.5708, val=4.8379 ANFIS model 9: Cylinder Weight Year—> trn=2.4951, val=4.0434 ANFIS model 10: Cylinder accelerate Year—> trn=3.2698, val=6.2616 ANFIS model 11:ANFIS model 14: Disp Weight Acceler—> trn=3.6075, val=4.2313 ANFIS model 15: Disp Weight Year—> trn=2.5617, val=3.7857 ANFIS model 16:ANFIS模型18:Power Weight Year—> trn=2.4371, val=3.2844 ANFIS模型19:Power accelerer Year—> trn=2.7276, val=3.2580 ANFIS模型20:Weight accelerer Year—> trn=2.3603, val=2.9152

图中包含一个轴对象。标题为Error for相应输入的axis对象包含3个类型为line的对象。这些对象代表训练,验证。

此图显示了选择三个输入的结果重量一年,加速者产生最小的训练误差。然而,训练和验证的误差并没有大大低于最佳双输入模型,这表明新添加的变量加速者没有太多的改进预测。由于简单的模型通常推广得更好,使用两个输入ANFI进行进一步探索。

从原始训练和验证数据集中提取选定的输入变量。

New_trn_data = trn_data(:,[input_index, size(trn_data,2)]);New_val_data = val_data(:,[input_index, size(val_data,2)]);

简称ANFIS训练模型

功能穷尽研究只训练每个ANFIS一个单一的纪元,以快速找到正确的输入。既然输入是固定的,那么可以训练ANFIS模型以适应更多的纪元。

使用genfis函数从训练数据生成初始FIS,然后使用简称anfis对它进行微调。

in_fis = genfis (new_trn_data (: 1: end-1), new_trn_data(:,结束));anfisOpt = anfisOptions (“InitialFIS”in_fis,“EpochNumber”, 100,...“StepSizeDecreaseRate”,0.5,...“StepSizeIncreaseRate”, 1.5,...“ValidationData”new_val_data,...“DisplayANFISInformation”0,...“DisplayErrorValues”0,...“DisplayStepSize”0,...“DisplayFinalResults”, 0);[trn_out_fis, trn_error step_size、val_out_fis val_error] =...anfis(新trn数据,ANFISOT);

简称anfis返回培训和验证错误。在培训过程中绘制培训和验证错误。

[a, b] = min (val_error);trn_error情节(1:10 0,“g -”, val_error 1:10 0的r -, b,,“高”)标题(“培训(绿色)和验证(红色)错误曲线”)xlabel(的数字时代)伊拉贝尔(“RMSE”

图中包含一个轴对象。标题为Training(绿色)和validation(红色)的axis对象包含3个类型为line的对象。

该图显示了100个ANFIS训练时期的误差曲线。绿色曲线表示训练误差,红色曲线表示验证误差。最小验证误差出现在约45纪元处,由圆圈表示。请注意,验证误差曲线在50个时代后上升,这表明进一步的训练会过度拟合数据,并产生越来越差的泛化。

简称ANFIS模型分析

首先,利用ANFIS模型和线性模型各自的验证RMSE值来比较它们的性能。

ANFIS预测可以与线性回归模型进行比较,通过比较它们各自的RMSE(均方根)值与验证数据。

进行线性回归N =大小(trn_data, 1);A = [trn_data(:,1:6) ones(N,1)];B = trn_data (: 7);系数= \ B;从训练数据中求解回归参数数控=大小(val_data, 1);A_ck = [val_data(:,1:6) ones(Nc,1)];B_ck = val_data (: 7);lr_rmse =规范(A_ck * coef-B_ck) /√(Nc);流('\nRMSE对验证数据\nANFIS: %1.3f\tLinear Regression: %1.3f\n'...一、lr_rmse);
验证数据ANFIS的RMSE: 2.978线性回归:3.444

ANFIS模型的有效RMSE较低,因此优于线性回归模型。

变量瓦尔_out_fis是ANFIS模型在训练过程中验证误差最小时的快照。绘制模型的输出面。

val_out_fis.Inputs(1)。Name =“重量”;val_out_fis.Inputs(2)。Name =“年”;val_out_fis.Outputs(1)。Name =“英里”;gensurf (val_out_fis)

图中包含一个轴对象。axis对象包含一个类型为surface的对象。

输出曲面是非线性和单调的,并说明了ANFIS模型如何响应变量值的变化重量一年

从表面上看,对于1978年或之后生产的汽车来说,较重的汽车效率更高。绘制数据分布图,查看输入数据中可能导致这种有违直觉的结果的任何潜在缺口。

情节(new_trn_data (: 1) new_trn_data (:, 2),“波”...new_val_data (: 1), new_val_data (:, 2),“处方”)xlabel(“重量”)伊拉贝尔(“年”)标题(“培训(o)和验证(x)数据”

图中包含一个轴对象。标题为Training (o)和Validation (x) Data的轴对象包含2个类型为line的对象。

由于缺乏后期制造的重型车辆的培训数据,导致出现异常结果。由于数据分布严重影响预测精度,因此在解释ANFIS模型时应考虑数据分布。

另请参阅

||

相关话题