页面树结构

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 : http://www.apachecn.org/member/209.html


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

管道:链接估计

Pipeline可用于将多个估计量链接到一个。这是有用的,因为处理数据通常有固定的步骤顺序,例如特征选择,归一化和分类。Pipeline在这里有两个目的:

便捷:你只需要在你的数据上调用一次fitpredict,来匹配估计器的整个序列。

联合参数选择:您可以同时对流水线中所有估计量的参数进行网格搜索

流水线中的所有估计器,除了最后一个,都必须是变压器(即必须有一个transform方法)。最后的估计可以是任何类型(变压器,分类器等)。

用法

Pipeline是使用(key, value)对的列表构建的,其中key是包含要给出此步骤的名称的字符串,value是估计器对象:

>>> from sklearn.pipeline import Pipeline
>>> from sklearn.svm import SVC
>>> from sklearn.decomposition import PCA
>>> estimators = [('reduce_dim', PCA()), ('clf', SVC())]
>>> pipe = Pipeline(estimators)
>>> pipe 
Pipeline(steps=[('reduce_dim', PCA(copy=True, iterated_power='auto',
n_components=None, random_state=None, svd_solver='auto', tol=0.0,
whiten=False)), ('clf', SVC(C=1.0, cache_size=200, class_weight=None,
coef0=0.0, decision_function_shape=None, degree=3, gamma='auto',
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False))])

效用函数 make_pipeline 是构建管道的简写; 它需要可变数量的估计器并返回管道,自动填写名称:

>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.naive_bayes import MultinomialNB
>>> from sklearn.preprocessing import Binarizer
>>> make_pipeline(Binarizer(), MultinomialNB()) 
Pipeline(steps=[('binarizer', Binarizer(copy=True, threshold=0.0)),
                ('multinomialnb', MultinomialNB(alpha=1.0,
                                                class_prior=None,
                                                fit_prior=True))])

管道的估计量作为列表存储在steps属性中:

>>> pipe.steps[0]
('reduce_dim', PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,
  svd_solver='auto', tol=0.0, whiten=False))

作为一个dictnamed_steps

>>> pipe.named_steps['reduce_dim']
PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,
  svd_solver='auto', tol=0.0, whiten=False)

可以使用<estimator>__<parameter>语法访问流水线中的估计器的参数 :

>>> pipe.set_params(clf__C=10) 
Pipeline(steps=[('reduce_dim', PCA(copy=True, iterated_power='auto',
    n_components=None, random_state=None, svd_solver='auto', tol=0.0,
    whiten=False)), ('clf', SVC(C=10, cache_size=200, class_weight=None,
    coef0=0.0, decision_function_shape=None, degree=3, gamma='auto',
    kernel='rbf', max_iter=-1, probability=False, random_state=None,
    shrinking=True, tol=0.001, verbose=False))])

这对于进行网格搜索尤其重要:

>>> from sklearn.model_selection import GridSearchCV
>>> params = dict(reduce_dim__n_components=[2, 5, 10],
...               clf__C=[0.1, 10, 100])
>>> grid_search = GridSearchCV(pipe, param_grid=params)

单独的步骤也可以被替换为参数,并且非最终步骤可以被忽略,将它们设置为None

>>> from sklearn.linear_model import LogisticRegression
>>> params = dict(reduce_dim=[None, PCA(5), PCA(10)],
...               clf=[SVC(), LogisticRegression()],
...               clf__C=[0.1, 10, 100])
>>> grid_search = GridSearchCV(pipe, param_grid=params)

例子:

也可以看看:

注释

在管道上调用适配与依次调用每个估计器的拟合相同,转换输入并将其传递到下一步。 流水线具有管道中最后一个估计器的所有方法,即如果最后一个估计器是分类器,则可以将流水线用作分类器。 如果最后一个估计器是一个变压器,那么管道也是如此。

 

FeatureUnion:复合特征空间

将几个变压器对象组合成一个组合其输出的新变压器。A FeatureUnion需要一个变压器对象的列表。在装配过程中,每个都适合数据。对于变换数据,并联应用变压器,它们输出的采样矢量端对端连接成较大的矢量。

FeatureUnion具有相同的目的Pipeline- 方便和联合参数估计和验证。

FeatureUnion并且Pipeline可以组合起来创建复杂的模型。

 

FeatureUnion 将几个变压器对象组合成一个组合其输出的新变压器。  FeatureUnion 将列出变压器对象。 在装配过程中,每个都适合数据。 对于变换数据,并联应用变压器,它们输出的采样矢量端对端连接成较大的矢量。
FeatureUnion 具有与管道相同的Pipeline - 方便和联合参数估计和验证。
FeatureUnion Pipeline 可以组合创建复杂的模型。
FeatureUnion无法检查两个变压器是否可能产生相同的功能,只有在功能集不相交时才产生联合,并确保它们是来电者的责任。)

 

4.1.2.1。用法

FeatureUnion 是使用(key, value)对的列表构建的,其中key是要给予给定转换的名称(任意字符串,仅用作标识符),value是估计对象:

>>> from sklearn.pipeline import FeatureUnion
>>> from sklearn.decomposition import PCA
>>> from sklearn.decomposition import KernelPCA
>>> estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())]
>>> combined = FeatureUnion(estimators)
>>> combined 
FeatureUnion(n_jobs=1, transformer_list=[('linear_pca', PCA(copy=True,
    iterated_power='auto', n_components=None, random_state=None,
    svd_solver='auto', tol=0.0, whiten=False)), ('kernel_pca',
    KernelPCA(alpha=1.0, coef0=1, copy_X=True, degree=3,
    eigen_solver='auto', fit_inverse_transform=False, gamma=None,
    kernel='linear', kernel_params=None, max_iter=None, n_components=None,
    n_jobs=1, random_state=None, remove_zero_eig=False, tol=0))],
    transformer_weights=None)

像管道一样,特征联合会有一个名为的简化构造函数 make_union,它不需要组件的显式命名。

喜欢Pipeline,单独的步骤可能会被替换set_params,并被设置为None

>>> combined.set_params(kernel_pca=None) 
FeatureUnion(n_jobs=1, transformer_list=[('linear_pca', PCA(copy=True,
      iterated_power='auto', n_components=None, random_state=None,
      svd_solver='auto', tol=0.0, whiten=False)), ('kernel_pca', None)],
    transformer_weights=None)

例子:

  • 无标签