一个比较完整的数据挖掘过程包括
- 业务理解
- 数据理解
- 数据处理
- 构建模型
- 模型评价
- 模型部署
本文讲最后一个步骤,模型部署。
好的数据科学家和好的写作适用于同样的规则:展现出来。一个成功的数据科学项目应该包含一个演示部署,该演示部署包括所有已经研发好的技术和模型。好的文档编制和展现是至关重要的,但在某个时候,人们必须看到效果并且能够亲自测试。所以我鼓励你与一个开发小组进行合作,创建一个模型的产品,而一个好的演示可以帮助你招募这些合作者。
部署方法
- 批处理,在R中引入数据,对数据进行打分,然后把它写出来。
- 跨语言链接,R向另外一个语言的查询提供答案,R是有效的跨语言调用方式进行涉及的(Pccp)
- 服务,为了把新数据看作成为一个HTTP查询并返回结果,可以把R设置成为一个HTTP服务
- 输出,数据科学家可以通过输出模型和代码说明书来评价模型
- PMML(预测模型标记语言),许多建模工具包可以对其导入和导出的一个可共享的XML格式。如果生成的模型被涵盖在R的工具包pmml中,那么你不需要在编写额外的代码就可以导出他。任何软件栈有了该模型的导入期都可以使用你的模型。
这里介绍将一个模型部署成为一个http服务:
library(Rook) # Note: 1
# load('thRS500.Rdata') # Note: 2
library(randomForest) # Note: 3
numericPositions <- sapply(buzztrain[,varslist],is.numeric) # Note: 4
modelFn <- function(env) { # Note: 5
errors <- c()
warnings <- c()
val <- c()
row <- c()
tryCatch(
{
arg <- Multipart$parse(env) # Note: 6
row <- as.list(arg[varslist])
names(row) <- varslist
row[numericPositions] <- as.numeric(row[numericPositions])
frame <- data.frame(row)
val <- predict(fmodel,newdata=frame)
},
warning = function(w) { message(w)
warnings <<- c(warnings,as.character(w)) },
error = function(e) { message(e)
errors <<- c(errors,as.character(e)) }
)
body <- paste( # Note: 7
'val=',val,'\n',
'nerrors=',length(errors),'\n',
'nwarnings=',length(warnings),'\n',
'query=',env$QUERY_STRING,'\n',
'errors=',paste(errors,collapse=' '),'\n',
'warnings=',paste(warnings,collapse=' '),'\n',
'data row','\n',
paste(capture.output(print(row)),collapse='\n'),'\n',
sep='')
list(
status=ifelse(length(errors)<=0,200L,400L),
headers=list('Content-Type' = 'text/text'),
body=body )
}
s <- Rhttpd$new() # Note: 8
s$add(name="modelFn",app=modelFn) # Note: 9
s$start() # Note: 10
print(s)
## Server started on 127.0.0.1:20714
## [1] modelFn http://127.0.0.1:20714/custom/modelFn # Note: 11
##
## Call browse() with an index number or name to run an application.
# Note 1:
# Load the rook HTTP server library.
# Note 2:
# Load the saved buzz workspace (includes the
# random forest model).
# Note 3:
# Load the random forest library (loading the
# workspace doesn’t load the library).
# Note 4:
# Determine which variables are numeric (in the
# rook server, everything defaults to
# character).
# Note 5:
# Declare the modeling service.
# Note 6:
# This block does the actual work: parse data
# and apply the model.
# Note 7:
# Format results, place in a list, and
# return.
# Note 8:
# Start a new rook HTTP service.
# Note 9:
# Register our model function as an HTTP
# service.
# Note 10:
# Start the HTTP server.
# Note 11:
# This is the URL where the service is
# running.
rowAsForm <- function(url,row) { # Note: 1
s <- paste('<HTML><HEAD></HEAD><BODY><FORM action="',url,
'" enctype="multipart/form-data" method="POST">\n',sep='')
s <- paste(s,'<input type="submit" value="Send"/>',sep='\n')
qpaste <- function(a,b) {
paste('<p> ',a,' <input type="text" name="',a,
'" value="',b,'"/> </p>',sep='') }
assignments <- mapply('qpaste',varslist,as.list(row)[varslist])
s <- paste(s,paste(assignments,collapse='\n'),sep='\n')
s <- paste(s,'</FORM></BODY></HTML>',sep='\n')
s
}
url <- 'http://127.0.0.1:20714/custom/modelFn' # Note: 2
cat(rowAsForm(url,buzztest[7,]),file='buzztest7.html') # Note: 3
然后你的文件文件里面就会出现:
image.png
用浏览器打开:
image.png
学会了这些,你就是一个完成end to end 的数据科学家,从业务的理解,建模,到模型的部署展示。你知道了数据科学项目的完整流程,你可以开始组建你自己的团队,当然我的建议是,继续充实你自己的知识,还有很多部署模型的方式,学习他们,然后去驾驭他们。
这还是很令人激动的
网友评论