R中的pmml生成不正确的变量名
pmml in R generating improper variable names
我正在使用 R 中的 pmml 包为使用 glm 函数获得的逻辑回归模型生成 PMML,如下所示:
library(pmml)
var <- sample(c(1,2,3),100,replace = TRUE)
var_cat <- sample(c(1,2,3,4),100,replace = TRUE)
y <- sample(c(0,1),100,replace = TRUE)
df <- data.frame(y = as.factor(y),var = as.factor(var), var_cat = as.factor(var_cat))
model <- glm(y ~ ., data = df, family = binomial)
pmmlOutput <- pmml(model)
此 PMML 的 PPMatrix 部分如下所示:
<PPMatrix>
<PPCell value="2" predictorName="var" parameterName="p1"/>
<PPCell value="3" predictorName="var" parameterName="p2"/>
<PPCell value="_cat2" predictorName="var" parameterName="p3"/>
<PPCell value="2" predictorName="var_cat" parameterName="p3"/>
<PPCell value="_cat3" predictorName="var" parameterName="p4"/>
<PPCell value="3" predictorName="var_cat" parameterName="p4"/>
<PPCell value="_cat4" predictorName="var" parameterName="p5"/>
<PPCell value="4" predictorName="var_cat" parameterName="p5"/>
</PPMatrix>
第一个变量及其级别显示为 (var,2) 和 (var,3)。但是,第二个变量有两行,变量名称和级别在错误的位置分割。
不是得到 (var_cat,2),而是拆分成 (var,_cat2),如下突出显示:
<PPCell value="_cat2" predictorName="var" parameterName="p3"/>
这似乎只有在变量名重叠时才会发生(在本例中为 var 和 var_cat)。但是,如果只有 var_cat 变量存在,这就可以正常工作。
有人可以提出解决此问题的方法吗?
不幸的是,你是对的;你在 R 代码中发现了一个错误。
它有效地找到值的方式假定不同的变量
名字不是另一个的子串。
因为 var
是 var_cat
的 substring
,你会得到这个错误。请注意 var_cat
和 cat
也可能会给您带来同样的问题。另一方面,var_cat1
是 而不是 var_cat2
的 substring
,所以应该可以。
目前,最简单的方法是只命名变量,以便
变量名不是另一个的子串。幸运的是我们正在计划
在接下来的几周内发布一个新版本,我将尝试包含一个修复程序
为此在该版本中。
我正在使用 R 中的 pmml 包为使用 glm 函数获得的逻辑回归模型生成 PMML,如下所示:
library(pmml)
var <- sample(c(1,2,3),100,replace = TRUE)
var_cat <- sample(c(1,2,3,4),100,replace = TRUE)
y <- sample(c(0,1),100,replace = TRUE)
df <- data.frame(y = as.factor(y),var = as.factor(var), var_cat = as.factor(var_cat))
model <- glm(y ~ ., data = df, family = binomial)
pmmlOutput <- pmml(model)
此 PMML 的 PPMatrix 部分如下所示:
<PPMatrix>
<PPCell value="2" predictorName="var" parameterName="p1"/>
<PPCell value="3" predictorName="var" parameterName="p2"/>
<PPCell value="_cat2" predictorName="var" parameterName="p3"/>
<PPCell value="2" predictorName="var_cat" parameterName="p3"/>
<PPCell value="_cat3" predictorName="var" parameterName="p4"/>
<PPCell value="3" predictorName="var_cat" parameterName="p4"/>
<PPCell value="_cat4" predictorName="var" parameterName="p5"/>
<PPCell value="4" predictorName="var_cat" parameterName="p5"/>
</PPMatrix>
第一个变量及其级别显示为 (var,2) 和 (var,3)。但是,第二个变量有两行,变量名称和级别在错误的位置分割。
不是得到 (var_cat,2),而是拆分成 (var,_cat2),如下突出显示:
<PPCell value="_cat2" predictorName="var" parameterName="p3"/>
这似乎只有在变量名重叠时才会发生(在本例中为 var 和 var_cat)。但是,如果只有 var_cat 变量存在,这就可以正常工作。
有人可以提出解决此问题的方法吗?
不幸的是,你是对的;你在 R 代码中发现了一个错误。
它有效地找到值的方式假定不同的变量 名字不是另一个的子串。
因为 var
是 var_cat
的 substring
,你会得到这个错误。请注意 var_cat
和 cat
也可能会给您带来同样的问题。另一方面,var_cat1
是 而不是 var_cat2
的 substring
,所以应该可以。
目前,最简单的方法是只命名变量,以便 变量名不是另一个的子串。幸运的是我们正在计划 在接下来的几周内发布一个新版本,我将尝试包含一个修复程序 为此在该版本中。