机器学习基础12-Pipeline实现自动化流程处理(基于印第安糖尿病Pima 数据集)

有一些标准的流程可以实现对机器学习问题的自动化处理,在 scikitlearn 中通过Pipeline来定义和自动化运行这些流程。本节就将介绍如何通过Pipeline实现自动化流程处理。

  • 如何通过Pipeline来最小化数据缺失。
  • 如何构建数据准备和生成模型的Pipeline。
  • 如何构建特征选择和生成模型的Pipeline。

机器学习的自动流程

在机器学习方面有一些可以采用的标准化流程,这些标准化流程是从共同的问题中提炼出来的,例如评估框架中的数据缺失等。在 scikit-learn中提供了自动化运行流程的工具------Pipeline。Pipeline 能够将从数据转换到评估模型的整个机器学习流程进行自动化处理。读者可以到scikit-learn的官方网站阅读关于Pipeline的章节,加深对Pipeline的理解。

数据准备和生成模型的Pipeline

在机器学习的实践中有一个很常见的错误,就是训练数据集与评估数据集之间的数据泄露,这会影响到评估的准确度。要想避免这个问题,需要有一个合适的方式把数据分离成训练数据集和评估数据集,这个过程被包含在数据的准备过程中。数据准备过程是很好的理解数据和算法关系的过程,举例来说,当对训练数据集做标准化和正态化处理来训练算法时,就应该理解并接受这同样要受评估数据集的影响。

Pipeline能够处理训练数据集与评估数据集之间的数据泄露问题,通常会在数据处理过程中对分离出的所有数据子集做同样的数据处理,如正态化处理。

下面将演示如何通过Pipeline来处理这个过程,共分为以下两个步

骤:

(1)正态化数据。

(2)训练一个线性判别分析模型。

在使用Pipeline进行流程化算法模型的评估过程中,采用10折交叉验证来分离数据集。

数据集下载

其代码如下:

cpp 复制代码
import pandas as pd
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import cross_val_score, ShuffleSplit, KFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)


#将数据转成数组
array = data.values
#分割数据,去掉最后一个标签
X = array[:, 0:8]

Y = array[:, 8]
# 分割数据集
n_splits = 10

# 随机数种子
seed = 7

kfold = KFold(n_splits=n_splits, random_state=seed, shuffle=True)


steps = []
steps.append(('Standardize', StandardScaler()))
steps.append(('lda',LinearDiscriminantAnalysis()))


model = Pipeline(steps)

result = cross_val_score(model, X, Y, cv=kfold)

print("算法评估结果:%.3f (%.3f)" % (result.mean(), result.std()))

Pipeline的各个步骤,通过列表参数传递给Pipeline实例,并通过

Pipeline进行流程化处理过程。运行结果:

cpp 复制代码
算法评估结果:0.767 (0.048)

特征选择和生成模型的Pipeline

特征选择也是一个容易受到数据泄露影响的过程。和数据准备一样,特征选择时也必须确保数据的稳固性,Pipeline 也提供了一个工具(FeatureUnion)来保证数据特征选择时数据的稳固性。下面是一个在数据选择过程中保持数据稳固性的例子。

这个过程包括以下四个步骤:

(1)通过主要成分分析进行特征选择。

(2)通过统计选择进行特征选择。

(3)特征集合。

(4)生成一个逻辑回归模型。

在本例中也采用10折交叉验证来分离训练数据集和评估数据集。

代码如下:

cpp 复制代码
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.feature_selection import SelectKBest
from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import cross_val_score, ShuffleSplit, KFold
from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.preprocessing import StandardScaler

#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)


#将数据转成数组
array = data.values
#分割数据,去掉最后一个标签
X = array[:, 0:8]

Y = array[:, 8]
# 分割数据集
n_splits = 10

# 随机数种子
seed = 7

kfold = KFold(n_splits=n_splits, random_state=seed, shuffle=True)


features = []
features.append(('PCA', PCA(n_components=3)))
#添加select_best
features.append(('select_best', SelectKBest(k=6)))

steps = []
steps.append(('feature_union', FeatureUnion(features)))

steps.append(('logistic', LogisticRegression()))

model = Pipeline(steps)

result = cross_val_score(model, X, Y, cv=kfold)

print("算法评估结果:%.3f (%.3f)" % (result.mean(), result.std()))

运行结果:

此处先创建了FeatureUnion,然后将其作为Pipeline的一个生成步骤。

cpp 复制代码
算法评估结果:0.771 (0.048)

本节学习了通过 scikit-learn 中的 Pipeline 进行自动流程化数据准备和特征选择的过程。接下来将探讨针对要处理的问题,如何提高机器学习算法的准确度。

相关推荐
测试人社区-千羽1 分钟前
AI重塑API测试数据生成的时代背景
人工智能·测试工具·程序人生·自动化·测试覆盖率
爱写Bug的小孙7 分钟前
Tools、MCP 和 Function Calling
开发语言·人工智能·python·ai·ai编程·工具调用
rgb2gray9 分钟前
城市韧性与交通基础设施系统耦合协调度的时空演变及影响因素
网络·人工智能·python·ai·写作·耦合·耦合协调
初级炼丹师(爱说实话版)15 分钟前
大模型部署-数据并行/模型并行
人工智能·python
listhi52018 分钟前
机械系统运动学与动力学在MATLAB及SimMechanics中的实现方案
人工智能·算法·matlab
AI大模型学徒19 分钟前
大模型应用开发(十五)_知识库1
人工智能·chatgpt·大模型·llm·知识库·deepseek
音视频牛哥21 分钟前
从“十五五”到数字化转型:音视频技术在未来产业中的关键作用
人工智能·深度学习·计算机视觉·音视频·十五五规划音视频低延迟方案·十五五规划低空经济低延迟方案·rtsp rtmp播放器
TOYOAUTOMATON26 分钟前
GTH系列模组介绍
前端·目标检测·自动化
测试人社区—小叶子28 分钟前
测试开发面试高频“灵魂八问”深度解析与应答策略
网络·人工智能·测试工具·云原生·容器·面试·职场和发展
蛐蛐蜉蝣耶28 分钟前
Spring AI与MCP集成实践:构建智能应用的新方式
人工智能·微服务·java开发·spring ai·mcp