Machine Learning-模型评估与调参 ——管道工作流

机器学习系列专栏

选自 Python-Machine-Learning-Book On GitHub

作者:Sebastian Raschka

翻译&整理 By Sam

之前有讲到过模型调优的思想,大家看完应该对其有一定的了解,今天的话就写一下模型调优在实际中如何操作,以及code的实现,由于时间有限,每天就更新一丢丢,最后进行整合。上篇内容可点击下面链接。

今天先介绍一下管道工作流的操作。

“管道工作流”这个概念可能有点陌生,其实可以理解为一个容器,然后把我们需要进行的操作都封装在这个管道里面进行操作,比如数据标准化、特征降维、主成分分析、模型预测等等,下面还是以一个实例来讲解。

数据导入与预处理

本次我们导入一个二分类数据集 Breast Cancer Wisconsin,它包含569个样本。首列为主键ID,第2列为类别值(M=恶性肿瘤,B=良性肿瘤),第3-32列是实数值的特征。

先导入数据集:

 1# 导入相关数据集
 2import pandas as pd
 3import urllib
 4try:
 5    df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases'
 6                     '/breast-cancer-wisconsin/wdbc.data', header=None)
 7except urllib.error.URLError:
 8    df = pd.read_csv('https://raw.githubusercontent.com/rasbt/'
 9                     'python-machine-learning-book/master/code/'
10                     'datasets/wdbc/wdbc.data', header=None)
11print('rows, columns:', df.shape)
12df.head()

640?wx_fmt=png

使用我们学习过的LabelEncoder来转化类别特征:

1from sklearn.preprocessing import LabelEncoder
2X = df.loc[:, 2:].values
3y = df.loc[:, 1].values
4le = LabelEncoder()
5# 将目标转为0-1变量
6y = le.fit_transform(y)
7le.transform(['M', 'B'])

划分训练验证集:

1## 创建训练集和测试集
2from sklearn.model_selection import train_test_split
3X_train, X_test, y_train, y_test = \
4    train_test_split(X, y, test_size=0.20, random_state=1)

使用管道创建工作流

很多机器学习算法要求特征取值范围要相同,因此需要对特征做标准化处理。此外,我们还想将原始的30维度特征压缩至更少维度,这就需要用到主成分分析,要用PCA来完成,再接着就可以进行logistic回归预测了。

Pipeline对象接收元组构成的列表作为输入,每个元组第一个值作为变量名,元组第二个元素是sklearn中的transformer或Estimator。管道中间每一步由sklearn中的transformer构成,最后一步是一个Estimator。

本次数据集中,管道包含两个中间步骤:StandardScaler和PCA,其都属于transformer,而逻辑斯蒂回归分类器属于Estimator。

本次实例,当管道pipe_lr执行fit方法时:

1)StandardScaler执行fit和transform方法;

2)将转换后的数据输入给PCA;

3)PCA同样执行fit和transform方法;

4)最后数据输入给LogisticRegression,训练一个LR模型。

对于管道来说,中间有多少个transformer都可以。管道的工作方式可以用下图来展示(一定要注意管道执行fit方法,而transformer要执行fit_transform):

640?wx_fmt=png

上面的代码实现如下:



你可能感兴趣的:(Machine Learning-模型评估与调参 ——管道工作流)