R语言实现模糊逻辑推理模型
模糊逻辑推理是以模糊集合论为基础描述工具,对以一般集合论为基础描述工具的数理逻辑进行扩展,从而建立了模糊推理理论。是不确定推理的一种。在人工智能技术开发中有重大意义。今天我们就给大家介绍下在R语言中如何实现模糊推理理论模型。首先我们需要安装R包FuzzyR。
install.packages("FuzzyR")
install.packages("shiny")
然后我们看下此包中推理模型所提供的隶属函数:
对于这些隶属函数的调用,我们需要用到函数genmf(mf.type,mf.params)生成模型,然后通过evalmf对输入的数据进行转化。我们直接看一个示例:
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:
我们直接看下实例:
fis <- newfis("fisName")
在建完fis后,我们需要对这个系统添加变量和对应的隶属函数。需要用到函数addmf(fis, varType, varIndex, mfName, mfType, mfParams)或者addvar(fis, varType, varName, varBounds, method = NULL, params =NULL)。我们直接看下实例:
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构建,我们直接看下实例:
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。
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的所有参数列出并打印在屏幕上。此外还可以对输入输出变量进行三维可视化展示:
gensurf(fis)
此包并没有设置mf的修改或者删除函数,那么如果要对已经构建的fis进行修改时,那么就涉及到对fis中各变量的调用。我们直接看下实例:
fis$input[[1]]$mf[[1]]$type <-"trimf"
plotmf(fis, "input", 1)
最后我们看下,如何进行可视化的交互式操作,那么就需要用到shiny这个包。我们直接看下实例:
library(shiny)
showGUI(fis)
欢迎学习交流!