机器学习基础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 进行自动流程化数据准备和特征选择的过程。接下来将探讨针对要处理的问题,如何提高机器学习算法的准确度。

相关推荐
jia V iuww5201 分钟前
数据分析
人工智能·数据挖掘·数据分析
Flying_Fish_roe14 分钟前
Spring Boot-RESTful API相关问题
spring boot·python·restful
dgiij34 分钟前
AutoX.js向后端传输二进制数据
android·javascript·websocket·node.js·自动化
AI第一基地1 小时前
推荐系统-电商直播 多目标排序算法探秘
人工智能·深度学习·排序算法·transformer·知识图谱·word2vec
叫我:松哥1 小时前
基于机器学习的癌症数据分析与预测系统实现,有三种算法,bootstrap前端+flask
前端·python·随机森林·机器学习·数据分析·flask·bootstrap
我是瓦力1 小时前
球形包围框-Bounding Sphere-原理-代码实现
人工智能·python·深度学习·计算机视觉·3d
开MINI的工科男1 小时前
【笔记】自动驾驶预测与决策规划_Part1_自动驾驶决策规划简介
人工智能·笔记·自动驾驶
网络研究院1 小时前
企业急于采用人工智能,忽视了安全强化
网络·人工智能·安全·工具·风险·企业
jndingxin1 小时前
OpenCV特征检测(3)计算图像中每个像素处的特征值和特征向量函数cornerEigenValsAndVecs()的使用
人工智能·opencv·计算机视觉
byxdaz1 小时前
基于OpenCV的YOLOv5图片检测
人工智能·opencv·yolo