【问题标题】:How to analyse the intermediate steps of sklearn-pipeline? [duplicate]如何分析sklearn-pipeline的中间步骤? [复制]
【发布时间】:2019-06-17 08:42:23
【问题描述】:

我正在使用 sklearn 将文本分类。我正在使用 CountVectorizer 和 TFIDFTransformer 创建稀疏矩阵。

我正在对 CountVectorizer 标记器中使用的 customtokenize_and_stem 函数中的字符串执行几个预处理步骤。

from sklearn.pipeline import Pipeline
from sklearn.svm import LinearSVC
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer

SVM = Pipeline([('vect', CountVectorizer(max_features=100000,\
                                         ngram_range= (1, 2),stop_words='english',tokenizer=tokenize_and_stem)),\
                         ('tfidf', TfidfTransformer(use_idf= True)),\
                         ('clf-svm', LinearSVC(C=1)),])

我的问题是,是否有任何简单的方法可以查看/存储 Pipeline 步骤 1/2 的输出以分析进入 svm 的数组类型?

【问题讨论】:

标签: python python-3.x machine-learning scikit-learn


【解决方案1】:

您可以通过类似这样的方式获得中间步骤输出。

基于source code

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline

pipeline = Pipeline([('vect', TfidfVectorizer(ngram_range= (1, 2),stop_words='english')),\
                     ('clf-svm', LinearSVC(C=1)),])
X= ["I want to test this document", "let us see how it works", "I am okay and you ?"]

pipeline.fit(X,[0,1,1])

print(pipeline.named_steps['vect'].get_feature_names())

['document', 'let', 'let works', 'okay', 'test', 'test document', 'want', 'want test', 'works']    

#Here is where you can get the output of intermediate steps
Xt = X

for name, transform in pipeline.steps[:-1]:
    if transform is not None:
        Xt = transform.transform(Xt)
        
print(Xt)



  (0, 7)    0.4472135954999579
  (0, 6)    0.4472135954999579
  (0, 5)    0.4472135954999579
  (0, 4)    0.4472135954999579
  (0, 0)    0.4472135954999579
  (1, 8)    0.5773502691896257
  (1, 2)    0.5773502691896257
  (1, 1)    0.5773502691896257
  (2, 3)    1.0

【讨论】:

    【解决方案2】:

    来自the docs

    named_steps : 束对象,具有属性访问权限的字典 通过用户名访问任何步骤参数的只读属性。 键是步骤名称,值是步骤参数。

    您应该能够像访问字典一样访问元素

    SVM.named_steps['vect'] 
    

    【讨论】:

    • 这是我在运行上述代码后得到的输出,不确定它会有什么帮助:CountVectorizer(analyzer='word', binary=False, decode_error='strict', dtype=, encoding='utf-8', input='content', lowercase=True, max_df=1.0, max_features=100000, min_df=1, ngram_range=(1, 2), preprocessor=None, stop_words =None,strip_accents=None,token_pattern='(?u)\\b\\w\\w+\\b',tokenizer=,词汇=None)
    • 抱歉,我误解了这个问题。那就是存储在管道中的 CountVectorizer 对象。您可以像往常一样访问它的任何属性。例如,SVM.named_steps['vect'].vocabulary_。如果您只是想知道转换器在每个步骤中对您的数据做了什么,那么您必须将其从管道中取出并在您的数据上执行transform。管道的想法是它在一个步骤中完成所有工作,没有输出。
    • 如果你想要输出,你可以使用this answer的解决方案
    猜你喜欢
    • 1970-01-01
    • 2021-01-23
    • 2019-08-21
    • 2016-07-15
    • 2021-08-29
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多