iris预测
{%csrf_token%}<= =“ id_sepal_length”> sepal Length(cm) {{form.sepal_length}}
<标签for =“ id_sepal_width”> sepal width(cm) {{form.sepal_width}}}
<=“ =“ id_petal_length”>花瓣长度(cm) {{form.petal_length}}}
<标签for =“ id_petal_width”>花瓣宽度(cm) {{form.petal_width}}}
{如果结果%}预测类:{{result.class_name}}{%endif%}````````### 7。django URL - ** URL配置**:在`urls.py'中定义URL模式。``python来自django.urls导入路径从.Views导入HOME,PRODUCT_VIEW,PRODUCT_APIurlpatterns = [路径('',家,名称='home'),路径('preceptir/',preditive_view,name ='precadive'),路径('api/precadive/',prectiv_api,name ='prective_api'),这是给出的````````### 8。运行应用程序 - **迁移**:应用数据库迁移:`python manage.py migrate` - **运行服务器**:启动Django开发服务器:`python manage.py runserver`### 9。测试应用程序 - **单位测试**:在`tests.py'中写测试。``python来自django.test Import Testcase从django.urls导入反向班级预测图(testCase):def test_home_renders(self):resp = self.client.get(反向(“ home”))self.Assertequal(resp.status_code,200)self.sersertContains(resp,“虹膜预测指标”)def test_api_predict(self):url = reverse(“ prectiv_api”)有效载荷= {“ sepal_length”:5.0,“ sepal_width”:3.6,“ petal_length”:1.4,“ petal_width”:0.2,}resp = self.client.post(url,json.dumps(有效载荷),content_type ='application/json')self.Assertequal(resp.status_code,200)data = resp.json()self.assertin(“ class_name”,数据)```````` - **运行测试**:使用Django的测试命令执行测试:`python manage.py Test Iris_predictor`### 概括本指南展示了将机器学习模型集成到Django Web应用程序中。涵盖的步骤包括设置Django,培训和保存模型,创建表单和视图,处理API请求,编写模板,测试应用程序并在本地服务器上运行它。此处概述的项目结构可以用作涉及高级机器学习模型和生产级API的更复杂应用程序的模板。' />

使用Django建造机器学习应用-Kdnuggets

2025-09-26 14:00:54 英文原文
Building Machine Learning Application with Django
作者的图像|chatgpt

一个 

机器学习在各个领域都具有强大的应用程序,但是在现实世界中有效地部署机器学习模型通常需要使用网络框架。

DjangoPython的高级Web框架,在创建可扩展和安全的Web应用程序方面特别受欢迎。当与图书馆配对时Scikit-Learn,Django使开发人员能够通过API提供机器学习模型推断,还可以构建直观的Web接口,以与这些模型进行交互。

在本教程中,您将学习如何构建一个简单的Django应用程序,该应用程序可从机器学习模型中提供预测。该分步指南将使您完成整个过程,从初始模型培训到推理和测试API。

#一个 1。项目设置

一个 
我们将首先创建基本项目结构并安装所需的依赖关系。

创建一个新的项目目录并进入其中:

mkdir django-ml-app && cd django-ml-app

安装所需的Python软件包:

PIP安装Django Scikit-Learn Joblib

初始化一个新的Django项目称为Mlapp并创建一个名为的新应用预测指标

django-admin startproject mlapp。python manage.py startApp预测器

为我们的应用HTML文件设置模板目录:

MKDIR -P模板/预测变量

运行上述命令后,您的项目文件夹应该看起来像这样:

django-ml-app/.venv/mlapp/____init__.pyAsgi.py设置URLS.PYwsgi.py预测/迁移/____init__.pyApps.py<形式。py< - 我们稍后再添加•services.py < - 我们稍后再添加(模型负载/预测)–py.py < - 我们将更新ours.py < - 我们稍后再添加tests.py < - 我们稍后再添加模板/预测/预测_form.html管理要求Train.py < - 机器学习培训脚本

#一个 2。训练机器学习模型

一个 
接下来,我们将创建一个模型,我们的Django应用程序将用于预测。对于本教程,我们将使用经典的Iris数据集,该数据集包含在Scikit-Learn中。

在项目的根目录中,创建一个名称的脚本train.py。该脚本将虹膜数据集加载并将其分为训练和测试集。接下来,它在培训数据上训练一个随机的森林分类器。训练完成后,它可以保存训练有素的模型及其元数据,其中包括特征名称和目标标签。预测器/模型/目录使用约翰利

从pathlib导入路径导入约伯利布来自sklearn.datasets import load_iris从sklearn.semblection incort intim来自sklearn.model_selection导入train_test_splitmodel_dir =路径(“预测器”) /“模型”model_dir.mkdir(父母= true,stef_ok = true)model_path = model_dir /“ iris_rf.joblib”def main():data = load_iris()x,y = data.data,data.targetx_train,x_test,y_train,y_test = train_test_split(X,Y,test_size = 0.2,Random_State = 42,strate = y)clf = RandomForestClassifier(N_Estimators = 200,Random_State = 42)clf.fit(x_train,y_train)joblib.dump({“估算器”:CLF,“ target_names”:data.target_names,“ feature_names”:data.feature_names,},,model_path,)打印(f“保存模型到{model_path.resolve()}”)如果__name__ ==“ __ -main __”:主要的()

运行训练脚本:

如果一切成功运行,您应该看到一条消息,确认该模型已保存。
一个 

#一个 3。配置Django设置

一个 
现在,我们已经准备好了应用程序和培训脚本,我们需要配置Django,以便知道我们的新应用程序以及在哪里找到模板。

打开mlapp/settings.py并进行以下更新:

  • 注册 预测指标应用程序installed_apps。这告诉Django将我们的自定义应用程序包括在项目生命周期(模型,视图,表单等)中。
  • 添加 模板/目录中的目录模板配置。这样可以确保Django可以加载直接绑定到特定应用的HTML模板,例如我们以后将构建的表单。
  • 允许的host在开发过程中接受所有宿主。这使得无需主机相关的错误就可以更轻松地在本地运行该项目。
从pathlib导入路径base_dir =路径(__文件__)。resolve()。父母intasted_apps = [“ django.contrib.admin”,“ django.contrib.auth”,“ django.contrib.contenttypes”,“ django.contrib.sessions”,“ django.contrib.messages”,“ django.contrib.staticfiles”,“预测器”,#< - 添加这是给出的模板= [{“后端”:“ django.template.backends.django.djangotemplates”,“ dirs”:[base_dir /“模板”],#< - 添加“ app_dirs”:是的,“选项”: {“ context_processors”:[“ django.template.context_processors.debug”,“ django.template.context_processors.request”,“ django.contrib.auth.context_processors.auth”,“ django.contrib.messages.context_processors.messages”,],,},,},,这是给出的#对于开发人员wasse_host = [“*”]

#一个 4。添加URL

一个 
在我们的应用程序注册后,下一步是连接URL路由因此用户可以访问我们的页面和API端点。DJANGO通过传入的HTTP请求路由urls.py文件。

我们将配置两组路线:

  1. 项目级URL(mlapp/urls.py包括管理面板等全局路线以及从预测指标应用程序。
  2. 应用程序级URL(预测器/urls.py定义我们的Web表单和API的特定路线。

打开mlapp/urls.py并如下更新:

#mlapp/urls.py来自django.contrib导入管理来自django.urls导入路径,包括urlpatterns = [路径(“ admin/”,admin.site.urls),路径(“”,include(“ preadiveor.urls”)),#web&api路由这是给出的

现在创建一个新文件预测器/urls.py并定义特定于应用程序的路线:

#预测/urls.py来自django.urls导入路径从.Views导入HOME,PRODUCT_VIEW,PRODUCT_APIurlpatterns = [路径(“”,家庭,名称=“ home”),路径(“预测/”,precade_view,name =“ predive”),路径(“ api/precadion/”,prective_api,name =“ prectiv_api”),这是给出的

#一个 5。建立形式

一个 
为了让用户通过Web界面与我们的模型进行交互,我们需要一种输入形式,他们可以在其中输入花朵测量值(萼片和花瓣尺寸)。Django通过内置表单模块使这简单简单。

我们将创建一个简单的表单类,以捕获IRIS分类器所需的四个数字输入。

在你的预测指标/应用,创建一个名为的新文件forms.py并添加以下代码:

#preadionor/forms.py从django导入表格iRisform类(forms.form):sepal_length = forms.floatfield(min_value = 0,label =“ sepal length(cm)”)sepal_width = forms.floatfield(min_value = 0,label =“ sepal width(cm)”)petal_length = forms.floatfield(min_value = 0,label =“花瓣长度(cm)”)petal_width = forms.floatfield(min_value = 0,label =“花瓣宽度(cm)”)

#一个 6。负载模型并预测

一个 
现在,我们已经训练并保存了虹膜分类器,我们需要一种Django应用程序的方法加载模型并将其用于预测。为了使事情井井有条,我们将在专用的内部放置所有与预测相关的逻辑services.py文件中的文件预测指标应用程序。

这样可以确保我们的观点保持清洁,并专注于请求/响应处理,而预测逻辑则依靠可重复使用的服务模块。

预测器/services.py,添加以下代码:

#预测/服务从__future__导入注释从pathlib导入路径从输入导入dict中导入约伯利布导入numpy作为NP_model_cache:dict [str,任何] = {}def get_model_bundle():”“”负载和缓存经过训练的模型捆绑包:{“估算器”:Random ForestClassifier,“ target_names”:ndarray [str],“ feature_names”:list [str],}”“”全局_model_cache如果不在_model_cache中的“捆绑”:model_path =路径(__文件__)。resolve()。父级 /“型号” /“ iris_rf.joblib”_model_cache [“ bundle”] = joblib.load(model_path)返回_model_cache [“ bundle”]DEF PRODUCT_IRIS(功能):”“”特征:长度4的列表[float](sepal_length,sepal_width,petal_length,petal_width)使用class_name和概率返回dict。”“”bundle = get_model_bundle()clf = bundle [“估算器”]target_names = bundle [“ target_names”]x = np.Array([[功能],dtype = float)proba = clf.predict_proba(x)[0]idx = int(np.argmax(proba))返回 {“ class_index”:idx,“ class_name”:str(target_names [idx]),“概率”:{str(name):名称的float(p),p in zip(target_names,proba)},}

#一个 7。视图

一个 
视图充当用户输入,模型和最终响应(HTML或JSON)之间的胶水。在此步骤中,我们将建立三个观点:

  1. ``预测表格。
  2. predition_view从Web界面处理表单提交。
  3. preditive_api为程序化预测提供了JSON API端点。

预测器/views.py,添加以下代码:

来自django.http导入jsonresponse来自django.shortcuts导入渲染来自django.views.decorators.http导入require_http_methods来自django.views.decorators.csrf导入csrf_exempt#< - 添加从.forms导入IRISFORM从.Services导入preditive_iris进口JSONDEF HOME(请求):返回渲染(请求,“预测器/precadion_form.html”,{“ form”:irisform()})@require_http_methods([“ post”])def preadive_view(请求):form = iRisform(请求。post)如果不是form.is_valid():返回渲染(请求,“预测器/preadive_form.html”,{“ form”:form})data = form.cleaned_data功能= [数据[“ sepal_length”],数据[“ sepal_width”],数据[“ petal_length”],数据[“ petal_width”],这是给出的结果= predition_iris(功能)返回渲染(要求,“预测器/preceptir_form.html”,{“ form”:irisform(),“结果”:结果,“提交”:true},)@csrf_exempt#< - 添加此行@require_http_methods([“ post”])def predict_api(请求):#仅接受JSON(可选但建议)如果request.meta.get(“ content_type”,“”).startswith(“ application/json”):尝试:有效载荷= json.loads(request.body或“ {}”)除了JSON.JSONDECODEERROR:返回jsonresponse({“ error”:“无效的json。”},状态= 400)别的:#如果要继续支持它,则倒退到形式编码:有效载荷= request.post.dict()必需= [“ sepal_length”,“ sepal_width”,“ petal_length”,“ petal_width”]如果不在有效载荷中,则缺少= [k for K中的k]如果缺少:返回jsonresponse({“ error”:f“缺少:{','.join(丢失)}”},status = 400)尝试:功能= [float(有效载荷[k])的k除了Valueerror:返回jsonresponse({“ error”:“所有功能都必须是数字。”},status = 400)返回jsonresponse(precention_iris(功能))

#一个 8。模板

一个 
最后,我们将创建HTML模板,该模板是我们IRIS预测变量的用户界面。

此模板将:

  • 渲染我们之前定义的Django表单字段。
  • 提供一个干净,风格的布局,并提供响应形式输入。
  • 显示可用的预测结果。
  • 提及喜欢程序化访问的开发人员的API端点。
<!doctype html><html><头><meta charset =“ utf-8” /><Title> Iris预测器</title><meta name =“ viewport” content =“ width =设备宽度,初始尺度= 1” /><样式>Body {font-fonty:inter,system-ui,-apple-system,segoe ui,roboto,arial,sans-serif;保证金:2REM;}.card {max Width:540px;填充:1.25REM;边界:1PX实心#E5E7EB;边界拉迪乌斯:12px;}。差距:0.75REM;网格 - 板柱:1FR 1FR;}标签{font-size:0.9REM;颜色:#111827;}输入{宽度:100%;填充:0.5REM;边界:1PX实心#D1D5DB;边界拉迪乌斯:8px;}按钮{保证金顶:1REM;填充:0.6REM 0.9REM;边界:0;边界拉迪乌斯:8px;背景:#111827;颜色:白色;光标:指针;}。背景:#f9fafb;边界:1PX实心#E5E7EB;边界拉迪乌斯:8px;填充:0.75REM;}.mmuted {颜色:#6B7280;}</style></head><身体><h1> iris预测</h1><p class =“ muted”>输入虹膜花的测量以获得预测。</p><div class =“ card”><form action =“/precept/” method =“ post”>{%csrf_token%}<div class =“ row”><div><标签=“ id_sepal_length”> Sepal Length(CM)</label>{{form.sepal_length}}</div><div><标签for =“ id_sepal_width”> sepal width(cm)</label>{{form.sepal_width}}</div><div><=“ ind_petal_length”>花瓣长度(cm)</label>{{form.petal_length}}</div><div><标签=“ id_petal_width”>花瓣宽度(cm)</label>{{form.petal_width}}</div></div><button type =“提交”>预测</button></form>{%如果提交并结果%}<div class =“结果”>预测类:{{result.class_name}} <br /><div class =“ muted”>概率:<ul>{名称为p,p in result.probabilities.items%}<li> {{name}}}:{{p | floatformat:3}}} </li>{%endfor%}</ul></div></div>{%endif%}</div><p class =“ muted” style =“保证 -  top:1rem;”>API可在<code> post/api/preditive/</code>上找到</p></body></html>

#一个 9。运行应用程序

一个 
有了所有内容,现在该运行我们的Django项目并测试Web表单和API端点了。

运行以下命令来设置默认Django数据库(用于管理员,会话等):

启动Django开发服务器:

python manage.py runserver

如果一切都正确设置,您将看到与此类似的输出:

观看使用StatReloader的文件更改执行系统检查...系统检查确定没有问题(0静音)。2025年9月9日 -  02:01:27Django版本5.2.6,使用设置“ Mlapp.settings”在http://127.0.0.1:8000/启动开发服务器使用CTRL-BREAK退出服务器。

打开浏览器并访问:http://127.0.0.1:8000/使用Web表单接口。

Building Machine Learning Application with Django

Building Machine Learning Application with Django

一个 

您也可以使用卷发将邮政请求发送到API:

curl -x post http://127.0.0.0.1:8000/api/predict/ \ \-h“ content-type:application/json” \-d' {“ sepal_length”:5.1,“ sepal_width”:3.5,“ petal_length”:1.4,“ petal_width”:0.2}'

预期响应:

{“ class_index”:0,“ class_name”:“ setosa”,“概率”:{“ setosa”:1.0,“ versicolor”:0.0,“ Virginica”:0.0}}

#一个 10。测试

一个 
在总结之前,最好验证我们的应用程序是否按预期工作。Django提供了一个内置的测试框架与Python的集成在一起UNITSEST模块。

我们将创建一些简单的测试来确保:

  1. 主页渲染正确并包括标题。
  2. API端点返回有效的预测响应。

预测器/tests.py,添加以下代码:

来自django.test Import Testcase从django.urls导入反向班级预测图(testCase):def test_home_renders(self):resp = self.client.get(反向(“ home”))self.Assertequal(resp.status_code,200)self.sersertContains(resp,“虹膜预测指标”)def test_api_predict(self):url = reverse(“ prectiv_api”)有效载荷= {“ sepal_length”:5.0,“ sepal_width”:3.6,“ petal_length”:1.4,“ petal_width”:0.2,}resp = self.client.post(url,有效载荷)self.Assertequal(resp.status_code,200)data = resp.json()self.assertin(“ class_name”,数据)self.assertin(“概率”,数据)

一个 
在您的终端中运行以下命令:

您应该看到与此类似的输出:

找到2个测试。为别名“默认”创建测试数据库...系统检查确定没有问题(0静音)。..----------------------------------------------------------------------------------------------------------在0.758中进行了2个测试好的破坏别名“默认”的测试数据库...

通过这些测试通过,您可以确信您的Django +机器学习应用程序可以正常运行。

#一个 概括

一个 
您已经成功地使用了Django框架创建了一个完整的机器学习应用程序,将所有组件汇总到功能系统中。

从培训和保存模型开始,将其集成到Django服务中以进行预测。您还为用户输入构建了一个干净的Web表单,并暴露了一个用于程序化访问的JSON API。此外,您实施了自动测试,以确保应用程序可靠地运行。

尽管该项目集中在IRIS数据集上,但可以扩展相同的结构,以适应更复杂的模型,较大的数据集甚至是生产准备就绪的API,这使其成为现实世界中机器学习应用程序的坚实基础。
一个 一个 
阿比德·阿里·阿瓦(Abid Ali Awan)

((@1abidaliawan)是一位经过认证的数据科学家专业人员,他喜欢建立机器学习模型。目前,他专注于内容创建和撰写有关机器学习和数据科学技术的技术博客。Abid拥有技术管理硕士学位和电信工程学士学位。他的愿景是使用图神经网络来构建AI产品,以供精神疾病挣扎的学生。

关于《使用Django建造机器学习应用-Kdnuggets》的评论


暂无评论

发表评论

摘要

本指南提供了将机器学习模型集成到Django Web应用程序中的全面练习,特别是通过创建Iris Flower预测器。以下是涵盖的关键步骤和组件:### 1。设置环境 - **依赖项**:确保您已安装了Python以及“ PIP”用于包装管理。 - ** Django安装**:使用PIP安装Django(`pip install django`)。 - **数据库设置**: - 初始化一个新的Django项目:`django-admin startproject ml_project` - 在项目中创建一个应用程序:`python manage.py startapp iris_predictor`### 2。培训和保存模型 - **模型创建**:使用Scikit-Learn或任何其他首选框架等库来训练您的机器学习模型。 - **序列化**: - 将训练的模型保存到文件(例如`iris_model.pkl`)。 - 使用Joblib或Pickle进行序列化:`joblib.dump(型号,'iris_model.pkl')`。### 3。django应用结构 - **项目和应用结构**:通过适当的目录结构组织您的项目和应用程序。````````ml_project/iris_predictor/__init__.pyadmin.pyapps.py模型tests.pyurls.pyViews.pyforms.pyservices.py````````### 4。模型预测服务 - **服务文件**:创建一个``services.py''来处理模型预测。``python导入约伯利布DEF预测(功能):型号= joblib.load('iris_model.pkl')预测= model.predict([[功能])返回预测[0]````````### 5。django浏览和表格 - **表格**:以```forms.s.py''定义表单类。``python从django导入表格iRisform类(forms.form):sepal_length = forms.floatfield()sepal_width = forms.floatfield()petal_length = forms.floatfield()petal_width = forms.floatfield()```````` - **视图**:实施视图以处理表单提交和API请求。``python从django.http导入jsonresponse,httpresponsebadrequest来自django.shortcuts导入渲染从.forms导入IRISFORM从.Services导入预测DEF HOME(请求):返回渲染(请求,“预测器/precadion_form.html”,{“ form”:irisform()})@require_http_methods([“ post”])def preadive_view(请求):form = iRisform(请求。post)如果不是form.is_valid():返回渲染(请求,“预测器/preadive_form.html”,{“ form”:form})data = form.cleaned_data预测=预测([data [“ sepal_length”],data [“ sepal_width”],data [“ petal_length”],data [“ petal_width”]]])结果= {“ class_name”:预测}返回渲染(要求,“预测器/preceptir_form.html”,{“ form”:irisform(),“结果”:结果,“提交”:true},)```````` - ** API端点**:``python@csrf_exemptdef predict_api(请求):如果request.method =='post':尝试:有效载荷= json.loads(request.body)功能= [pareload.get(“ sepal_length”),paryload.get(“ sepal_width”),payload.get(“ petal_length”),pareload.get(“ petal_width”)]预测=预测(功能)返回jsonresponse({“ class_name”:预测})除例外为E:返回httpresponsebadrequest(str(e))````````### 6。django模板 - ** html模板**:在`predive_form.html`中创建一个html表单。````html

iris预测

{%csrf_token%}<= =“ id_sepal_length”> sepal Length(cm) {{form.sepal_length}}
<标签for =“ id_sepal_width”> sepal width(cm) {{form.sepal_width}}}
<=“ =“ id_petal_length”>花瓣长度(cm) {{form.petal_length}}}
<标签for =“ id_petal_width”>花瓣宽度(cm) {{form.petal_width}}}
{如果结果%}预测类:{{result.class_name}}{%endif%}````````### 7。django URL - ** URL配置**:在`urls.py'中定义URL模式。``python来自django.urls导入路径从.Views导入HOME,PRODUCT_VIEW,PRODUCT_APIurlpatterns = [路径('',家,名称='home'),路径('preceptir/',preditive_view,name ='precadive'),路径('api/precadive/',prectiv_api,name ='prective_api'),这是给出的````````### 8。运行应用程序 - **迁移**:应用数据库迁移:`python manage.py migrate` - **运行服务器**:启动Django开发服务器:`python manage.py runserver`### 9。测试应用程序 - **单位测试**:在`tests.py'中写测试。``python来自django.test Import Testcase从django.urls导入反向班级预测图(testCase):def test_home_renders(self):resp = self.client.get(反向(“ home”))self.Assertequal(resp.status_code,200)self.sersertContains(resp,“虹膜预测指标”)def test_api_predict(self):url = reverse(“ prectiv_api”)有效载荷= {“ sepal_length”:5.0,“ sepal_width”:3.6,“ petal_length”:1.4,“ petal_width”:0.2,}resp = self.client.post(url,json.dumps(有效载荷),content_type ='application/json')self.Assertequal(resp.status_code,200)data = resp.json()self.assertin(“ class_name”,数据)```````` - **运行测试**:使用Django的测试命令执行测试:`python manage.py Test Iris_predictor`### 概括本指南展示了将机器学习模型集成到Django Web应用程序中。涵盖的步骤包括设置Django,培训和保存模型,创建表单和视图,处理API请求,编写模板,测试应用程序并在本地服务器上运行它。此处概述的项目结构可以用作涉及高级机器学习模型和生产级API的更复杂应用程序的模板。