Как написать функцию прогнозирования для MLR Forecast для загрузки в AzureML в качестве веб-сервиса? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь загрузить модель R в AzureML как веб-сервис, модель использует пакет mlr в R и его функцию предикта, вывод mlr предиката - это таблица "PredictionClassif" "Прогноз" для линейной модели, такой как Регрессия I используйте

PredictAction <- function(inputdata){
  predict(RegModel, inputdata, type="response")
}

Это прекрасно работает в Azure.

Когда я использую пакет mlr для классификации с вероятностью типа предсказания, функцию предсказания я должен записать как

PredictAction <- function(inputdata){
  require(mlr)
  predict(randomForest,newdata=inputdata)
}

При вызове функции

publishWebService(ws, fun, name, inputSchema)

выдает ошибку как

converting `inputSchema` to data frame
Error in convertArgsToAMLschema(lapply(x, class)) : 
  Error: data type "table" not supported

поскольку функция предсказания создает таблицу, которую я не знаю, как преобразовать или изменить, поэтому я даю выходную схему

publishWebService(ws, fun, name, inputSchema,outputschema)

Я не уверен, как указать выходную схему https://cran.r -project.org / web / packages / AzureML / AzureML.pdf

outputchema - список, функция предсказания от mlr производит вывод класса

class(pred_randomForest)
"PredictionClassif" "Prediction"

и вывод данных - это фрейм данных

class(pred_randomForest$data)
"data.frame"

Мне нужна помощь по синтаксису outputchema в функции publishWebService или по поводу необходимости добавления каких-либо других аргументов функции. Не уверен, в чем проблема, не может ли AzureML прочитать прочитанную модель или же в AzureML правильно работает функция прогнозирования mlr.

Ошибка при получении в AzureML

Execute R Script Piped (RPackage) : The following error occurred during evaluation of R script: R_tryEval: return error: Error in UseMethod("predict") : no applicable method for 'predict' applied to an object of class "c('FilterModel', 'BaseWrapperModel', 'WrappedModel')" 

1 Ответ

0 голосов
/ 09 мая 2019

вот пример использования библиотеки XGBoost в R:

library("xgboost") # the main algorithm
##Load the Azure workspace. You can find the ID and the pass in your workspace
ws <- workspace(
id = "Your workspace ID",
auth = "Your Auth Pass"
)
##Download the dataset
dataset <- download.datasets(ws, name = "Breast cancer data", quote="\"")
## split the dataset to get train and score data
## 75% of the sample size
smp_size <- floor(0.75 * nrow(dataset))
## set the seed to make your partition reproductible
set.seed(123)
## get index to split the dataset
train_ind <- sample(seq_len(nrow(dataset)), size = smp_size)
##Split train and test data
train_dataset <- dataset[train_ind, ]
test_dataset <- dataset[-train_ind, ]
#Get the features columns
features<-train_dataset[ , ! colnames(train_dataset) %in% c("Class") ]
#get the label column
labelCol <-train_dataset[,c("Class")]
#convert to data matrix
test_gboost<-data.matrix(test_dataset)
train_gboost<-data.matrix(train_dataset)
#train model
bst <- xgboost(data = train_gboost, label = train_dataset$Class, max.depth = 2, eta = 1,
nround = 2, objective = "binary:logistic")
#predict the model
pred <- predict(bst,test_gboost )
#Score model
test_dataset$Scorelabel<-pred
test_dataset$Scoreclasses<- as.factor(as.numeric(pred >= 0.5))
#Create
# Scoring Function
predict_xgboost <- function(new_data){
predictions <- predict(bst, data.matrix(new_data))
output <- data.frame(new_data, ScoredLabels =predictions)
output
}
#Publish the score function
api <- publishWebService(
ws,
fun = predict_xgboost,
name = "xgboost classification",
inputSchema = as.data.frame(as.table(train_gboost)),
data.frame = TRUE)
...