模糊邏輯推理是以模糊集合論為基礎描述工具,對以一般集合論為基礎描述工具的數理邏輯進行擴展,從而建立了模糊推理理論。是不確定推理的一種。在人工智慧技術開發中有重大意義。今天我們就給大家介紹下在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後,我們需要對這個系統添加變量和對應的隸屬函數。需要用到函數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的所有參數列出並列印在屏幕上。此外還可以對輸入輸出變量進行三維可視化展示:
此包並沒有設置mf的修改或者刪除函數,那麼如果要對已經構建的fis進行修改時,那麼就涉及到對fis中各變量的調用。我們直接看下實例:
fis$input[[1]]$mf[[1]]$type <-"trimf"plotmf(fis, "input", 1)最後我們看下,如何進行可視化的交互式操作,那麼就需要用到shiny這個包。我們直接看下實例:
library(shiny)showGUI(fis)
歡迎學習交流!