使用sklearn Pipeline中的索引提取子管道时出错。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用sklearn Pipeline中的索引提取子管道时出错。相关的知识,希望对你有一定的参考价值。

我有一个机器学习管道...

logreg = Pipeline([('vect', CountVectorizer(ngram_range=(1,1))),
                   ('tfidf', TfidfTransformer(sublinear_tf=True, use_idf=True)),
                   ('clf', LogisticRegression(n_jobs=-1, C=1e2, multi_class='ovr', 
                                              solver='lbfgs', max_iter=1000))])

logreg.fit(X_train, y_train)

我想从管道的前两步提取特征矩阵。因此,我试着用原始管道的前两步提取子管道。下面的代码给出了错误。

logreg[:-1].fit(X)

TypeError: 'Pipeline' 对象没有属性 '' 。获取项目'

如何提取前两步的? Pipeline 而不需要建立一个新的管道进行数据转换?

答案

如果你只想执行部分步骤,你可以在运行时创建Pipeline。

partial_pipe = Pipeline(logreg.steps[:-1])
partial_pipe.fit(data)

piple的步骤将在 steps 管道对象的变量。

另一答案

我想你使用的是旧版本的sklearn。随着版本的 >=0.21.3你可以用你的方法对管道进行索引,应该是可以的。

你可以看到发布说明 此处

例如:

from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.datasets import fetch_20newsgroups
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split

categories = ['alt.atheism', 'talk.religion.misc']
newsgroups_train = fetch_20newsgroups(subset='train',
                                      categories=categories)

X, y = newsgroups_train.data, newsgroups_train.target

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, stratify=y)


logreg = Pipeline([('vect', CountVectorizer(ngram_range=(1, 1))),
                   ('tfidf', TfidfTransformer(sublinear_tf=True, use_idf=True)),
                   ('clf', LogisticRegression(n_jobs=-1, C=1e2,
                                              multi_class='ovr',
                                              solver='lbfgs', max_iter=1000))])
logreg.fit(X_train, y_train)

logreg[:-1].fit_transform(X_train)

# <599x15479 sparse matrix of type '<class 'numpy.float64'>'
#   with 107539 stored elements in Compressed Sparse Row format>

以上是关于使用sklearn Pipeline中的索引提取子管道时出错。的主要内容,如果未能解决你的问题,请参考以下文章

sklearn Pipeline 正确使用

sklearn.pipeline.Pileline

如何将 SHAP 与 sklearn 中的线性 SVC 模型一起使用 Pipeline?

从 sklearn 中的 Pipeline 对象返回系数

Sklearn ColumnTransformer + Pipeline = TypeError

多项式回归原理及在sklearn中的使用+pipeline