在这篇文章中,将探讨如何利用Django框架在Windows机器上构建激动人心的数据科学项目,并集成机器学习模型。本教程将展示如何创建一个网站,并在其中集成一个用于评估葡萄酒质量的机器学习模型。
首先,将在Windows命令提示符中设置虚拟环境。以下是创建虚拟环境的步骤:
pip install virtualenv
- 安装虚拟环境py -m venv DjangoMLProject
- 创建虚拟环境DjangoMLProjectScriptsactivate.bat
- 激活虚拟环境deactivate
- 退出虚拟环境接下来,将学习如何在项目中设置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")
转到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")
]
在WineApp/templates目录中创建一个名为index.html的HTML文件。这将包含首先呈现给用户的主要索引页面。其次,在相同的目录中创建一个名为results.html的HTML文件。在此页面上,将显示葡萄酒质量的结果。
现在,在WineApp/static文件夹中,复制GitHub仓库中提供的图像和CSS文件。
最后,在命令提示符中运行以下命令以迁移所有更改。
python .manage.py migrate
大功告成!已经创建了第一个数据科学Web应用程序。现在,可以通过启动服务器来运行应用程序。
python .manage.py runserver