【发布时间】:2020-01-04 02:37:21
【问题描述】:
我想以 pmml 格式导出 R 模型并在其他地方使用它。其他软件需要一些变量作为整数,但所有数字变量都导出为双精度变量,即使它们在我的数据集中显式为整数。
我试图通过手动(或使用正则表达式)更改它们来绕过这个问题,并且我删除了每个小数,但是当软件接受新格式时,预测不是我所期望的(因为我只是删除了小数),所以我想要直接在 R 中解决这个问题。
如何强制我的变量为特定数据类型(尤其是“整数”)?
这是一个导出 .pmml 的代码示例:
# Required packages -------------------------------------------------------
library(tidyverse)
library(r2pmml)
library(randomForest)
library(nnet)
# Dataset creation --------------------------------------------------------
seed = 1
data = data.frame(
var1 = round(runif(10) * 100),
var2 = round(runif(10) * 100),
y = round(runif(10) * 100)
)
data =
data %>%
mutate(var1 = as.integer(var1),
var2 = as.integer(var2))
# Structure check ---------------------------------------------------------
str(data)
# Neural Network and Random Forest models ---------------------------------
nn =
nnet(
y ~ .,
data = data,
method = "nnet",
size = c(2),
linout = 1
)
rf =
randomForest(y ~ .,
data = data)
# pmml export -------------------------------------------------------------
r2pmml(rf,
file = "rf.pmml",
dataset = data,
verbose = TRUE)
r2pmml(nn,
file = "nn.pmml",
dataset = data,
verbose = TRUE)
我希望我的 pmml 将变量 var1 和 var2 作为整数,但在输出的这一部分中它们最终是双倍的
<DataDictionary>
<DataField name="y" optype="continuous" dataType="double"/>
<DataField name="var1" optype="continuous" dataType="double"/>
<DataField name="var2" optype="continuous" dataType="double"/>
我在
中得到十进制数 <NeuralLayer activationFunction="logistic">
<Neuron id="hidden/1" bias="-0.4112317232771385">
<Con from="input/1" weight="-6.591508925328581"/>
<Con from="input/2" weight="-31.805468580606753"/>
</Neuron>
但我不确定它应该是整数还是双精度。
【问题讨论】: