前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言实现模糊逻辑推理模型

R语言实现模糊逻辑推理模型

作者头像
一粒沙
发布2020-03-19 15:35:28
1.3K0
发布2020-03-19 15:35:28
举报
文章被收录于专栏:R语言交流中心R语言交流中心

模糊逻辑推理是以模糊集合论为基础描述工具,对以一般集合论为基础描述工具的数理逻辑进行扩展,从而建立了模糊推理理论。是不确定推理的一种。在人工智能技术开发中有重大意义。今天我们就给大家介绍下在R语言中如何实现模糊推理理论模型。首先我们需要安装R包FuzzyR。

代码语言:javascript
复制
install.packages("FuzzyR")
install.packages("shiny")

然后我们看下此包中推理模型所提供的隶属函数:

对于这些隶属函数的调用,我们需要用到函数genmf(mf.type,mf.params)生成模型,然后通过evalmf对输入的数据进行转化。我们直接看一个示例:

代码语言:javascript
复制
my<- genmf('gaussmf', c(1, 3))
x <- seq(1, 10, by = 0.1)
y <- evalmf(x, my)
plot(x, y, type = 'l')
title("An example gaussian membershipfunction")

上面就是基础的隶属函数以及规则,那么我们自己在R中构建一个由规则、隶属函数等组成的模糊系统时,就开发了一个模糊推理系统,这在R中称为fis。为了能够恰当地考虑隶属函数,我们把所有东西都放在fis中。在这里需要用到函数newfis:

我们直接看下实例:

代码语言:javascript
复制
fis <- newfis("fisName")

在建完fis后,我们需要对这个系统添加变量和对应的隶属函数。需要用到函数addmf(fis, varType, varIndex, mfName, mfType, mfParams)或者addvar(fis, varType, varName, varBounds, method = NULL, params =NULL)。我们直接看下实例:

代码语言:javascript
复制
fis <- addvar(fis, 'input', 'service',c(0, 10))
fis <- addmf(fis, 'input', 1, 'poor','gaussmf', c(3, 0))
fis <- addmf(fis, 'input', 1, 'median','gaussmf', c(3, 6))
fis <- addmf(fis, 'input', 1, 'power','gaussmf', c(6, 10))
plotmf(fis, 'input', 1, main = 'Membershipfunction plots')

当然,此包也可以进行多变量的fis构建,我们直接看下实例:

代码语言:javascript
复制
fis <- addvar(fis, 'input', 'age', c(0, 70))
fis <- addmf(fis, 'input', 2, 'young','gaussmf', c(30, 0))
fis <- addmf(fis, 'input', 2, 'medianage', 'gaussmf', c(30, 60))
fis <- addmf(fis, 'input', 2, 'old','gaussmf', c(60, 70))
plotmf(fis, 'input', 2, main = 'Membershipfunction plots')

另外此包为了更方便fis的构建提供了隶属函数的批量导入那就需要用到另一个函数addrule,它可以直接为fis添加隶属函数的参数。我们直接看下包自带的实例:tripper一个主要用于举例目的的函数,它创建一个具有两个输入(服务和食品)、输出变量(tip)及其成员函数的fis。

代码语言:javascript
复制
fis <- tipper()
ruleList <- rbind(c(1,1,1,1,2),c(2,0,2,1,1), c(3,2,3,1,2))
fis <- addrule(fis, ruleList)
plotmf(fis, "input", 1)

此处ruleList的描述:第一列是指第一个输入变量在索引1处的隶属函数。第二列是指第二个输入变量在索引2处的隶属度函数。第三列是第一个输出变量在索引3处的隶属函数。第四列是要应用于规则的权重。第五列指的是规则的先行词的模糊运算符(在本例中,它表示“OR”)。

接下来我们看下此包在输出中的相关功能,首先是一个fis详细信息的输出showfis(fis)。此函数可以将fis的所有参数列出并打印在屏幕上。此外还可以对输入输出变量进行三维可视化展示:

代码语言:javascript
复制
gensurf(fis)

此包并没有设置mf的修改或者删除函数,那么如果要对已经构建的fis进行修改时,那么就涉及到对fis中各变量的调用。我们直接看下实例:

代码语言:javascript
复制
fis$input[[1]]$mf[[1]]$type <-"trimf"
plotmf(fis, "input", 1)

最后我们看下,如何进行可视化的交互式操作,那么就需要用到shiny这个包。我们直接看下实例:

代码语言:javascript
复制
 library(shiny)
showGUI(fis)

欢迎学习交流!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档