Streamlit - 无需学习任何 Web 框架即可部署机器学习模型。
用演示项目解释- 对于很多人来说,在一个实际的数据科学项目上工作,然后花更多时间在 Web 框架、后端和前端上工作可能会很累。对于数据科学家或机器学习工程师来说,研究这些技术是次要任务。所以问题是,如何在不学习烧瓶的情况下部署 ML 模型,这是一个众所周知的最小 Python 框架?好吧,在这篇博客中,我将向您介绍最有用的工具,即 Streamlit,它可以帮助您专注于数据科学家的工作。但是,它会
用演示项目解释-
对于很多人来说,在一个实际的数据科学项目上工作,然后花更多时间在 Web 框架、后端和前端上工作可能会很累。对于数据科学家或机器学习工程师来说,研究这些技术是次要任务。所以问题是,如何在不学习烧瓶的情况下部署 ML 模型,这是一个众所周知的最小 Python 框架?好吧,在这篇博客中,我将向您介绍最有用的工具,即 Streamlit,它可以帮助您专注于数据科学家的工作。但是,它会负责模型的部署,可以将其发布为工作的 Web 应用程序。
让我们了解 streamlit 工具如何对像你我这样的 ML/数据科学从业者部署我们的模型有用。我们将使用著名的capital 共享单车数据集并实施各种分类算法来确定用户的会员类型,无论他/她是会员、休闲还是未知。在开始之前,先告诉大家,我是一个新手博主,因为我没有写太多的习惯,这也是我的第一篇博客。所以,请原谅我可能犯的任何错误。我会尽量让解释保持简单,所以在阅读本文时请耐心等待。您应该了解基本的 python 编程语言,并且通过 scikit-learn 库实现 ML 算法的一些工作知识足以理解这个项目。
要开始使用 Streamlit,您需要使用 pip 在系统上安装它。在终端/cmd 上键入“$pip install streamlit”。对于 Linux 和 Windows 用户,该命令是相同的。
让我们从导入一些库和 streamlit 开始,如下所示:
我们将训练决策树、神经网络和 KNN 分类器模型来预测用户的成员类型。看一下我们数据集的一个实例:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--YB2Ukedf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/ ShivamBhirud/Capital-Bike-Share-Data-Streamlit-Web-Application/blob/master/snaps%2520of%2520web%2520app/datasetSnap.jpg%3Fraw%3Dtrue)
现在,让我们从定义我们的 main() 函数开始,我们将在其中调用其他函数来对我们的数据集执行预处理并调用我们的 ML 模型。
在上面的代码片段中,st.title() 是一个流光函数,有助于显示我们项目的标题。它将在您的 Web 应用程序上显示为标题,一旦您在本地系统上运行此流式代码,它就会自动部署在 localhost 上。要运行 Streamlit 代码,请移至代码所在的目录并在终端或 cmd 上键入 streamlit run your_file_name.py,它将在 localhost:8501 上运行您的 Web 应用程序。此外,我们通过调用我们的用户定义函数 loadData() 来加载数据集。然后我们将通过调用 preprocessing() 函数执行预处理并将数据拆分为训练和测试数据(loadData() 和 preprocessing() 函数的片段如下所示)。函数 st.checkbox() 也是一个简化函数,有助于在 Web 应用程序上启用复选框小部件。因此,当用户单击复选框时,将调用函数 st.write(),从而在我们的应用程序中弹出数据集的实例。
查看函数 loadData() 和 preprocessing():
上面显示的代码中介绍了streamlit最有趣和最有用的特性,即**@st.cache**。它有助于缓存在相应函数中执行的每个任务。在这里,数据集被缓存了,所以下次我们加载它时不会有延迟。现在,我们将独立和依赖特征分别指定为 X 和 y。我们考虑的独立特征是持续时间、起始站号和结束站号。依赖特征是数据集的成员类型列,但需要对其进行编码,因为它由分类数据组成。在这里,我使用了 scikit-learn 的 LabelEncoder(),但您可以使用您选择的任何编码器。最后,我们将使用 scikit-learn 库的 train_test_split() 方法将数据拆分为训练和测试数据集。
现在我们已经准备好训练和测试数据,让我们实现 ML 算法并在我们的 Web 应用程序上显示结果。
首先,我们将让用户使用 streamlit 的 st.sidebar.selectbox() 方法从侧边栏的选择框中选择所需的 ML 模型,如下所示:
由于它是一个带有动手项目的流线型工具演示,因此解释 ML 算法超出了范围。所以,我希望你们对在 python 中实现 ML 算法有一些了解。好吧!让我们回到上面显示的代码。如果用户选择我们的第一个模型,它是一个决策树分类器,则会调用 decisionTree() 函数(如下所示),该函数返回混淆矩阵和训练模型的准确性。再次使用 st.write(),我们可以在我们的 Web 应用程序上显示混淆矩阵和分数。
此外,如果用户想将他的测试样本提供给模型并获得预测结果怎么办?为此,我们可以在我们的应用程序上使用一个复选框。如果用户点击复选框,则**accept_user_data()**函数(函数accept_user_data()的代码如下所示)被调用,用户将能够填写三个独立的手动功能。因此,模型将预测相同的成员类型。
accept_user_data() 函数的代码:
此外,我们可以通过调用构建 KNN 分类器和神经网络分类器的函数来重复同样的事情。请注意,我们刚刚讨论了对这些模型的函数调用,我们还没有看到那些用于训练实际模型的函数定义。查看这些函数调用的代码片段:
其次,ML算法将使用python中著名的机器学习库scikit-learn库来编写。
决策树分类器写成如下:
神经网络也使用 scikit-learn 中的 MLPClassifier 以某种类似的方式编写。在这里,我们必须在训练模型之前对数据进行缩放,因为这样可以提供更准确的结果。请注意,如上所述,我们已经使用 streamlit 缓存了模型。这将有助于立即加载模型,从而减少执行延迟。
请参阅下面的神经网络实现:
同样,KNN 分类器模型 是使用 scikit-learn 库中的 KNeighborsClassifier 编写的:
就数据科学和机器学习领域而言,我们都知道数据可视化的重要性。
最后,让我们探索如何使用 Streamlit 在我们的 Web 应用程序上展示美丽的交互式可视化。
我们将基于此数据开发两个可视化以用于演示目的。第一个是数据集中车辆的一些起始位置的可视化。 Streamlit 无法直接可视化地图上地理空间点的散点图;但是,它需要数据集中的纬度和经度列。因此,我个人更喜欢使用Geopy库来解码数据集起始位置列中存在的 1000 个地址的纬度和经度。如果您有兴趣了解我是如何解码的,请访问我的GitHub Repository。否则,您可以从我的this project的 GitHub 存储库中下载带有和不带有坐标的数据集。
此外,st.map() 函数将自动绘制世界地图以及基于纬度和经度的数据点。请参见下面的示例:
对于最后一个可视化,我们将绘制直方图以确定特定特征中每个元素的计数。例如,根据我们的数据集,有三种类型的成员。因此,我们将使用plotly库绘制直方图,以查看每种类型的近似计数。让我们使用三个特征的直方图来可视化计数,即起始站、结束站和成员类型。此外,让用户使用 streamlit 选择框功能选择要查看的可视化。
请看下面的代码:
以下是使用 streamlit Web 应用程序 获得的惊人结果的一些快照:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--ZsK1ENbg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/ ShivamBhirud/Capital-Bike-Share-Data-Streamlit-Web-Application/blob/master/snaps%2520of%2520web%2520app/output2.png%3Fraw%3Dtrue)
[](https://res.cloudinary.com/practicaldev/image/fetch/s--es9T2Z5N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/ ShivamBhirud/Capital-Bike-Share-Data-Streamlit-Web-Application/blob/master/snaps%2520of%2520web%2520app/output3.png%3Fraw%3Dtrue)
[](https://res.cloudinary.com/practicaldev/image/fetch/s--30muX7UA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/ ShivamBhirud/Capital-Bike-Share-Data-Streamlit-Web-Application/blob/master/snaps%2520of%2520web%2520app/output4.png%3Fraw%3Dtrue)
这是一个相当大的教程,我知道!但是,最令人兴奋的事实是,您已经学会了如何部署机器学习 Web 应用程序,而无需学习 Flask 或 Django。另外,在这个项目中,streamlit 很容易使用,我们刚刚进行了 33 个 streamlit 调用,其中很多都是相同类型的函数调用。我希望你喜欢这篇文章,如果喜欢的话,它会有所帮助,与你的朋友和同事分享。
注意:请不要复制并运行代码片段,因为它可能会导致缩进错误。因此,为了节省您一些时间,我将我的 GitHub 链接添加到此代码 - CLICK HERE。
Streamlit 可以做很多很酷的事情。所以,查看官方文档Streamlit 。
更多推荐
所有评论(0)