十一、机器学习进阶知识:模糊神经网络(FNN)的实现(Python,附源码及数据集)

一、理论基础

模糊神经网络(Fuzzy Neural Network,简称FNN)本质上是一种将模糊理论与人工前向神经网络相结合的多层前向神经网络,在处理信息时,该网络能够具有更大的处理范围以及更快的信息处理速度,因此该网络的自学习能力与映射也相对较高。与反向传播神经网络(BPNN)相似,其训练过程主要分为前向传播与反向传播两个部分。
反向传播神经网络(BPNN)原理参考:
反向传播神经网络(BPNN)的实现(Python,附源码及数据集)

1、模糊神经网络结构

模糊神经网络的结构图如下图所示:
在这里插入图片描述

2、前向传播过程

数据输入模糊神经网络总共需要经过五层网络结构,最先是输入层,这一层的节点数量为输入数据的特征维度,即当数据的特征维度为n时,输入层的节点数为n。
然后数据从输入层传递至隶属度函数计算层,在这一层需要使用隶属度函数来计算每个节点的隶属度,每一个节点代表一个隶属度函数,这一层的节点个数为输入变量有可能构成的模糊条件的个数。隶属度函数一般选用高斯函数,公式如下:
在这里插入图片描述

其中u_ij为节点的输出,x_i为输入数据,c_ij为隶属函数的中心点,b_ij为隶属函数的宽度向量,m为对输入进行模糊分级的个数。
之后数据传递至规则生成层,这一层的节点数为模糊规则数,这一层的输出为每条规则的适用度,一般采用下列公式进行计算:
在这里插入图片描述

紧接着在归一化层对规则生成层的节点输出进行归一化处理,这一层的节点与规则生成层相同,使用如下公式进行归一化:
在这里插入图片描述

最后数据在输出层进行加权处理获得最终输出,计算的公式为:
在这里插入图片描述

其中ω_j为输出层的连接权值,上述公式是基于网络的输出变量维度为1时而设定的权值,当输出变量的维度增加时,对权值也将进行相应的调整。

3、反向传播过程

模糊神经网络同BPNN一样,一般使用反向传播算法如随机梯度下降法(SGD)对隶属函数的中心点、宽度向量以及输出层的连接权值进行优化。
以输出层的权值为例,其更新公式如下:
在这里插入图片描述其中E为误差函数,μ为学习率。
损失函数原理参考:
机器学习基础知识之损失函数
反向传播原理参考:
神经网络之反向传播算法(梯度、误差反向传播算法BP)

4、建模步骤

以使用模糊神经网络进行数据预测为例,可以将模糊神经网络预测模型的建模步骤总结如下:

  1. 根据输入数据的相关特征确定模糊神经网络输入层、隶属度函数计算层、规则生成层、归一化层以及输出层的节点数;
  2. 选择一种参数初始化方法对模糊神经网络隶属度函数计算层中隶属度函数的中心点、宽度向量以及输出层的连接权值、阈值进行随机初始化;
  3. 数据由输入层输入模糊神经网络,依次经过隶属度函数计算层以及规则生成层计算获得输出;
  4. 将规则生成层的输出在归一化层进行归一化处理之后经由输出层的加权处理获得网络的最终前向传播输出;
  5. 传递至隐含层后经径向基函数对数据进行非线性转换;
  6. 选择一种损失函数对网络的前向传播输出以及目标值进行相关计算得到损失值;
  7. 以输出层的损失值计算得到输出层连接权值的梯度,选择一种反向传播算法对它们进行调整;
  8. 损失值传递至隶属度函数计算层,同样使用相同的反向传播算法对隶属度函数的中心点以及宽度向量进行调整;
  9. 获得一个参数得到更新后的模糊神经网络;
  10. 在达到最大迭代次数之前,重复步骤3到步骤9,在达到最大迭代次数后,输出隐含层与输出层参数确定的多层前馈神经网络。

参数初始化方法参考:
神经网络基础知识之参数初始化

二、模糊神经网络的实现

以数据预测为例,下面介绍基于Python实现模糊神经网络的过程。
选用某省市的表层土壤重金属元素数据集作为实验数据,该数据集总共96组,随机选择其中的24组作为测试数据集,72组作为训练数据集。选取重金属Ti的含量作为待预测的输出特征,选取重金属Co、Cr、Mg、Pb作为模型的输入特征。

1、训练过程(FNN.py)

#库的导入
import numpy as np
import pandas as pd


#输入数据的导入
df = pd.read_csv("train.csv")
df.columns = ["Co", "Cr", "Mg", "Pb", "Ti"]
Co = df["Co"]
Co = np.array(Co)
Cr = df["Cr"]
Cr = np.array(Cr)
Mg=df["Mg"]
Mg=np.array(Mg)
Pb = df["Pb"]
Pb =np.array(Pb)
Ti = df["Ti"]
Ti = np.array(Ti)
samplein = np.mat([Co,Cr,Mg,Pb])
#数据归一化,将输入数据压缩至0到1之间,便于计算,后续通过反归一化恢复原始值
sampleinminmax = np.array([samplein.min(axis=1).T.tolist()[0],samplein.max(axis=1).T.tolist()[0]]).transpose()#对应最大值最小值
#待预测数据为Ti
sampleout = np.mat([Ti])
sampleoutminmax = np.array([sampleout.min(axis=1).T.tolist()[0],sampleout.max(axis=1).T.tolist()[0]]).transpose()
sampleinnorm = ((np.array(samplein.T)-sampleinminmax.transpose()[0])/(sampleinminmax.transpose()[1]-sampleinminmax.transpose()[0])).transpose()
sampleoutnorm = ((np.array(sampleout.T)-sampleoutminmax.transpose()[0])/(sampleoutminmax.transpose()[1]-sampleoutminmax.transpose()[0])).transpose()

sampleinnorm = sampleinnorm.transpose()
sampleoutnorm = sampleoutnorm.transpose()

S = 2  #模糊分级个数
T = 16  #规则生成层、归一化层节点数
iteration = 500  #迭代训练次数
learningrate = 0.01  #学习率

#c1、b1分别为李隶属度层的中心点与宽度向量、w1为输出层的权值,sampleinnorm.shape[1]代表输入数据的4个类别
c1 = np.random.uniform(low=-1, high=1, size=
  • 16
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
基于ts(Takagi-Sugeno)模糊的神经网络是一种结合了模糊逻辑和神经网络技术的分类模型。这种模型包含了两个主要部分:模糊逻辑推理和神经网络训练。 模糊逻辑推理使用ts模糊规则来表达输入和输出之间的关系。模糊规则是由一组模糊的条件和对应的输出构成的。通过对输入进行模糊化,将其映射到模糊集合中的一个或多个模糊集合中,然后使用模糊规则进行推理,得到对应的输出。这种方法可以处理一些不确定性或模糊性的问题,例如语言的理解和模糊控制。 神经网络训练是为了通过大量的样本数据来调整模糊规则中的权值,使模型能够更好地拟合输入和输出之间的关系。通常使用反向传播算法来更新权值,通过最小化预测输出和实际输出之间的误差来调整模型参数。这样可以提高模型的精确度和预测能力。 基于ts模糊的神经网络具有如下优点:首先,它具有模糊逻辑的能力,可以处理模糊性和不确定性的问题;其次,使用神经网络进行训练可以提高模型的拟合能力和预测准确度;最后,该模型还可以进行在线学习,即在实时数据流中不断调整模型参数,适应数据的变化。 总之,基于ts模糊的神经网络能够将模糊逻辑和神经网络的优势结合起来,使得模型在处理模糊性和不确定性问题时具有较好的表现,并且能够通过训练不断优化模型的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七层楼的疯子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值