news 2026/7/10 19:08:49

机器学习 - 自动化工作流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机器学习 - 自动化工作流

摘要:本文介绍了机器学习管道(Pipeline)的概念及其在数据科学工作流中的重要性。管道通过标准化流程实现从数据摄入到模型部署的全过程自动化,包含数据准备、模型训练、评估和再训练等关键环节。文章分析了数据质量、可靠性和可访问性三大挑战,并通过两个Python实例(使用Scikit-learn的皮马印第安人糖尿病数据集)演示了如何利用管道防止数据泄露:第一个示例展示标准化和线性判别分析的管道实现(准确率77.9%),第二个示例展示通过FeatureUnion结合PCA和特征选择的逻辑回归模型(准确率77.89%)。这些案例验证了管道在确保数据准备和特征提取过程隔离方面的有效性。

目录

引言

机器学习管道的组成部分如下:

机器学习管道面临的挑战

数据质量

数据可靠性

数据可访问性

机器学习管道建模与数据准备

示例

输出结果

机器学习管道建模与特征提取

示例

输出结果


引言

为了成功执行并生成结果,机器学习模型必须自动化一些标准工作流。借助 Scikit-learn 管道(Pipelines),可以实现这些标准工作流的自动化。从数据科学家的角度来看,管道是一个具有普遍性但至关重要的概念。它本质上允许数据从原始格式转化为有用的信息。管道的工作原理可通过以下图表理解:数据摄入→数据准备→机器学习模型训练→模型评估→模型部署→机器学习模型再训练

机器学习管道的组成部分如下:

  1. 数据摄入:顾名思义,这是导入数据以供机器学习项目使用的过程。数据可以实时或批量地从单个或多个系统中提取。这是最具挑战性的步骤之一,因为数据质量会影响整个机器学习模型。
  2. 数据准备:导入数据后,需要对数据进行预处理,使其适用于机器学习模型。数据预处理是数据准备中最重要的技术之一。
  3. 机器学习模型训练:下一步是训练机器学习模型。我们有多种机器学习算法,如监督学习、无监督学习、强化学习等,可用于从数据中提取特征并进行预测。
  4. 模型评估:之后,需要对机器学习模型进行评估。在自动化机器学习(AutoML)管道中,可以借助各种统计方法和业务规则对机器学习模型进行评估。
  5. 机器学习模型再训练:在自动化机器学习管道中,第一个模型未必是最佳模型。第一个模型会被视为基准模型,我们可以对其进行重复训练,以提高模型的准确性。
  6. 部署:最后,需要部署模型。这一步骤包括将模型应用并迁移到业务运营中,供其使用。

机器学习管道面临的挑战

创建机器学习管道时,数据科学家会遇到诸多挑战。这些挑战主要分为以下三类:

数据质量

任何机器学习模型的成功都在很大程度上依赖于数据质量。如果提供给机器学习模型的数据不准确、不可靠且不稳健,那么最终将会得到错误或具有误导性的输出结果。

数据可靠性

机器学习管道面临的另一个挑战是所提供数据的可靠性。众所周知,数据科学家可以通过多种来源获取数据,但为了获得最佳结果,必须确保这些数据来源是可靠且可信的。

数据可访问性

要从机器学习管道中获得最佳结果,数据本身必须具有可访问性,这就需要对数据进行整合、清洗和整理。由于数据具有可访问性这一特性,元数据会通过新的标签进行更新。

机器学习管道建模与数据准备

在为机器学习模型准备数据时,数据科学家需要处理的一个重要问题是训练数据集向测试数据集的数据泄露。通常,在数据准备阶段,数据科学家会在模型训练前对整个数据集使用标准化或归一化等技术。但这些技术无法帮助我们避免数据泄露,因为训练数据集会受到测试数据集中数据尺度的影响。通过使用机器学习管道,可以防止这种数据泄露,因为管道能确保数据准备(如标准化)仅限于交叉验证过程的每个折(fold)。

示例

以下是一个 Python 示例,展示了数据准备和模型评估的工作流。本示例使用 Scikit-learn 中的皮马印第安人糖尿病数据集(Pima Indian Diabetes dataset)。首先,我们将创建一个用于标准化数据的管道;然后,构建一个线性判别分析(Linear Discriminant Analysis)模型;最后,使用 20 折交叉验证对管道进行评估。首先,导入所需的库:

接下来,按照之前的示例加载皮马印第安人糖尿病数据集:

然后,通过以下代码创建管道:

estimators = [] estimators.append(('standardize', StandardScaler())) estimators.append(('lda', LinearDiscriminantAnalysis())) model = Pipeline(estimators)

最后,评估该管道并输出其准确率:

kfold = KFold(n_splits=20, random_state=7, shuffle=True) # 添加shuffle=True以确保结果可复现(Scikit-learn 1.2+版本) results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
输出结果

plaintext

0.7790148448043184

上述输出结果是该设置在数据集上的准确率汇总。

机器学习管道建模与特征提取

在机器学习模型的特征提取阶段也可能发生数据泄露。因此,特征提取过程也应受到限制,以防止训练数据集中出现数据泄露。与数据准备阶段类似,通过使用机器学习管道,也可以防止这种数据泄露。管道提供的工具 FeatureUnion(特征联合)可用于此目的。

示例

以下是一个 Python 示例,展示了特征提取和模型评估的工作流。本示例同样使用 Scikit-learn 中的皮马印第安人糖尿病数据集。首先,通过主成分分析(PCA)提取 3 个特征;然后,通过统计分析提取 6 个特征;特征提取后,使用 FeatureUnion 工具组合多个特征选择和提取过程的结果;最后,构建一个逻辑回归(Logistic Regression)模型,并使用 20 折交叉验证对管道进行评估。首先,导入所需的库:

from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.pipeline import Pipeline from sklearn.pipeline import FeatureUnion from sklearn.linear_model import LogisticRegression from sklearn.decomposition import PCA from sklearn.feature_selection import SelectKBest

接下来,按照之前的示例加载皮马印第安人糖尿病数据集:

path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:, 0:8] Y = array[:, 8]

然后,创建特征联合:

features = [] features.append(('pca', PCA(n_components=3))) features.append(('select_best', SelectKBest(k=6))) feature_union = FeatureUnion(features)

接下来,通过以下代码创建管道:

estimators = [] estimators.append(('feature_union', feature_union)) estimators.append(('logistic', LogisticRegression(max_iter=1000))) # 增加max_iter以确保模型收敛 model = Pipeline(estimators)

最后,评估该管道并输出其准确率:

kfold = KFold(n_splits=20, random_state=7, shuffle=True) # 添加shuffle=True以确保结果可复现(Scikit-learn 1.2+版本) results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
输出结果

plaintext

0.7789811066126855

上述输出结果是该设置在数据集上的准确率汇总。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 13:56:42

Scarab模组管理器:新手玩家如何3步解决空洞骑士模组安装难题

Scarab模组管理器:新手玩家如何3步解决空洞骑士模组安装难题 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾经为安装空洞骑士模组而头疼?手动…

作者头像 李华
网站建设 2026/7/1 21:14:00

想让AI声音更像人?试试这个基于CosyVoice2的二次开发项目

想让AI声音更像人?试试这个基于CosyVoice2的二次开发项目 1. 引言:语音合成的下一个突破点 在人工智能技术快速发展的今天,语音合成(Text-to-Speech, TTS)已经从简单的“能说”走向了“说得像人”。传统的TTS系统往往…

作者头像 李华
网站建设 2026/7/1 10:22:50

基于DeepSeek-OCR-WEBUI的票据与表格识别技术解析

基于DeepSeek-OCR-WEBUI的票据与表格识别技术解析 1. 引言:复杂场景下的OCR技术演进 1.1 行业痛点与技术挑战 在金融、物流、政务等高文档密度行业中,传统人工录入方式面临效率低、成本高、错误率高等问题。尽管早期OCR技术已实现基础文本提取&#x…

作者头像 李华
网站建设 2026/7/1 20:52:55

Linux(Ubuntu) rsync神器用法大全:增量备份+断点续传+进度显示,搭配TimeShift双保险!

在Linux系统中,文件复制与备份是高频操作。相较于传统的cp命令,rsync凭借增量备份、断点续传、实时进度显示等强大功能,成为运维和普通用户的首选工具,尤其适合/home、/data等目录的备份场景,完美搭配TimeShift实现“系统+数据”双重备份保障。本文整理rsync最实用的3类命…

作者头像 李华
网站建设 2026/7/1 9:11:32

西门子锂电池项目:1500 安全型 PLC 程序开发漫谈

西门子锂电池项目,1500安全型PLC程序。 包含对接雅马哈机器人,视觉,库卡机器人,MES通信程序块。 由STL语言和LAD编写。 最近参与了西门子锂电池项目,其中 1500 安全型 PLC 程序开发真是个有趣又具挑战的活儿。这个项目…

作者头像 李华