scikit基础与机器学习入门(9)Pipeline和FeatureUnion的构建——构筑有条理的机器学习系统
Pipeline训练过程
第一级进行数据预处理,第二级完成数据降维,第三级实现分类、回归或聚类功能。
管道中除最后一个之外的所有estimators都必须是变换器(transformers),最后一个estimator可以是任意类型(transformer,classifier,regresser),管道本身可以看成一个超级estimater,可用GridSearchCV等方式进行超参数优化。

代码实现
pipe = Pipeline([('scaler',preprocessing.MinMaxScaler()),('pca',PCA()),
('net',ElasticNetCV())])
这里第一个参数是管道各环节的名称,第二个参数是类型的定义
此时参数既可以在管道定义时确定,又可以等到管道设置完成时通过pipe.set_params定义
# 将boston房价问题的数据预处理,数据降维和回归分析过程构建成管道
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.decomposition import PCA
from sklearn.linear_model import ElasticNetCV
from sklearn.pipeline import Pipeline
boston = datasets.load_boston()
X_train,X_test,y_train,y_test = train_test_split(boston.data,boston.target,
test_size = 1/3,random_state = 0)
# 构建管道,使用make_pipeline函数可以更便捷地构建管道
pipe = Pipeline([('scaler',preprocessing.MinMaxScaler()),('pca',PCA()),
('net',ElasticNetCV())])
# 可以在管道定义时设置参数,也可以统一设置参数,注意参数的名字的调整方式
pipe.set_params(scaler__feature_range = (0,1),pca__n_components=6)
# 用数据喂养管道
pipe.fit(X_train,y_train)
# 使用管道进行预测
print(pipe.predict(X_test))
# 查看参数
print(pipe.get_params())
#查看模型在训练集的得分
print(pipe.score(X_train,y_train))
#查看模型在测试集的得分
pipe.score(X_test,y_test)
使用特征联合
Pipeline是estimater的串联,而FeatureUnion则是estimater的并联。但是FeatureUnion并联的只能transformer转换器.
FeatureUnion 合并了多个转换器对象形成一个新的转换器,该转换器合并了他们的输出。输出的样本向量被横向连接成更长的向量。
可以结合FeatureUnion 和 Pipeline 来创造出更加复杂的模型。
如下面的代码,就是通过不同的PCA方法分别生成了三个和五个特征生成了数据集并拼接
from sklearn import datasets
from sklearn.pipeline import FeatureUnion
from sklearn.decomposition import PCA
from sklearn.decomposition import KernelPCA
boston = datasets.load_boston()
united = FeatureUnion([('linear_pca',PCA(n_components = 3)),
('kernel_pca',KernelPCA(n_components = 5))])
united.fit_transform(boston.data).shape
很喜欢听到一个老师说的“半年理论”,现在做出的努力,一般要在半年的沉淀之后,才能出结果,所以在遇到瓶颈之时,不妨再努力半年

浙公网安备 33010602011771号