【问题标题】:Takagi-Sugeno system using frbs R使用 frbs R 的 Takagi-Sugeno 系统
【发布时间】:2016-01-05 17:40:41
【问题描述】:

我一直在尝试使用 R Statistical 软件来构建 Takagi Sugeno 模糊系统。使用 R 包“frbs”,我已经按照演示文件中的示例成功设置了 FIS 的大部分组件。不幸的是,我遇到了一个问题: validate.params(object, newdata) 中的错误: 请检查您的 num.labels 参数 我一直在尝试预测一些价值,但我不知道这个脚本有什么问题。当我评论最后一行时,一切似乎都很好,但只有一个情节正在绘制。

#  rm(list=ls())  # not generally appreciated
library(frbs)
varinp.mf <- matrix(c( 5, -1, 0.8493, NA, NA, 5, 1, 0.8493, NA, NA,
                       5, -1, 0.8493, NA, NA, 5, 1, 0.8493, NA, NA),
                    nrow = 5, byrow = FALSE)
num.fvalinput <- matrix(c(2,2), nrow=1)
x1 <- c("a1","a2")
x2 <- c("b1","b2")
names.varinput <- c(x1, x2)
range.data <- matrix(c(-1.5,1.5, -1.5, 1.5), nrow=2)
type.defuz <- "5"
type.tnorm <- "MIN"
type.snorm <- "MAX"
type.implication.func <- "MIN"
name <- "Przykład"
newdata <- matrix(c(-0.6, 0.3), ncol = 2, byrow = TRUE)
colnames.var <- c("x1", "x2")
type.model <- "TSK"
func.tsk <- matrix(c(1,   1,  1,
                     2,   1,  0,
                     1,  -2, -1,
                    -1, 0.5, -2),
                   nrow = 4, byrow = TRUE)

rule <- matrix(c("A1","and","B1","->",  
                 "A1","and","B2","->", 
                 "A2","and","B1","->",  
                 "A2","and","B2","->"),
                 nrow = 4, byrow = TRUE)
object <- frbs.gen( range.data, num.fvalinput, names.varinput,
                  num.fvaloutput, varout.mf=NULL, names.varoutput, rule,
                 varinp.mf, type.model, type.defuz, type.tnorm, type.snorm,
                  func.tsk, colnames.var, type.implication.func)



plotMF(object)
res <- predict(object, newdata)$predicted.val

【问题讨论】:

  • 为什么标记为 MATLAB?
  • 希望 MATLAB 标记中的人知道问题所在
  • 因为它不是用 MATLAB 编写的,所以这行不通。我已经删除了标签。
  • @Garbaczyk 你不能假设 MATLAB 标签中的任何人也是R 程序员。这就像用 Python 和 Microsoft VBA 标记例如一个问题......是的,将两者配对有点荒谬,对吧?这里也一样。除非您的问题专门针对这两种语言,否则您不能用相互冲突的语言标记问题。您的问题仅涉及R
  • 在使用带有命名参数的配对列表向函数提供参数时,通常有助于使用 R 函数进行调试。因此,您可能首先不使用object &lt;- frbs.gen( range.data, num.fvalinput, names.varinput, ... 调用的位置匹配。您还应该发布整个错误消息并指出哪个函数引发了错误。我编辑了您的问题以评论顶部的破坏性代码。留在里面时,这往往会惹恼人们。

标签: r rstudio fuzzy-logic


【解决方案1】:

validate.params 代码中可以看到失败的测试:

frbs:::validate.params
....
else if (object$type.model == c("TSK")) {
    if (ncol(object$num.labels) != (ncol(object$range.data.ori) - 
        1)) {
        stop("Please check your num.labels parameters")

当我在 frbs.gen 帮助页面上运行示例中的代码时,我会看到:

> res <- predict(object, newdata)$predicted.val
> object$range.data.ori
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]  100  100  100  100  100
> object$num.labels
     [,1] [,2] [,3] [,4]
[1,]    3    2    3    3

而我看到你的例子:

> object$num.labels
     [,1] [,2]
[1,]    2    2
> object$range.data.ori
     [,1] [,2]
[1,] -1.5 -1.5
[2,]  1.5  1.5

因此,您的“对象”对象不是按照包作者的期望创建的。似乎该错误应该在该过程的早期被捕获,而不是让它通过predict.frbs 发出信号。

【讨论】:

  • 好的,我将范围数据添加到输出,现在似乎没问题。但现在我在预测方面遇到了另一个问题。规则错误 [, (4 * i), drop = FALSE] 中的规则错误:下标超出范围
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多