机器学习中sklearn的pipeline如何使用?

本文和大家分享的主要是机器学习中 sklearnpipeline相关内容,一起来看看吧,希望对大家学习机器学习有所帮助。

  如图所示,利用pipeline我们可以方便的减少代码量同时让机器学习的流程变得直观,

例如我们需要做如下操作,容易看出,训练测试集重复了代码,

  vect = CountVectorizer()tfidf = TfidfTransformer()clf = SGDClassifier()

  vX = vect.fit_transform(Xtrain)tfidfX = tfidf.fit_transform(vX)predicted = clf.fit_predict(tfidfX)

  # Now evaluate all steps on test setvX = vect.fit_transform(Xtest)tfidfX = tfidf.fit_transform(vX)predicted = clf.fit_predict(tfidfX)

  利用pipeline,上面代码可以抽象为,

  pipeline = Pipeline([

  ('vect', CountVectorizer()),

  ('tfidf', TfidfTransformer()),

  ('clf', SGDClassifier()),

  ])

  predicted = pipeline.fit(Xtrain).predict(Xtrain)

  # Now evaluate all steps on test set

  predicted = pipeline.predict(Xtest)

  注意,pipeline最后一步如果有predict()方法我们才可以对pipeline使用fit_predict(),同理,最后一步如果有transform()方法我们才可以对pipeline使用fit_transform()方法。

  使用pipelinecross validation

  看如下案例,即先对输入手写数字的数据进行PCA降维,再通过逻辑回归预测标签。其中我们通过pipeline

  PCA的降维维数n_components和逻辑回归的正则项C大小做交叉验证,主要步骤有:

  1. 依次实例化各成分对象如 pca = decomposition.PCA()

  2. (name, object)tuble为元素组装pipeline如 Pipeline(steps=[('pca', pca), ('logistic', logistic)])

  3. 初始化CV参数如 n_components = [20, 40, 64]

  4. 实例化CV对象如 estimator = GridSearchCV(pipe, dict(pca__n_components=n_components, logistic__C=Cs)) ,其中注意参数的传递方式,即keypipeline元素名+函数参数

  import numpy as npimport matplotlib.pyplot as pltfrom sklearn import linear_model, decomposition, datasetsfrom sklearn.pipeline import Pipelinefrom sklearn.model_selection import GridSearchCV

  logistic = linear_model.LogisticRegression()

  pca = decomposition.PCA()

  pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)])

  digits = datasets.load_digits()

  X_digits = digits.data

  y_digits = digits.target

  # Prediction

  n_components = [20, 40, 64]

  Cs = np.logspace(-4, 4, 3)

  pca.fit(X_digits)

  estimator = GridSearchCV(pipe,

  dict(pca__n_components=n_components, logistic__C=Cs))

  estimator.fit(X_digits, y_digits)

  plt.figure(1, figsize=(4, 3))

  plt.clf()

  plt.axes([.2, .2, .7, .7])

  plt.plot(pca.explained_variance_, linewidth=2)

  plt.axis('tight')

  plt.xlabel('n_components')

  plt.ylabel('explained_variance_')

  plt.axvline(

  estimator.best_estimator_.named_steps['pca'].n_components,

  linestyle=':',

  label='n_components chosen')

  plt.legend(prop=dict(size=12))

  plt.show()

 

来源:网络


你可能感兴趣的:(机器学习中sklearn的pipeline如何使用?)