一、流水线工作流
在利用训练数据对模型进行拟合时已经得到一些参数,使用流水线可以避免在将模型用于新数据时重新设置这些参数。利用sklearn中的Pipline类,使得我们可以拟合出包含任意多个处理步骤的模型,并将模型用于新数据的预测。
1. # Title : TODO
2. # Objective : TODO
3. # Created by: Chen Da
4. # Created on: 2018/9/13
5.
6. import pandas as pd
7. import numpy as np
8. import os,time,sys
9.
10. #导入乳腺癌数据集
11. df = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data",header=None)
12.
13. #构造特征矩阵和类别矩阵
14. from sklearn.preprocessing import LabelEncoder
15. X = df.loc[:, 2:].values
16. y = df.loc[:, 1].values
17. le = LabelEncoder()
18. y = le.fit_transform(y) #对类别进行编码
19.
20. from sklearn.cross_validation import train_test_split
21. X_train, X_test, y_train, y_test = train_test_split(X, y,
22. test_size=0.2, random_state=0)
为了避免对训练集和测试集上的数据分别进行模型拟合、数据转换等操作,这里通过流水线将标准化、PCA和LR回归封装在一起。
1. from sklearn.preprocessing import StandardScaler
2. from sklearn.decomposition import PCA
3. from sklearn.linear_model import LogisticRegression
4. from sklearn.pipeline import Pipeline
5.
6. pip_lr = Pipeline([('std', StandardScaler()),
7. ('PCA', PCA(n_components=2)),
8. ('LR', LogisticRegression(penalty='l1', random_state=0))])
9.
10. pip_lr.fit(X_train, y_train)
11. print("Test score is {}".format(pip_lr.score(X_test, y_test)))
12.
13. Test score is 0.9385964912280702
二、k折交叉检验
通常情况下,我们将k折交叉验证用于模型的调 优,也就是找到使得模型泛化性能 最优的超参值。一旦找到了满意的超参值,我们就可以在全部的训练数据上重新训练模型, 并使用独立的测试数据集对模型性能做出最终评价。分层交叉检验是一种改进的方法,可以得到方差和偏差都较小的结果。
1. from sklearn.cross_validation import StratifiedKFold #分层k折交叉验证
2.
3. kfold = StratifiedKFold(y=y_train