主要内容

基于减法聚类和ANFIS的城郊通勤模型

此示例显示如何使用减法聚类和ANFI调整来模拟从区域生成的汽车旅行数量和区域的人口统计数据之间的关系。

负载流量数据

本例使用了来自特拉华州纽卡斯尔县100个交通分析区域的人口统计和出行数据。该数据集包含五个人口统计因素作为输入变量:人口、居住单元数量、车辆拥有量、家庭收入中位数和总就业人数。数据包含一个输出变量,汽车出行次数。

加载培训和验证数据。

负载trafficdata.

数据集包含100个数据点,75个用于训练,25个用于验证。训练输入数据(datain)和验证输入数据(瓦塔坦)每个都有五列表示输入变量。训练输出数据(数据库)和验证输出数据(valdataout.),每个都有一列表示输出变量。

绘制训练数据。

次要情节(2,1,1)情节(datain)传说(“人口”“住宅”“车辆所有权”...“中位收入”“总就业”“位置”“西北”) 标题('输入变量')Xlabel(的数据点)子图(2,1,2)绘图(DataOut)传奇(“旅行数量”) 标题(“输出变量”)Xlabel(的数据点

图中包含2个轴对象。标题为Input Variables的axis对象1包含5个类型为line的对象。这些对象代表人口、住房数量、车辆拥有量、收入中位数、总就业人数。标题为Output Variable的axis对象2包含一个类型为line的对象。该对象表示行程数。

集群数据

减法聚类是一种快速的一遍算法,用于估计数据集中的聚类数量和聚类中心。使用减法聚类对训练数据进行聚类,使用subclust函数。

[c,s] =小组([日期数据排序],0.5);

对于此示例,使用群集影响范围0.5.当您将数据空间视为单位超立方体时,该值表示群集的影响范围。指定小群集半径通常会生成数据中的许多小群集,从而产生具有许多规则的FIS。指定大型群集半径通常会在数据中产生一些大型群集,并导致规则更少。

每一排C包含由聚类算法识别的聚类中心的位置。在这种情况下,算法在数据中发现了三个聚类。

C
C =3×61.8770 0.7630 0.9170 18.7500 1.5650 2.1830 0.3980 0.1510 0.1320 8.1590 0.6250 0.6480 3.1160 1.1930 1.4870 19.7330 0.6030 2.3850

将训练数据与集群中心一起绘制两个输入变量。

图绘图(数据(:,5),dataout(:,1),“。”C (:, 5), C (:, 6),“r *”)传说(“数据”“集群中心”“位置”“东南”)Xlabel(“总就业”)ylabel(“旅行”) 标题(“数据和集群中心”

图中包含一个轴对象。标题为Data和Cluster Centers的axis对象包含两个类型为line的对象。这些对象表示数据点,群集中心。

价值年代显示集群中心对每个数据维的影响范围。所有集群中心都有一组相同的年代值。

年代
S =1×61.1621 0.4117 0.6555 7.6139 2.8931 1.4395

用数据聚类生成模糊推理系统

使用Genfis.函数使用减法聚类从数据生成模糊推理系统(FIS)。

使用聚类方法查找规则的一个重要优点是,与没有聚类生成的FIS相比,结果规则更适合于输入数据。当输入数据具有高维时,这种裁剪减少了规则的总数。

首先,创建一个GenfisOptions.为减法群集设置的选项,指定相同的群集影响范围值。

fisOpt = genfisOptions (“SubtractiveClustering”...“ClusterInfluenceRange”,0.5);

使用培训数据和指定选项生成FIS模型。

fis = genfis (datain dataout fisOpt);

基于输入和输出训练数据的尺寸,生成的FIS具有五个输入和一个输出。Genfis.为输入,输出和隶属函数分配默认名称。

生成的FIS对象是一个具有三条规则的一阶Sugeno系统。

showrule (fis,“格式”“象征”
ans =3 x132 char数组“1。in1==in1cluster1 & (in2==in2cluster1) & (in3==in3cluster1) & (in4==in4cluster1) & (in5==in5cluster1) => (out1=out1cluster1) (1)' '(in1==in1cluster2) & (in3==in3cluster2) & (in4==in4cluster2) & (in5==in5cluster2) => (out1=out1cluster2) (1)' '(in1==in1cluster3) & (in2==in2cluster3) & (in4==in4cluster3) & (in5==in5cluster3) => (out1=out1cluster3) (1)'

你可以这样定义每个规则:如果FIS的输入(人口、居住单位、车辆数量、收入和就业)强烈地属于一个集群的代表性成员函数,那么输出(出行数量)必须属于同一个集群。也就是说,每个规则简单地将输入空间中的一个集群映射到输出空间中的同一个集群。

每个输入和输出变量有三个隶属函数,对应于确定的三个聚类。根据聚类中心和聚类影响范围,推导了输入和输出隶属函数的参数。例如,绘制第一个输入变量的成员函数。

图Plotmf(FIS,“输入”1)

图中包含一个轴对象。轴对象包含6个类型的类型,文本的6个对象。

评估初始FIS性能

将训练输入值应用到模糊系统中,并找出相应的输出值。

datain fuzout = evalfis (fis);

计算模糊系统输出值与预期输出值的均方根误差(RMSE)。

trnrmse = norm(fuzout-dataout)/ sqrt(长度(fuzout))
trnRMSE = 0.5276

使用验证数据验证模糊系统的性能。

valdatain valfuzout = evalfis (fis);valRMSE =规范(valfuzout-valdataout) /√长度(valfuzout))
valrmse = 0.6179

根据验证数据绘制模型的输出。

图绘制(valdataout)情节(valfuzout“o”) 抓住离开ylabel(“产值”)传说(“验证数据”“FIS输出”“位置”“西北”

图中包含一个轴对象。轴对象包含2个类型的物体。这些对象表示验证数据,FIS输出。

该曲线表明该模型不会良好地预测验证数据。

使用ANFIS调整FIS

为了提高FIS性能,可以使用ANFIS.函数。首先,尝试使用一个相对较短的训练周期(20个epoch),而不使用验证数据,然后根据验证数据测试得到的FIS模型。

选择= anfisOptions (“InitialFIS”金融中间人,...“EpochNumber”, 20岁,...“InitialStepSize”,0.1);FIS2 = ANFIS([DATAIN DATAOUT],OPT);
ANFIS info: Number of nodes: 44 Number of linear parameters: 18 Number of nonlinear parameters: 30 Total Number of parameters: 48 training data pairs: 75 Number of checking data pairs: 0 Number of fuzzy rules: 3 Start training ANFIS…1 0.527607 2 0.513727 3 0.492996 4 0.499985 5 0.490585 6 0.492924步长在历元7后减小到0.090000。纪元10后步长增加到0.099000。步长在历元14之后增加到0.108900。纪元18后步长增加到0.119790。18 0.420408 19 0.420512 20 0.420275到达指定的历元数。ANFIS训练完成于新纪元20。最小训练RMSE = 0.420275

评估FIS对训练数据和验证数据的性能。

fuzout2 = evalfis(FIS2,Datain);trnrmse2 = norm(fuzout2-dataout)/ sqrt(长度(fuzout2))
trnrmse2 = 0.4203.
valfuzout2 = evalfis(FIS2,valdatain);valrmse2 = norm(valfuzout2-valdataout)/ sqrt(长度(valfuzout2))
valRMSE2 = 0.5894

与训练数据相比,模型的性能有了实质性的提高,但与验证数据相比仅略有提高。根据验证数据绘制改进的模型输出。

图绘制(valdataout)情节(valfuzout'o')情节(valfuzout2“x”) 抓住离开ylabel('产值')传说(“验证数据”...“初始FIS:RMSE =”+ num2str (valRMSE),..."调谐FIS: RMSE = "+ num2str (valRMSE2),...“位置”“西北”

图中包含一个轴对象。轴对象包含3个类型为line的对象。这些对象表示验证数据,初始FIS: RMSE = 0.61788,调整FIS: RMSE = 0.58941。

检查ANFIS结果是否过拟合

在调整FIS时,当验证误差开始增加而训练误差继续减少时,可以检测过拟合。

检查模型以供过安,使用ANFIS.使用验证数据培训200个时期的模型。首先通过修改现有来配置ANFIS培训选项anfisOptions选项设置。指定纪元和验证数据的数量。由于训练纪元的数量比较大,所以在命令窗口中不显示训练信息。

opt.epochnumber = 200;opt.validationdata = [valdatain valdataout];opt.displayanfisinformation = 0;opt.displayerrorvalues = 0;opt.displaystepsize = 0;opt.displayfinalResults = 0;

培养金融中间人。

[fis3,trnErr,stepSize,fis4,valErr] = anfis([datain dataout],opt);

在这里:

  • fis3训练误差达到最小值时是FIS对象。

  • fis4当验证数据错误达到最小值时,Snapshot FIS对象是否达到。

  • 一步的大小是训练阶段尺寸的历史。

  • trnerr.为使用训练数据的RMSE。

  • valErr是使用每个培训时代的验证数据的RMSE。

训练完成后,使用培训和验证数据验证模型。

fuzout4 = evalfis (fis4 datain);trnRMSE4 =规范(fuzout4-dataout) /√长度(fuzout4))
Trnrmse4 = 0.3393
valfuzout4 = evalfis (fis4 valdatain);valRMSE4 =规范(valfuzout4-valdataout) /√长度(valfuzout4))
valRMSE4 = 0.5834

与训练数据的误差是迄今为止最低的,与验证数据的误差也略低于之前。这个结果暗示了可能的过拟合,当您将模糊系统与训练数据拟合得如此之好,以至于它不再能够很好地拟合验证数据时,就会发生过拟合。其结果是丧失了一般性。

查看改进后的模型输出。根据验证数据绘制模型输出。

图绘制(valdataout)绘图(Valfuzout2,'o')绘图(Valfuzout4,“x”) 抓住离开ylabel('产值')传说(“验证数据”..."调谐FIS: RMSE = "+ num2str (valRMSE2),...“min val。错误fis:rmse =”+ num2str (valRMSE4),...“位置”“西北”

图中包含一个轴对象。轴对象包含3个类型为line的对象。这些对象表示验证数据,调谐FIS: RMSE = 0.58941, Min val. error FIS: RMSE = 0.58337。

接下来,绘制训练误差trnerr.

图绘制(trnErr)标题('训练错误')Xlabel('纪念数量')ylabel('错误'

图中包含一个轴对象。标题为Training Error的axis对象包含一个类型为line的对象。

这张图显示训练误差大约在60年代左右。

绘制验证错误valErr

图绘制(valErr)标题('验证错误')Xlabel('纪念数量')ylabel('错误'

图中包含一个轴对象。标题Validation Error的axes对象包含一个类型为line的对象。

从图中可以看出,验证数据误差的最小值出现在纪元52。在这一点之后,它略有增加,甚至ANFIS.继续最小化对训练数据的误差。这种模式是过度拟合的标志。根据指定的容错性,绘制验证错误图还可以表明模型泛化测试数据的能力。

另请参阅

|

相关话题