我已经完成了以下工作:
最大特征=无,最小df=2,ngram_范围=(1,3)
1-如何打印此管道的输出?我是说(1-3克) 如果我想自己生成二元图,最好的解决方案是什么?
2-如果我想添加一个像min TF>;1这样的约束?
以下是我的配置:
from sklearn.naive_bayes import MultinomialNB,BernoulliNB,GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.pipeline import Pipeline
pipeline = Pipeline([
('count_vectorizer', TfidfVectorizer(max_features=None, min_df=2,ngram_range=(1, 3),token_pattern=r'\s',analyzer = 'word' ,lowercase=False, stop_words=StopWordsList)),
('tfidf_transformer', TfidfTransformer(norm='l2', smooth_idf=False, sublinear_tf=False, use_idf=True)), ('classifier', MultinomialNB() )# SVC(kernel='rbf', probability=True) )
])
您可以通过
named_steps
从管道中获取特定元素。在1.您可以访问“count_vectorizer”并打印
idf_
属性,该属性表示“已学习的idf向量(全局术语权重)”pipeline.named_steps['count_vectorizer'].idf_
1.1当然,你可以打印词汇表,这会给你一个字典,其中ngram和它们的列对应于所学的idf向量
1.2我不会自己生成一个bigram。您可以随时使用pipeline
^{pr2}$set_params
函数更改管道参数。在您的情况下:请注意参数是如何构造的。所以您的
count_vectorizer__ngram_range
有一个前缀count_vectorizer
,这是您在管道中为确切的元素使用的名称。它后面是__
标记,这意味着下一步是该元素的参数名,在本例中,您选择的是ngram_range
。在但是如果您想显式地选择要计数的单词,可以通过
vocabulary
参数来完成。从文档“词汇表:映射或iterable,可选 一种映射(例如dict),其中键是项,值是特征矩阵中的索引,或者是iterable over terms。如果没有给出,则根据输入文档确定词汇表。。所以你可以创建类似{'awesome unicorns':0, 'batman forever':1}
的东西,它只会在你的bigrams的“可怕的独角兽”和“永远的蝙蝠侠”上执行tf-idf;)2。你可以像我们在1.2中那样“动态”添加约束
pipeline.set_params(count_vectorizer__min_df=2)
。虽然我看到您已经在TfidfVectorizer
初始参数中设置了这个变量。所以我不确定我是否理解你的问题。在不要忘记使用一些数据运行管道,否则就没有任何词汇表可供打印。例如,我加载了大约20个新闻组数据来执行测试,然后安装了您的管道。以防万一对你有用:
相关问题 更多 >
编程相关推荐