如果使用 LDA 而不是线性回归,mlflow 服务 r 模型失败
mlflow serving r models failed if use LDA instead of linear regression
我有一个关于服务 R 模型的 mlflow 问题,下面是我训练和序列化 R 模型的代码。
library(mlflow)
library(caret)
library(carrier)
set.seed(101)
sample <- createDataPartition(iris$Species, p=0.80, list=FALSE)
iris_train <- iris[sample,]
iris_test <- iris[-sample,]
with(mlflow_start_run() , {
control <- trainControl(method='cv', number=10)
metric <- 'Accuracy'
# Linear Discriminant Analysis (LDA)
model <- train(Species~., data=iris_train, method='lda', trControl=control, metric=metric,
preProcess=c("center", "scale"))
fn <- crate(~ caret::predict.train(model, .x), model = model)
# fn <- crate(~ stats::predict(model, .x), model = model)
iris_prediction <- predict(model, iris_test)
mlflow_log_model(model = fn, artifact_path="model")
})
但是,当我用 API 请求提供服务时,
curl --location --request POST 'localhost:5000/invocations' \
--header 'Content-Type: application/json' \
--data-raw '{"columns": ["Sepal.Length", "Sepal.With", "Petal.Length", "Petal.Width"], "data": [[5.2, 4.1, 1.5, 0.1], [6.4, 2.8, 5.6, 2.1], [7.9, 3.8, 6.4, 2.0], [6.7, 3.1, 5.6, 2.4], [6.3, 3.4, 5.6, 2.4]]}'
我有以下错误:
Invalid Request. object 'Sepal.Width' not found
注意,如果我将训练更改为使用线性回归模型,
with(mlflow_start_run(), {
model <- lm(Sepal.Width ~ Sepal.Length, iris)
mlflow_log_model(
crate(~ stats::predict(model, .x), model=model), "model")
})
同样的API请求,一切正常。
谁能帮我找到线索?我对R不是很熟悉
非常感谢!
事实证明问题是 curl 脚本中的拼写错误。是 Sepal.Width 而不是 Sepal.With。
curl --location --request POST 'localhost:5000/invocations' \
--header 'Content-Type: application/json' \
--data-raw '{"columns": ["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"], "data": [[5.2, 4.1, 1.5, 0.1], [6.4, 2.8, 5.6, 2.1], [7.9, 3.8, 6.4, 2.0], [6.7, 3.1, 5.6, 2.4], [6.3, 3.4, 5.6, 2.4]]}'
我有一个关于服务 R 模型的 mlflow 问题,下面是我训练和序列化 R 模型的代码。
library(mlflow)
library(caret)
library(carrier)
set.seed(101)
sample <- createDataPartition(iris$Species, p=0.80, list=FALSE)
iris_train <- iris[sample,]
iris_test <- iris[-sample,]
with(mlflow_start_run() , {
control <- trainControl(method='cv', number=10)
metric <- 'Accuracy'
# Linear Discriminant Analysis (LDA)
model <- train(Species~., data=iris_train, method='lda', trControl=control, metric=metric,
preProcess=c("center", "scale"))
fn <- crate(~ caret::predict.train(model, .x), model = model)
# fn <- crate(~ stats::predict(model, .x), model = model)
iris_prediction <- predict(model, iris_test)
mlflow_log_model(model = fn, artifact_path="model")
})
但是,当我用 API 请求提供服务时,
curl --location --request POST 'localhost:5000/invocations' \
--header 'Content-Type: application/json' \
--data-raw '{"columns": ["Sepal.Length", "Sepal.With", "Petal.Length", "Petal.Width"], "data": [[5.2, 4.1, 1.5, 0.1], [6.4, 2.8, 5.6, 2.1], [7.9, 3.8, 6.4, 2.0], [6.7, 3.1, 5.6, 2.4], [6.3, 3.4, 5.6, 2.4]]}'
我有以下错误:
Invalid Request. object 'Sepal.Width' not found
注意,如果我将训练更改为使用线性回归模型,
with(mlflow_start_run(), {
model <- lm(Sepal.Width ~ Sepal.Length, iris)
mlflow_log_model(
crate(~ stats::predict(model, .x), model=model), "model")
})
同样的API请求,一切正常。
谁能帮我找到线索?我对R不是很熟悉
非常感谢!
事实证明问题是 curl 脚本中的拼写错误。是 Sepal.Width 而不是 Sepal.With。
curl --location --request POST 'localhost:5000/invocations' \
--header 'Content-Type: application/json' \
--data-raw '{"columns": ["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"], "data": [[5.2, 4.1, 1.5, 0.1], [6.4, 2.8, 5.6, 2.1], [7.9, 3.8, 6.4, 2.0], [6.7, 3.1, 5.6, 2.4], [6.3, 3.4, 5.6, 2.4]]}'