机器学习|如何将机器学习模型部署到.NET环境?

Python和R是数据中心工程师最流行的编程语言之一。但是,它们并不总是构建应用程序的其余部分的语言。这就是为什么你有时需要找到一种方法来将用Python或R编写的机器学习模型部署到基于.NET等语言的环境中。

在本文中,我将展示如何使用Web API将机器学习模型集成到.NET编写的应用程序中。

开始:Flask

我们可以使用Flask作为共享和主持我们的机器学习预测的一种方式。让我们使用来自Kaggle比赛的著名的Titanic数据集。首先,创建一个新文件,并将其命名为titanic_app.py(或任何你想要的名称)。导入并初始化Flask应用程序;然后在底部启动服务器。在中间留出空间,以便稍后添加模型和路径。

import flask
app = flask.Flask(__name__)
#-------- MODEL GOES HERE -----------#
#-------- ROUTES GO HERE -----------#
if __name__ == '__main__':
'''Connects to the server'''
HOST = '127.0.0.1'
PORT = 4000      #make sure this is an integer
app.run(HOST, PORT)

请注意,我们指定了我们希望应用程序运行的主机和端口。

创建和训练模型

加载Titanic数据集并在其上创建一个模型:

#-------- MODEL GOES HERE -----------#
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv('data/titanic.csv')
include = ['Pclass', 'Sex', 'Age', 'Fare', 'SibSp', 'Survived']
# Create dummies and drop NaNs
df['Sex'] = df['Sex'].apply(lambda x: 0 if x == 'male' else 1)
df = df[include].dropna()
X = df['Pclass', 'Sex', 'Age', 'Fare', 'SibSp']
y = df['Survived']
PREDICTOR = RandomForestClassifier(n_estimators=100).fit(X, y)

制作一个简单的API

这是有趣的部分。现在我们有一个PREDICTOR,我们需要得到一些值来做出我们的预测。一种方法是从URL参数中获取信息,这些参数是出现在URL中的之后的key:value对。 例如,如果您导航到http://localhost:4000/predict?pclass=1&sex=1&age=18&fare=500&sibsp=0,则Flask可以为您检索该数据。

我们写一条路径来做到这一点:

#-------- ROUTES GO HERE -----------#
@app.route('/predict', methods=["GET"])
def predict():
pclass = flask.request.args['pclass']
sex = flask.request.args['sex']
age = flask.request.args['age']
fare = flask.request.args['fare']
sibsp = flask.request.args['sibsp']
item = [pclass, sex, age, fare, sibsp]
score = PREDICTOR.predict_proba(item)
results = {'survival chances': score[0,1], 'death chances': score[0,0]}
return flask.jsonify(results)

保存文件并启动您的应用程序。您的模型现在有一个简单的API!

部署到.NET环境

在您的.NET环境中部署Flask有很多选择——它们将大大依赖于您的基础架构选择。为了让您了解这个过程,我们来看看使用Microsoft Azure部署到IIS环境。

我会假设你:

  • 已经创建了一个Azure Cosmos数据库(这篇文章的范围之外,详情请参阅Azure文档)。
  • 已经创建了一个Flask Web应用程序(正如我们上面所经历的)。
  • 熟悉Azure和Visual Studio。

如果您已正确设置环境,则可以将您的Web应用程序部署到Azure。这可以通过创建一个web.config文件来更新Web服务器上的文件来匹配您的实例中的文件。为此,请执行以下步骤:

  • Visual Studio Solution Explorer中,右键单击该项目并选择Add > New Item。在出现的对话框中,选择Azure web.config(Fast CGI)模板,然后选择确定OK。这会在您的项目根目录下创建一个web.config文件。
  • 修改web.config,使路径与Python安装相匹配。例如,对于Python 2.7 x64,条目应该如下所示:
  • < system.webServer >
        < handlers >
            < add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\Python27\python.exe|D:\home\Python27\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/ >
        < /handlers >
    < /system.webServer >

    将web.config中的WSGI_HANDLER条目设置为tutorial.app,以匹配项目名称,如下所示:
  • < !-- Flask apps only: change the project name to match your app -- >
    < add key="WSGI_HANDLER" value="tutorial.app"/ >

    Visual Studio Solution Explorer中,展开tutorial文件夹,右键单击静态文件夹,选择Add> New Item,选择Azure静态文件web.config模板,然后选择OK。此操作将在禁用该文件夹的Python处理的静态文件夹中创建另一个web.config。该配置将静态文件的请求发送到默认Web服务器,而不是使用Python应用程序。
  • 保存文件,然后右键单击解决方案资源管理器中的项目(确保您还没有在本地运行),然后选择发布
  • 在发布“Publish”对话框中,选择“Microsoft Azure App Service”,选择新建“Create New”,然后单击发布“Publish”。
  • 在“Create App Service”对话框中,输入您的Web应用程序的名称以及订阅资源组应用程序服务计划。然后,点击创建
  • 几秒钟后,Visual Studio完成将文件复制到服务器,并在http://.azurewebsites.net/页面上显示以下错误消息:“The page cannot be displayed because an internal server error has occurred.”。
  • 在Azure门户中,打开您的新的应用程序服务帐户。在导航菜单中,向下滚动到开发工具(Development Tools)部分,选择扩展(Extensions),然后单击添加(Add)。
  • 在“Choose Extension”页面中,向下滚动到最新的Python 2.7安装并选择x86或x64位选项,然后单击“OK”接受法律条款。
  • 使用Kudu控制台,您可以通过https://.scm.azurewebsites.net/DebugConsole找到它,以安装应用程序的requirements.txt文件中列出的软件包。为此,在Kudu诊断控制台中,导航到D:\home\Python27中的Python文件夹,然后按照Kudu控制台部分中所述运行以下命令:
    D:\home\Python27>python -m pip install --upgrade -r /home/site/wwwroot/requirements.txt
  • 通过按下重新启动(Restart)按钮来安装新软件包之后,在Azure门户中重新启动App Service。 完整配置服务器环境后,刷新浏览器中的页面,即可显示Web应用程序。

更多有关信息,请查看以下链接:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值