成都商城网站制作,岳阳网站开发报价,昆明seo网站建设,做推送用什么网站写在前面#xff1a;最近在参与microsoft/ML-For-Beginners的翻译活动#xff0c;欢迎有兴趣的朋友加入#xff08;https://github.com/microsoft/ML-For-Beginners/issues/71#xff09;构建使用ML模型的Web应用程序在本课中#xff0c;你将在一个数据集上训练一个ML模型… 写在前面最近在参与microsoft/ML-For-Beginners的翻译活动欢迎有兴趣的朋友加入https://github.com/microsoft/ML-For-Beginners/issues/71构建使用ML模型的Web应用程序在本课中你将在一个数据集上训练一个ML模型这个数据集来自世界各地过去一个世纪的UFO目击事件来源于NUFORC的数据库。你将学会如何“pickle”一个训练有素的模型如何在Flask应用程序中使用该模型我们将继续使用notebook来清理数据和训练我们的模型但你可以进一步探索在web应用程序中使用模型。为此你需要使用Flask构建一个web应用程序。课前测构建应用程序有多种方法可以构建Web应用程序以使用机器学习模型。你的web架构可能会影响你的模型训练方式。想象一下你在一家企业工作其中数据科学小组已经训练了他们希望你在应用程序中使用的模型。注意事项你需要问很多问题**它是web应用程序还是移动应用程序**如果你正在构建移动应用程序或需要在物联网环境中使用模型你可以使用TensorFlow Lite并在Android或iOS应用程序中使用该模型。**模型放在哪里**在云端还是本地离线支持。该应用程序是否必须离线工作**使用什么技术来训练模型**所选的技术可能会影响你需要使用的工具。使用Tensor flow。例如如果你正在使用TensorFlow训练模型则该生态系统提供了使用TensorFlow.js转换TensorFlow模型以便在Web应用程序中使用的能力。使用 PyTorch。如果你使用PyTorch等库构建模型则可以选择将其导出到ONNX开放神经网络交换)格式用于可以使用 Onnx Runtime的JavaScript Web 应用程序。此选项将在Scikit-learn-trained模型的未来课程中进行探讨。使用Lobe.ai或Azure自定义视觉。如果你使用ML SaaS软件即服务系统例如Lobe.ai或[Azure Custom Vision](https://azure.microsoft.com/services/ cognitive-services/custom-vision-service/?WT.mc_idacademic-15963-cxa)来训练模型这种类型的软件提供了为许多平台导出模型的方法包括构建一个定制API供在线应用程序在云中查询。你还有机会构建一个完整的Flask Web应用程序该应用程序能够在 Web浏览器中训练模型本身。这也可以在JavaScript上下文中使用 TensorFlow.js来完成。出于我们的目的既然我们一直在使用基于Python的notebook那么就让我们探讨一下将经过训练的模型从notebook导出为Python构建的web应用程序可读的格式所需要采取的步骤。工具对于此任务你需要两个工具Flask和Pickle它们都在Python上运行。✅ 什么是 FlaskFlask被其创建者定义为“微框架”它提供了使用Python和模板引擎构建网页的Web框架的基本功能。看看本学习单元练习使用Flask构建应用程序。✅ 什么是PicklePickle????是一 Python模块用于序列化和反序列化 Python对象结构。当你“pickle”一个模型时你将其结构序列化或展平以在 Web上使用。小心pickle本质上不是安全的所以如果提示“un-pickle”文件请小心。生产的文件具有后缀.pkl。练习 - 清理你的数据在本课中你将使用由 NUFORC国家 UFO 报告中心收集的80,000次UFO目击数据。这些数据对UFO目击事件有一些有趣的描述例如详细描述。一名男子从夜间照射在草地上的光束中出现他朝德克萨斯仪器公司的停车场跑去。简短描述。“灯光追着我们”。ufos.csv电子表格包括有关目击事件发生的city、state和country、对象的shape及其latitude和longitude的列。在包含在本课中的空白notebook中像在之前的课程中一样导入pandas、matplotlib和numpy然后导入ufos电子表格。你可以查看一个示例数据集import pandas as pd
import numpy as npufos pd.read_csv(../data/ufos.csv)
ufos.head()
将ufos数据转换为带有新标题的小dataframe。检查country字段中的唯一值。ufos pd.DataFrame({Seconds: ufos[duration (seconds)], Country: ufos[country],Latitude: ufos[latitude],Longitude: ufos[longitude]})ufos.Country.unique()
现在你可以通过删除任何空值并仅导入1-60秒之间的目击数据来减少我们需要处理的数据量ufos.dropna(inplaceTrue)ufos ufos[(ufos[Seconds] 1) (ufos[Seconds] 60)]ufos.info()
导入Scikit-learn的LabelEncoder库将国家的文本值转换为数字✅ LabelEncoder按字母顺序编码数据from sklearn.preprocessing import LabelEncoderufos[Country] LabelEncoder().fit_transform(ufos[Country])ufos.head()
你的数据应如下所示 Seconds Country Latitude Longitude
2 20.0 3 53.200000 -2.916667
3 20.0 4 28.978333 -96.645833
14 30.0 4 35.823889 -80.253611
23 60.0 4 45.582778 -122.352222
24 3.0 3 51.783333 -0.783333
练习 - 建立你的模型现在你可以通过将数据划分为训练和测试组来准备训练模型。选择要训练的三个特征作为X向量y向量将是Country 你希望能够输入Seconds、Latitude和Longitude并获得要返回的国家/地区ID。from sklearn.model_selection import train_test_splitSelected_features [Seconds,Latitude,Longitude]X ufos[Selected_features]
y ufos[Country]X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state0)
使用逻辑回归训练模型from sklearn.metrics import accuracy_score, classification_report
from sklearn.linear_model import LogisticRegression
model LogisticRegression()
model.fit(X_train, y_train)
predictions model.predict(X_test)print(classification_report(y_test, predictions))
print(Predicted labels: , predictions)
print(Accuracy: , accuracy_score(y_test, predictions))
准确率还不错**大约 95%**不出所料因为Country和Latitude/Longitude相关。你创建的模型并不是非常具有革命性因为你应该能够从其Latitude和Longitude推断出Country但是尝试从清理、导出的原始数据进行训练然后在web应用程序中使用此模型是一个很好的练习。练习 - “pickle”你的模型现在是时候_pickle_你的模型了你可以在几行代码中做到这一点。一旦它是 pickled加载你的pickled模型并针对包含秒、纬度和经度值的示例数据数组对其进行测试import pickle
model_filename ufo-model.pkl
pickle.dump(model, open(model_filename,wb))model pickle.load(open(ufo-model.pkl,rb))
print(model.predict([[50,44,-12]]))
该模型返回**3**这是英国的国家代码。????练习 - 构建Flask应用程序现在你可以构建一个Flask应用程序来调用你的模型并返回类似的结果但以一种更美观的方式。首先在你的 ufo-model.pkl 文件所在的_notebook.ipynb_文件旁边创建一个名为web-app的文件夹。在该文件夹中创建另外三个文件夹static其中有文件夹css和templates。你现在应该拥有以下文件和目录web-app/static/css/templates/
notebook.ipynb
ufo-model.pkl
✅ 请参阅解决方案文件夹以查看已完成的应用程序在_web-app_文件夹中创建的第一个文件是requirements.txt文件。与JavaScript应用程序中的_package.json_一样此文件列出了应用程序所需的依赖项。在requirements.txt中添加以下几行scikit-learn
pandas
numpy
flask
现在进入web-app文件夹cd web-app
在你的终端中输入pip install以安装_reuirements.txt_中列出的库pip install -r requirements.txt
现在你已准备好创建另外三个文件来完成应用程序在根目录中创建app.py在_templates_目录中创建index.html。在_static/css_目录中创建styles.css。使用一些样式构建_styles.css_文件body {width: 100%;height: 100%;font-family: Helvetica;background: black;color: #fff;text-align: center;letter-spacing: 1.4px;font-size: 30px;
}input {min-width: 150px;
}.grid {width: 300px;border: 1px solid #2d2d2d;display: grid;justify-content: center;margin: 20px auto;
}.box {color: #fff;background: #2d2d2d;padding: 12px;display: inline-block;
}
接下来构建_index.html_文件!DOCTYPE html
html
headmeta charsetUTF-8title???? UFO Appearance Prediction! ????/titlelink relstylesheet href{{ url_for(static, filenamecss/styles.css) }}
/headbodydiv classgriddiv classboxpAccording to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?/pform action{{ url_for(predict)}} methodpostinput typenumber nameseconds placeholderSeconds requiredrequired min0 max60 /input typetext namelatitude placeholderLatitude requiredrequired /input typetext namelongitude placeholderLongitude requiredrequired /button typesubmit classbtnPredict country where the UFO is seen/button/formp{{ prediction_text }}/p/div
/div/body
/html
看看这个文件中的模板。请注意应用程序将提供的变量周围的“mustache”语法例如预测文本{{}}。还有一个表单可以将预测发布到/predict路由。最后你已准备好构建使用模型和显示预测的python 文件在app.py中添加:import numpy as np
from flask import Flask, request, render_template
import pickleapp Flask(__name__)model pickle.load(open(../ufo-model.pkl, rb))app.route(/)
def home():return render_template(index.html)app.route(/predict, methods[POST])
def predict():int_features [int(x) for x in request.form.values()]final_features [np.array(int_features)]prediction model.predict(final_features)output prediction[0]countries [Australia, Canada, Germany, UK, US]return render_template(index.html, prediction_textLikely country: {}.format(countries[output]))if __name__ __main__:app.run(debugTrue)
???? 提示当你在使用Flask运行Web应用程序时添加 debugTrue时你对应用程序所做的任何更改将立即反映无需重新启动服务器。注意不要在生产应用程序中启用此模式如果你运行python app.py或python3 app.py - 你的网络服务器在本地启动你可以填写一个简短的表格来回答你关于在哪里看到UFO的问题在此之前先看一下app.py的实现首先加载依赖项并启动应用程序。然后导入模型。然后在home路由上渲染index.html。在/predict路由上当表单被发布时会发生几件事情收集表单变量并转换为numpy数组。然后将它们发送到模型并返回预测。我们希望显示的国家/地区根据其预测的国家/地区代码重新呈现为可读文本并将该值发送回index.html以在模板中呈现。以这种方式使用模型包括Flask和pickled模型是相对简单的。最困难的是要理解数据是什么形状的这些数据必须发送到模型中才能得到预测。这完全取决于模型是如何训练的。有三个数据要输入以便得到一个预测。在一个专业的环境中你可以看到训练模型的人和在Web或移动应用程序中使用模型的人之间的良好沟通是多么的必要。在我们的情况下只有一个人你???? 挑战:你可以在Flask应用程序中训练模型而不是在notebook上工作并将模型导入Flask应用程序尝试在notebook中转换Python代码可能是在清除数据之后从应用程序中的一个名为train的路径训练模型。采用这种方法的利弊是什么课后测复习与自学有很多方法可以构建一个Web应用程序来使用ML模型。列出可以使用JavaScript或Python构建Web应用程序以利用机器学习的方法。考虑架构模型应该留在应用程序中还是存在于云中如果是后者你将如何访问它为应用的ML Web解决方案绘制架构模型。任务尝试不同的模型