主要内容

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

此示例示出了如何从一个区域中产生汽车旅行的数量和面积的使用减法聚类和ANFIS调谐人口统计数据之间的关系进行建模。

卸载流量数据

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

加载培训和验证数据。

加载trafficData

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

绘制训练数据。

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

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

集群的数据

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

[C,S] = subclust([DATAIN DATAOUT],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

绘制训练数据以及两个输入变量的聚类中心。

图图(DATAIN(:,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(DATAIN,DATAOUT,优化);

根据输入和输出训练数据的维度,生成的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车辆,收入和就业)极力属于一个集群,则输出(车次NUM)他们的代表隶属函数必须属于相同的集群。也就是说,每个规则简洁地映射在输入空间到输出空间中的同一集群的集群。

每个输入和输出变量有三个成员函数,其对应于三个识别群集。的输入和输出隶属函数的参数是基于聚类中心和影响簇范围的。作为一个例子,画出隶属函数的第一输入变量。

图plotmf (fis,“输入”1)

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

评估初始FIS性能

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

fuzout = evalfis(FIS,数据输入);

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

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

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

valfuzout = evalfis(FIS,valdatain);valRMSE =范数(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岁,...'InitialStepSize', 0.1);= anfis([datain dataout],anfisOpt);
ANFIS信息:节点数量:18号的非线性参数:30的参数总数:0号的模糊规则:3开始训练ANFIS校验数据对75号:训练数据对48号44线性参数的数量。..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是当验证数据误差达到最小快照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,最小值VAL。错误FIS:RMSE = 0.58337。

接下来,绘制训练误差trnErr

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

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

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

绘制验证错误图valErr

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

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

从图中可以看出,验证数据误差的最小值出现在纪元52。在这一点之后,它略有增加,甚至ANFIS继续减少对抗训练数据的误差。这种模式是过度拟合的标志。根据规定的误差容限,绘制验证错误也可以表示该模型的概括测试数据的能力。

另请参阅

|

相关的话题