Я хочу экспортировать модель R в формате pmml и использовать ее в другом месте. Другое программное обеспечение требует, чтобы некоторые переменные были целыми числами, но вместо этого все числовые переменные экспортируются как двойные, даже если они явно являются целыми числами в моем наборе данных.
Я попытался обойти эту проблему, изменив их вручную (или с помощью регулярных выражений), и я удалил все десятичные знаки, но хотя программное обеспечение принимает новый формат, предсказание не то, что я ожидаю (потому что я только что удалил десятичные знаки), поэтому я хочу решить эту проблему. непосредственно внутри Р.
Как я могу заставить свои переменные быть определенным типом данных (в частности, «целым числом»)?
Это пример кода, который экспортирует .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>
но я не уверен, должно ли это быть целым числом или двойным.