ANFIS知识解读

ANFIS知识

1. ANFIS概述

ANFIS: Adaptive-Network-based Fuzzy Inference Systems简称自适应模糊圣经网络。
ANFIS是一种基于模糊推理的神经网络。依据对规则的判定方式不一样,常有基于网格和基于聚类的ANFIS之分。这两种模型在网络结构也略有不同。

2、ANFIS网络结构

2.1 基于网格的ANFIS

假定模糊推理系统有 x x x y y y两个输入,一个输出 z z z。对于一阶基于T-S模型的模糊神经网络模型,具有两条模糊if-then规则的普通规则如下:
规 则 1 : i f   x   i s   A 1   a n d   y   i s   B 1   t h e n   z = p 1 x + q 1 y + r 1 (4.1) 规则1: if\ x\ is\ A_1\ and\ y\ is\ B_1\ then\ z=p_1x+q_1y+r_1\tag{4.1} 1if x is A1 and y is B1 then z=p1x+q1y+r1(4.1)
规 则 2 : i f   x   i s   A 2   a n d   y   i s   B 2   t h e n   z = p 2 x + q 2 y + r 2 (4.2) 规则2: if \ x \ is \ A_2 \ and \ y \ is \ B_2 \ then \ z=p_2x+q_2y+r_2\tag{4.2} 2if x is A2 and y is B2 then z=p2x+q2y+r2(4.2)
所等价的ANFIS模型结构如图所示:
在这里插入图片描述

网络共分为5层,前3层为规则前件,后2层为规则后件。图中,方框性节点表示该节点参数是可调的,圆形节点代表该节点没有参数或参数不可以调整的。ANFIS中可调整的参数主要集中在第1层和第5层,第一层的参数为隶属函数参数,第5层为规则后件参数,即 i f − t h e n if-then ifthen规则的 t h e n then then部分的参数, 也就是上述规则中的p, q, r. 以下就是每一层的功能做详细介绍. 为了叙述方便约定 O i n ( i = 1 , 2 , 3 , 4 , 5 ) O_i^n(i=1,2,3,4,5) Oin(i=1,2,3,4,5)表示第n层的第i个节点的数据. 上标表示层, 下标表示该层的第i个节点.

第一层: 模糊化. 将输入变量转化成每一个模糊集的隶属度. 在这一层的节点i是一个由节点函数(隶属函数)组成的自适应节点. 节点函数的参数规则前件参数.
O i 1 = μ A i ( x ) ,   i = 1 , 2 (4.3) O_i^1=\mu_{A_i}(x), \ i=1,2\tag{4.3} Oi1=μAi(x), i=1,2(4.3)
O i 1 = μ B i − 2 ( y )   i = 3 , 4 (4.4) O_i^1=\mu_{B_{i-2}}(y)\ i=3,4\tag{4.4} Oi1=μBi2(y) i=3,4(4.4)
其中 O i n O_i^n Oin是模糊集 A = ( A 1 , A 2 , B 1 , B 2 ) A=(A_1,A_2,B_1,B_2) A=(A1,A2,B1,B2)的隶属度,它确定了给定输入 x ( 或 y ) x(或y) x(y)满足A的程度. 隶属函数有多种形式,常用地隶属函数有高斯函数, 三角函数, 梯形函数等.
x , y x,y x,y是节点 i i i的输入, A i A_i Ai是和节点函数相关的语言标签(大小等). O i 1 O_i^1 Oi1 A i A_i Ai的的函数,他表示x满足 A i A_i Ai的程度. 通常我们选择取值范围在0-1之间的函数,例如:
μ A i ( x ) = e − ( x − c i a i ) 2 (4.5) \mu_{A_i}(x)=e^{-(\frac{x-c_i}{a_i})^2}\tag{4.5} μAi(x)=e(aixci)2(4.5)
其中 c i c_i ci代表高斯函数的中心, a i a_i ai代表高斯函数的宽度. a i , c i a_i, c_i ai,ci是需要优化的参数.

第二层: 规则适用度, 每一个节点的输出是所输入信号的积, 结果就是这一条规则的适用度. 一般来说, 本层节点函数可以是其它执行模糊"与"的T范式算子. 这样的算子有求极小, 代数积, 有界积和强积等.
KaTeX parse error: Expected 'EOF', got '&' at position 32: …x)\mu_{B_j}(y),&̲ensp;i=1,2;j=1,…

第三层: 归一化适用度,对第i个节点计算第i条规则的适用度与所有规则实用度纸盒的比值. 本层的输出称为归一化适用度.
O i 3 = w i ˉ = w i w 1 + w 2 ,   i = 1 , 2 (4.7) O_i^3=\bar{w_i}=\frac{w_i}{w_1+w_2},\ i=1,2\tag{4.7} Oi3=wiˉ=w1+w2wi, i=1,2(4.7)

第四层: TSK输出层, 计算每条规则的输出. 其中 w i ˉ \bar{w_i} wiˉ是第三层经过标准化了的适用度.
O i 4 = w i ˉ f i = w i ˉ ( p i x + q i y + r i ) ,   i = 1 , 2 (4.8) O_i^4=\bar{w_i}f_i=\bar{w_i}(p_ix+q_iy+r_i), \ i=1,2\tag{4.8} Oi4=wiˉfi=wiˉ(pix+qiy+ri), i=1,2(4.8)
其中: w i ˉ \bar{w_i} wiˉ是第三层输出的归一化适用度. {p_i, q_i, r_i}叫模糊规则后件的参数集合,称为规则后件参数. 其中 x , y x,y x,y是给定输入.

第五层: 求和, 对每条输出求和得到总的输出.
O 5 = ∑ w i ˉ f i = ∑ w i f i ∑ w i (4.9) O_5=\sum{\bar{w_i}f_i}=\frac{\sum{w_if_i}}{\sum{w_i}}\tag{4.9} O5=wiˉfi=wiwifi(4.9)

  • 8
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 Python 中,你可以使用一些库来实现 ANFIS 模型。其中一个常用的库是 scikit-fuzzy。下面是一个使用 scikit-fuzzy 库实现 ANFIS 模型的简单示例: 首先,确保已经安装了 scikit-fuzzy 库。你可以使用以下命令来安装它: ``` pip install scikit-fuzzy ``` 然后,你可以按照以下步骤构建 ANFIS 模型: 1. 导入所需的库: ```python import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl ``` 2. 创建输入和输出变量的模糊集合: ```python diameter = ctrl.Antecedent(np.arange(0, 11, 1), 'diameter') height = ctrl.Antecedent(np.arange(0, 11, 1), 'height') density = ctrl.Antecedent(np.arange(0, 11, 1), 'density') weight = ctrl.Consequent(np.arange(0, 101, 1), 'weight') ``` 3. 定义模糊集合的隶属函数: ```python diameter['small'] = fuzz.trimf(diameter.universe, [0, 0, 5]) diameter['medium'] = fuzz.trimf(diameter.universe, [0, 5, 10]) diameter['large'] = fuzz.trimf(diameter.universe, [5, 10, 10]) # 同样的方式定义 height、density 和 weight 的隶属函数 ``` 4. 定义 ANFIS 的规则库: ```python rule1 = ctrl.Rule(diameter['small'] & height['medium'], weight['light']) rule2 = ctrl.Rule(diameter['medium'] & height['medium'], weight['medium']) rule3 = ctrl.Rule(diameter['large'] & height['medium'], weight['heavy']) # 添加更多的规则根据需要 ``` 5. 创建 ANFIS 控制系统: ```python system = ctrl.ControlSystem([rule1, rule2, rule3]) ``` 6. 创建 ANFIS 控制系统模拟器: ```python simulator = ctrl.ControlSystemSimulation(system) ``` 7. 设置输入变量的值,并计算输出: ```python simulator.input['diameter'] = 3 simulator.input['height'] = 7 simulator.compute() ``` 8. 获取输出变量的值: ```python weight_value = simulator.output['weight'] print("预测的重量:", weight_value) ``` 这只是一个简单的示例,实际应用中可能会有更多的输入变量和更复杂的规则库。你可以根据你的需求进行调整和扩展。希望这对你有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值