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

相关推荐
维维180-3121-14558 小时前
转录因子与蛋白互作研究综合解决方案:涵盖DAP-seq, Y2H, Co-IP等多种技术
人工智能·农业·植物·生物
君名余曰正则8 小时前
机器学习实操项目03——Scikit-learn介绍及简单分类案例
机器学习·分类·scikit-learn
xchenhao8 小时前
SciKit-Learn 全面分析 digits 手写数据集
python·机器学习·分类·数据集·scikit-learn·svm·手写
说私域8 小时前
开源AI智能名片链动2+1模式S2B2C商城小程序在淘宝公域流量运营中的应用研究
人工智能·小程序·开源
Godspeed Zhao8 小时前
自动驾驶中的传感器技术40——Radar(1)
人工智能·机器学习·自动驾驶
胡耀超8 小时前
7、Matplotlib、Seaborn、Plotly数据可视化与探索性分析(探索性数据分析(EDA)方法论)
python·信息可视化·plotly·数据挖掘·数据分析·matplotlib·seaborn
Apache Flink8 小时前
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
人工智能·flink·apache
索迪迈科技8 小时前
登顶 NAVSIM!博世最新IRL-VLA:逆强化学习重构自动驾驶VLA闭环训练
人工智能·重构·自动驾驶
tangweiguo030519878 小时前
Django REST Framework 构建安卓应用后端API:从开发到部署的完整实战指南
服务器·后端·python·django
Dfreedom.8 小时前
在Windows上搭建GPU版本PyTorch运行环境的详细步骤
c++·人工智能·pytorch·python·深度学习