Python构建机器学习App
概括地说,我们今天要构建的 Web 应用程序本质上将接收一个 CSV 文件作为输入数据,应用程序将使用它来构建使用随机森林算法的回归模型。现在,让我们详细了解一下 Web 应用程序前端和后端发生的事情的详细信息。前端用户可以将自己的数据集上传为 CSV 文件,也可以调整学习参数(在左侧面板中),调整这些参数后,将构建新的机器学习模型,然后显示其模型性能 (在右侧面板中)。上传 CSV 数据作为输入
概括地说,我们今天要构建的 Web 应用程序本质上将接收一个 CSV 文件作为输入数据,应用程序将使用它来构建使用随机森林算法的回归模型。
现在,让我们详细了解一下 Web 应用程序前端和后端发生的事情的详细信息。
前端
用户可以将自己的数据集上传为 CSV 文件,也可以调整学习参数(在左侧面板中),调整这些参数后,将构建新的机器学习模型,然后显示其模型性能 (在右侧面板中)。
上传 CSV 数据作为输入
CSV 文件应该有一个标题作为第一行(包含列名称),然后是后续行(第 2 行及以后)中的数据集。 我们可以看到,在左侧面板的上传框下方,有一个指向示例 CSV 文件(示例 CSV 输入文件)的链接。 让我们看看下面显示的这个示例 CSV 文件:
调整学习参数
上传 CSV 文件后,您应该能够看到已构建机器学习模型,其结果显示在右侧面板中。 需要注意的是,模型是使用默认参数构建的。 用户可以通过滑块输入调整学习参数,每次调整都会构建一个新模型。
模型输出(右面板)
在右侧面板中,我们可以看到显示的第一个数据是 1. Dataset 部分中的输入数据框,其结果将显示在 2. Model Performance 部分中。 最后,模型构建中使用的学习参数在 3. 模型参数部分提供。
至于模型性能,显示了训练集和测试集的性能指标。由于这是一个回归模型,决定系数 (R^2) 和误差(均方误差或平均绝对误差)。
后端
现在,让我们深入了解应用程序的内部工作原理。
上传输入的 CSV 文件后,文件内容将转换为 Pandas 数据帧并分配给 df 变量。 然后将数据帧分成 X 和 y 变量,以便将其准备为 Scikit-learn 的输入。 接下来,这两个变量用于使用左侧面板中用户指定的值进行数据拆分(默认情况下,它使用 80/20 分流比)。 数据拆分维度和列名的详细信息打印在应用程序前端的右侧面板中。 然后使用主要子集(80% 子集)构建随机森林模型,并将构建的模型应用于对主要(80%)和次要(20%)子集进行预测。 此回归模型的模型性能随后会报告到右侧面板中的 2. 模型性能部分。
其他技术
这将仅使用 3 个 Python 库来执行,包括 Streamlit、Pandas 和 Scikit-learn。
Streamlit 是一个简单易用的 Web 框架,可让您立即快速实施数据驱动的应用程序。
Pandas 是一种数据结构工具,可以处理、操作和转换表格数据集。
Scikit-learn 是一个强大的工具,它为用户提供了构建机器学习模型(即可以执行各种学习任务,包括分类、回归和聚类)以及配备示例数据集和特征工程功能的能力。
代码释义
这个应用程序的完整代码如下所示。代码跨越 131 行,并添加了空格和注释行,以使代码可读。
第1-6行:从scikit-learn库中导入由streamlit,pandas和各种功能组成的先决条件库。
第8-10行:注释说明第11–12行正在做什么。
第11-12行:使用st.set_page_config()函数设置页面标题及其布局。 在这里我们可以看到我们将page_title设置为“ The Machine Learning App”,而布局则设置为“ wide”,这将允许应用程序的内容适合浏览器的整个宽度(即默认情况下,内容将 被限制为固定宽度)。
第14-15行:注释说明第16-65行的工作。
第16行:在这里,我们定义了一个名为build_model()的自定义函数,下面从第17行开始的语句将指示该函数的作用
第17-18行:df变量中存储的输入数据帧的内容将分为2个变量(X和Y)。 在第17行,除了最后一列之外的所有列都将分配给X变量,而最后一列将被分配给Y变量。
第20-21行:第20行是注释,说明第21行的工作,这是使用train_test_split()函数对输入数据(存储在X和Y变量中)进行数据拆分。 默认情况下,数据将按80/20的比例进行拆分,其中80%的子集将分配给X_train和Y_train,而20%的子集将分配给X_test和Y_test。
第23–27行:第23行打印1.2. Data splits,使用Markdown语法拆分为粗体文本(即,在此处我们可以看到,我们要在使文本变为粗体的短语之前和之后使用符号**,如1.2. Data splits。我们将打印X和Y变量的数据维度,其中第24行和第26行将使用st.write()函数打印出训练集和测试集,而第25行和27行将使用st.write()函数打印出数据维度 .info()函数通过在X_train和X_test变量之后分别附加.shape,如X_train.shape和X_test.shape一样,请注意st.info()函数将在变量输出周围创建一个彩色框。
第29–33行:以类似于第23–27行中的代码块的方式,该块将打印出分别存储在X.columns和Y.name中的X和Y变量名称。
第35–43行:RandomForestRegressor()函数将用于构建回归模型。 用于构建随机森林模型的各种输入参数将使用应用程序前端左侧面板中的用户指定值(在后端中,这对应于第82–97行)。
第44行:现在将使用therf.fit()函数对模型进行训练,并使用X_train和Y_train作为输入参数。
第46行:第2节的标题。将使用st.subheader()函数打印出模型性能。
第48–54行:第48行打印出使用st.markdown()函数的2.1训练集的标题。 第 49 行应用经过训练的模型,使用 rd.predict() 函数将 X_test 作为输入参数对训练集进行预测。 第50行打印要为确定系数(R2)打印的性能指标的文本。 第51行使用st.info()函数通过将Y_train和Y_pred_train(代表训练集的实际Y值和预测Y值)用作输入参数,通过r2_score()函数打印R2分数。 第53行使用st.write()函数来打印下一个性能指标(即错误)的文本。 接下来,第54行使用st.info()函数通过将Y_train和Y_pred_train作为输入参数,通过mean_squared_error()函数打印均方误差值。
第 56-59 行:此代码块执行完全相同的过程,但它将在测试集上执行而不是训练集。 因此,可以使用测试集数据(Y_test和Y_pred_test)来代替训练集数据(Y_train和Y_pred_train)。
第64–65行:第64行使用st.subheader()函数打印出使用st.subheader()函数标题。
运行Web应用
详情参阅 - 亚图跨际
更多推荐




所有评论(0)