主要内容

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

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

加载流量数据

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

加载培训和验证数据。

加载trafficdata.

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

绘制训练数据。

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

图中包含2个轴。标题为Input Variables的轴1包含5个类型为line的对象。这些对象代表人口、居住单元数量、车辆拥有量、家庭收入中位数、总就业人数。标题为Output Variable的轴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 *”)传说(“数据点”“集群中心”“地点”“东南”)包含(“总就业”) ylabel (“旅行”) 标题(“数据和群集中心”

图中包含一个坐标轴。带有标题数据和群集中心的轴包含2个类型的类型。这些对象代表数据点,群集中心。

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

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

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

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

使用聚类方法查找规则的重要优点是结果规则比在输入数据中更为量身定制,而不是在没有聚类的情况下生成的FIS。当输入数据具有高维时,此剪裁会降低规则总数。

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

选择= genfisOptions (“SubtractiveClustering”“clusterinfluencerange”, 0.5);

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

FIS = Genfis(数据,数据,opt);

根据输入和输出训练数据的维度,生成的FIS有5个输入和1个输出。Genfis.为输入、输出和成员关系函数指定默认名称。

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

Showrule(FIS)
ans =.3 x158 char数组“1。If (in1是in1cluster1) and (in2是in2cluster1) and (in3是in3cluster1) and (in4是in4cluster1) and (in5是in5cluster1) then (out1是out1cluster1)(1)' '2。If (in1 is in1cluster2) and (in2 is in2cluster2) and (in3 is in3cluster2) and (in4 is in4cluster2) and (in5 is in5cluster2) then (out1 is out1cluster2)(1)' '3。If (in1 is in1cluster3) and (in2 is in2cluster3) and (in3 is in3cluster3) and (in4 is in4cluster3) and (in5 is in5cluster3) then (out1 is out1cluster3) (1)'

您可以如下概念化每个规则:如果对FIS(人口,住宅,NUM车辆,收入和就业)的输入强烈属于集群的代表成员函数,则输出(TRIPS)必须属于相同的群集。也就是说,每个规则都简洁地将输入空间中的群集映射到输出空间中的相同群集。

每个输入和输出变量具有三个隶属函数,对应于三个识别的群集。输入和输出隶属函数的参数基于集群中心和集群的影响范围导出。例如,绘制第一输入变量的隶属函数。

图plotmf (fis,“输入”1)

图中包含一个坐标轴。轴包含6个类型的类型线,文本。

评估初始FIS性能

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

fuzout = evalfis(FIS,Datain);

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

trnRMSE =规范(fuzout-dataout) /√长度(fuzout))
trnRMSE = 0.5276

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

valfuzout = evalfis(FIS,valdatain);valrmse = norm(valfuzout-valdataout)/ sqrt(长度(valfuzout))
valrmse = 0.6179

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

图绘图(valdataout)保持情节(valfuzout“o”)举行ylabel (“产值”)传说(“验证数据”“FIS输出”“地点”“西北”

图中包含一个坐标轴。轴线包含2个线型对象。这些对象表示验证数据,FIS输出。

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

使用ANFIS调整FIS

为了提高FIS性能,可以使用ANFIS.功能。首先,尝试使用相对短的训练周期(20时代)而不使用验证数据,然后针对验证数据测试结果的FIS模型。

ANFISOPT = ANFISOPTIONS(“InitialFIS”,fis,...“EpochNumber”, 20岁,...'initalstepsize', 0.1);= anfis([datain dataout],anfisOpt);
ANFIS Info:节点数量:44线性参数数:18非线性参数数:30个总数总数:48培训数据数对:75次检查数据对:0的模糊规则数:3开始培训ANFIS。..1 0.527607 2 0.513727 3 0.492996 4 0.499985 5 0.490585 6 0.492924 Step size decreases to 0.090000 after epoch 7. 7 0.48733 8 0.485036 9 0.480813 Step size increases to 0.099000 after epoch 10. 10 0.475097 11 0.469759 12 0.462516 13 0.451177 Step size increases to 0.108900 after epoch 14. 14 0.447856 15 0.444357 16 0.433904 17 0.433739 Step size increases to 0.119790 after epoch 18. 18 0.420408 19 0.420512 20 0.420275 Designated epoch number reached. ANFIS training completed at epoch 20. Minimal training RMSE = 0.420275

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

fuzout2 = evalfis (fis2, datain);trnRMSE2 =规范(fuzout2-dataout) /√长度(fuzout2))
trnRMSE2 = 0.4203
valfuzout2 = evalfis (fis2, valdatain);valRMSE2 =规范(valfuzout2-valdataout) /√长度(valfuzout2))
Valrmse2 = 0.5894.

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

图绘图(valdataout)保持情节(valfuzout“o”)情节(valfuzout2'X')举行ylabel (“产值”)传说(“验证数据”"初始FIS: RMSE = "+ num2str(valrmse),..."调谐FIS: RMSE = "+ num2str (valRMSE2),...“地点”“西北”

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

检查ANFIS结果是否过拟合

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

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

anfisOpt。EpochNumber = 200;anfisOpt。ValidationData = [valdatain valdataout];anfisOpt。DisplayANFISInformation = 0;anfisOpt。DisplayErrorValues = 0;anfisOpt。DisplayStepSize = 0; anfisOpt.DisplayFinalResults = 0;

训练FIS。

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

在这里:

  • fis3为训练误差达到最小时的FIS目标。

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

  • stepSize是训练步长的历史。

  • 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),..."最小值误差FIS: RMSE = "+ num2str (valRMSE4),...“地点”“西北”

图中包含一个坐标轴。轴线包含3个线型对象。这些对象表示验证数据,调谐到FIS:RMSE = 0.58941,MIN VAL。错误FIS:RMSE = 0.58337。

接下来,绘制训练误差trnErr

图绘制(trnErr)标题(“训练误差”)包含(“数字时代”) ylabel (“错误”

图中包含一个坐标轴。标题训练错误的轴包含类型线的对象。

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

绘制验证错误图valErr

图绘制(valErr)标题(验证错误的)包含(“数字时代”) ylabel (“错误”

图中包含一个坐标轴。标题“验证错误”的轴包含一个类型为line的对象。

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

另请参阅

|

相关的话题