Django与机器学习项目教程

在这篇文章中,将探讨如何利用Django框架在Windows机器上构建激动人心的数据科学项目,并集成机器学习模型。本教程将展示如何创建一个网站,并在其中集成一个用于评估葡萄酒质量的机器学习模型。

目录

  • 创建虚拟环境及其在项目中的应用
  • 设置Django后端项目
  • 训练机器学习模型
  • 为模型创建应用程序
  • 项目URL的创建
  • 添加HTML模板到应用程序
  • 使用CSS和应用图像
  • 完成应用程序的更改

创建虚拟环境

首先,将在Windows命令提示符中设置虚拟环境。以下是创建虚拟环境的步骤:

  1. pip install virtualenv - 安装虚拟环境
  2. py -m venv DjangoMLProject - 创建虚拟环境
  3. DjangoMLProjectScriptsactivate.bat - 激活虚拟环境
  4. deactivate - 退出虚拟环境

设置Django框架

接下来,将学习如何在项目中设置Django框架。首先,确保虚拟环境已激活,然后使用pip安装Django:

py -m pip install Django

创建第一个Django项目:

django-admin startproject WineMLProject

进入WineMLProject目录,将看到以下目录结构:

WineMLProject/
    manage.py
    WineMLProject/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
        

启动开发服务器以验证一切是否正常:

python manage.py runserver

命令提示符的输出将如下所示:

监控文件更改与StatReloader,执行系统检查...系统检查未发现问题...有18个未应用的迁移(s)。在应用迁移之前,项目可能无法正常工作。运行‘python manage.py migrate’以应用它们。

训练机器学习模型

在主目录下创建一个名为ML_Model的目录。同样,在此目录下创建一个名为trainModel.py的Python文件,并粘贴以下代码。此文件用于训练模型。同时,从GitHub链接下载data.csv文件并粘贴到同一目录下。此文件包含用于训练的数据。

机器学习模型中理解技术细节:首先,导入所有必要的库以进行数据处理(Pandas),矩阵操作(Numpy),直接导入机器学习模型(Scikit-learn)等。

在这里,使用了随机森林机器学习算法,它在测试数据方面提供了更好的准确性。如果想了解随机森林算法,可以参考以下链接。

最后,在交叉验证之后,可以轻松地从所有准确性中找到最佳准确性,并用于最终模型的形成,将在服务器上部署此模型。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedShuffleSplit
from sklearn.ensemble import RandomForestRegressor
import joblib

# 这是数据文件,可以从提供的github链接下载此文件。
wine = pd.read_csv("data.csv")
print("数据集已加载...")

# 使用分层洗牌分割执行训练测试分割。
train_set, test_set = train_test_split(wine, test_size=0.2, random_state=42)
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)

for train_index, test_index in split.split(wine, wine['Alchohol']):
    strat_train_set = wine.loc[train_index]
    strat_test_set = wine.loc[test_index]
    wine = strat_train_set.copy()
    wine = strat_train_set.drop("Wine", axis=1)
    wine_labels = strat_train_set["Wine"].copy()

# 使用随机森林回归器进行预测。
model = RandomForestRegressor()
model.fit(wine, wine_labels)
print("模型训练结束...")

test_features = strat_test_set.drop("Wine", axis=1)
test_labels = strat_test_set["Wine"].copy()
y_labels = model.predict(test_features)
x = list(y_labels)
y = list(test_labels)

accuracy = []
for i in range(len(test_labels)):
    if x[i] > y[i]:
        accuracy.append((y[i] / x[i]) * 100)
    else:
        accuracy.append((x[i] / y[i]) * 100)

joblib.dump(model, "rf_model.joblib")
print("模型已保存...")
acc = sum(accuracy) / len(x)
print("模型的最终准确性: ", acc)

创建新应用

现在,创建一个单独的应用,可以开始工作。在cmd中写入此命令,但请确保必须在主工作目录中。

python manage.py startapp WineApp

这将创建一个单独的应用WineApp,如下所示:

WineApp/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

现在,在WineApp目录中,创建一个名为templates的目录,这将存储所有HTML模板,同时创建一个名为static的目录,存储所有静态文件,如CSS/Javascript和图像。然后,将以下代码粘贴到views.py文件中。

from django.http import HttpResponse
from django.shortcuts import render, redirect
import joblib
loaded_rf_model = joblib.load("ML_Model/rf_model.joblib")

def index(request):
    if request.method == 'POST':
        # 这些是所有通过POST请求从用户那里获得的变量。
        alchohol_content = request.POST.get('alchohol_content', 'default')
        malic_acid = request.POST.get('malic_acid', 'default')
        Ash = request.POST.get('Ash', 'default')
        alc_ash = request.POST.get('alc_ash', 'default')
        Magnesium = request.POST.get('Magnesium', 'default')
        Phenols = request.POST.get('Phenols', 'default')
        Flavanoid = request.POST.get('Flavanoid', 'default')
        NFPhelons = request.POST.get('NFPhelons', 'default')
        Cyacnins = request.POST.get('Cyacnins', 'default')
        Intensity = request.POST.get('Intensity', 'default')
        Hue = request.POST.get('Hue', 'default')
        OD280 = request.POST.get('OD280', 'default')
        Proline = request.POST.get('Proline', 'default')
        labels = [[float(alchohol_content),
                   float(malic_acid),
                   float(Ash),
                   float(alc_ash),
                   float(Magnesium),
                   float(Phenols),
                   float(Flavanoid),
                   float(NFPhelons),
                   float(Cyacnins),
                   float(Intensity),
                   float(Hue),
                   float(OD280),
                   float(Proline)]]
        # 现在,根据参数预测葡萄酒的质量。
        our_labels = loaded_rf_model.predict(labels)
        if our_labels[0] <= 400:
            wine_quality = "A Poor Quality Wine"
        if 400 < our_labels[0] <= 800:
            wine_quality = "A Average Quality Wine"
        if 800 < our_labels[0] <= 1200:
            wine_quality = "A Good Quality Wine"
        if 1200 < our_labels[0] <= 1500:
            wine_quality = "A Exclusive Wine"
        if our_labels[0] > 1500:
            wine_quality = "A Premium & Fresh Wine"
        details = {
            "answer": our_labels[0],
            "wine_quality": wine_quality,
        }
        # 现在渲染结果页面与数据。
        return render(request, "results.html", details)
    return render(request, "index.html")

设置URLs

转到WineMLProject/urls.py并粘贴以下代码。同时,请确保删除之前写入的所有代码。

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('WineApp.urls')),
]

现在,转到WineApp/目录,并再次创建一个名为urls.py的文件,并将以下代码复制进去。上述代码将管理主网页的URLs,而创建在WineApp/目录中的urls.py文件将管理单独应用的URLs。

from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name="index")
]

添加HTML模板

在WineApp/templates目录中创建一个名为index.html的HTML文件。这将包含首先呈现给用户的主要索引页面。其次,在相同的目录中创建一个名为results.html的HTML文件。在此页面上,将显示葡萄酒质量的结果。

添加CSS和图像

现在,在WineApp/static文件夹中,复制GitHub仓库中提供的图像和CSS文件。

完成网站更改

最后,在命令提示符中运行以下命令以迁移所有更改。

python .manage.py migrate

大功告成!已经创建了第一个数据科学Web应用程序。现在,可以通过启动服务器来运行应用程序。

python .manage.py runserver
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485