主要内容

使用减数集群和ANFI模型郊区通勤

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

加载流量数据

此示例使用特拉华州新城堡县的100个交通分析区的人口统计和旅行数据。数据集包含五个人口因子作为输入变量:人口,住宅单位,车辆所有权,中位数,家庭收入和总就业。数据包含一个输出变量,汽车旅行数量。

加载培训和验证数据。

加载trafficdata.

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

绘制培训数据。

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

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

集群的数据

减法聚类是一种快速单通算法,用于估计数据集中的簇数和群集中心。要使用减法聚类培养培训数据,请使用亚壳功能。

[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.11980 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.显示每个数据维度的集群中心的影响范围。所有群集中心都有相同的一套S.价值观。

S.
S =1×6.1.1621 0.4117 0.6555 7.6139 2.8931 1.4395

使用数据群集生成模糊推理系统

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

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

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

选择= genfisOptions (“次抗动率”“clusterinfluencerange”,0.5);

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

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

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

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

Showrule(FIS)
ans =.3x158 char array.“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,TRINTRR,STAPEIZE,FIS4,VALERR] = ANFIS([数据库数据排序],ANFISOPT);

这里:

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

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

  • stepSize是训练步长的历史。

  • trnErr是使用培训数据的RMSE。

  • 瓦尔为使用每个训练时期的验证数据的RMSE。

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

fuzout4 = evalfis(FIS4,Datain);trnrmse4 = norm(fuzout4-dataout)/ sqrt(长度(fuzout4))
Trnrmse4 = 0.3393
valfuzout4 = evalfis(FIS4,valdatain);Valrmse4 =常规(Valfuzout4-ValdataOut)/ SQRT(长度(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)标题(验证错误的)包含(“数字时代”) ylabel ('错误'

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

该图表明,验证数据错误的最小值发生在epoch 52。在此之后,它甚至略有增加ANFIS.继续最小化训练数据的错误。这种模式是过度装备的标志。根据指定的错误容错,绘制验证错误还可以指示模型概括测试数据的能力。

也可以看看

|

相关的话题