前端之家收集整理的这篇文章主要介绍了
sklearn 中的 Pipeline 机制,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
管道机制在机器学习算法中得以应用的根源在于,参数集在新数据集(比如测试集)上的重复使用。
管道机制实现了对全部步骤的流式化封装和管理(streaming workflows with pipelines)。
注意:管道机制更像是编程技巧的创新,而非算法的创新。
接下来我们以一个具体的例子来演示sklearn库中强大的Pipeline用法:
1.加载数据集
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
from pandas
as pd
from sklearn.cross_validation
import train_test_split
from sklearn.preprocessing
import LabelEncoder
df = pd.read_csv(
'https://archive.ics.uci.edu/ml/machine-learning-databases/'
@H_
404_103@'breast-cancer-wisconsin/wdbc.data',header=
None)
X,y = df.values[:,
2:],df.values[:,102);
Box-sizing: border-
Box;">1]
encoder = LabelEncoder()
y = encoder.fit_transform(y)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=
.2,random_state=
0)
2.构思算法的流程
可放在Pipeline中的步骤可能有:
- 特征标准化是需要的,可作为第一个环节
- 既然是分类器,classifier也是少不了的,自然是最后一个环节
- 中间可加上比如数据降维(PCA)
- 。。。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
import StandardScaler
from sklearn.decomposition
import PCA
from sklearn.linear_model
import LogisticRegression
from sklearn.pipeline
import Pipeline
pipe_lr = Pipeline([(@H_
404_103@'sc',StandardScaler()),(@H_
404_103@'pca',PCA(n_components=
2)),0);
Box-sizing: border-
Box;">'clf',LogisticRegression(random_state=
1))
])
pipe_lr.fit(X_train,y_train)
print(@H_
404_103@'Test accuracy: %.3f' % pipe_lr.
score(X_test,y_test))
Pipeline对象接受二元tuple构成的list,每一个二元 tuple 中的第一个元素为 arbitraryidentifier string,我们用以获取(access)Pipeline object 中的 individual elements,二元 tuple 中的第二个元素是 scikit-learn与之相适配的transformer 或者 estimator。
1
Pipeline([(
1))])
3.Pipeline执行流程的分析
Pipeline 的中间过程由scikit-learn相适配的转换器(transformer)构成,最后一步是一个estimator。比如上述的代码,StandardScaler和PCAtransformer构成intermediate steps,LogisticRegression 作为最终的estimator。
当我们执行pipe_lr.fit(X_train,y_train)
时,首先由StandardScaler在训练集上执行fit和transform方法,transformed后的数据又被传递给Pipeline对象的下一步,也即PCA()。和StandardScaler一样,PCA也是执行fit和transform方法,最终将转换后的数据传递给LosigsticRegression。整个流程如下图所示:
4.pipeline 与深度神经网络的multi-layers
只不过步骤(step)的概念换成了层(layer)的概念,甚至the last step 和 输出层的含义都是一样的。
只是抛出一个问题,是不是有那么一丢丢的相似性?