Cook R数据科学与R语言R语言:TCGA数据分析

模型部署

2018-09-17  本文已影响111人  Liam_ml

一个比较完整的数据挖掘过程包括

  1. 业务理解
  2. 数据理解
  3. 数据处理
  4. 构建模型
  5. 模型评价
  6. 模型部署

本文讲最后一个步骤,模型部署。
好的数据科学家和好的写作适用于同样的规则:展现出来。一个成功的数据科学项目应该包含一个演示部署,该演示部署包括所有已经研发好的技术和模型。好的文档编制和展现是至关重要的,但在某个时候,人们必须看到效果并且能够亲自测试。所以我鼓励你与一个开发小组进行合作,创建一个模型的产品,而一个好的演示可以帮助你招募这些合作者。

部署方法

  1. 批处理,在R中引入数据,对数据进行打分,然后把它写出来。
  2. 跨语言链接,R向另外一个语言的查询提供答案,R是有效的跨语言调用方式进行涉及的(Pccp)
  3. 服务,为了把新数据看作成为一个HTTP查询并返回结果,可以把R设置成为一个HTTP服务
  4. 输出,数据科学家可以通过输出模型和代码说明书来评价模型
  5. 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 的数据科学家,从业务的理解,建模,到模型的部署展示。你知道了数据科学项目的完整流程,你可以开始组建你自己的团队,当然我的建议是,继续充实你自己的知识,还有很多部署模型的方式,学习他们,然后去驾驭他们。

这还是很令人激动的

上一篇下一篇

猜你喜欢

热点阅读