模型部署

作者: Liam_ml | 来源:发表于2018-09-17 13:48 被阅读111次

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

    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 的数据科学家,从业务的理解,建模,到模型的部署展示。你知道了数据科学项目的完整流程,你可以开始组建你自己的团队,当然我的建议是,继续充实你自己的知识,还有很多部署模型的方式,学习他们,然后去驾驭他们。

    这还是很令人激动的

    相关文章

      网友评论

        本文标题:模型部署

        本文链接:https://www.haomeiwen.com/subject/xtrknftx.html