“ CountVectorizer”对象不可下标吗?

时间:2019-08-21 05:51:41

标签: python-3.x nlp data-science

from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
pipe = Pipeline([('count_vec', CountVectorizer()),    
                 ('lr', LogisticRegression(solver='liblinear'))])
pipe_params = {'remove_stopwords': [None, 'english'],'ngram_vec': [(1,1,)(2,2), (1,3)],'lr__C': [0.01, 1]}
gs = GridSearchCV(pipe, param_grid=pipe_params, cv=3)
gs_fit=gs.fit(count_vec['label'])
pd.df(gs_fit.cv_results).sort_values('mean_test_score',ascending=False).head

`我运行这段代码

TypeError                                 Traceback (most recent call last)
<ipython-input-20-e9e666a843e5> in <module>
     11 
     12 gs = GridSearchCV(pipe, param_grid=pipe_params, cv=3)
---> 13 gs_fit=gs.fit(count_vec['label'])
     14 pd.df(gs_fit.cv_results).sort_values('mean_test_score',ascending=False).head()
     15 

TypeError: 'CountVectorizer' object is not subscriptable`

1 个答案:

答案 0 :(得分:0)

根据sklearn的文档,CountVectorizer生成一个稀疏矩阵。

This implementation produces a sparse representation of the counts using scipy.sparse.csr_matrix.`

我知道您在这里做什么,但是CountVectorizer的输出会产生这样的内容

array([1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2],
  dtype=int64)

如您所见,它没有column s或row s。因此,count_vec['label']不是有效的呼叫。

fit建立模型,您将需要使用正在使用的数据集中的labels列。由于Gridsearch正在使用pipe,因此您不必向其提供帖子CountVectorized的数据,而可以向GridSearch提供原始的labels。 / p>

Sklearn CountVectorizer:https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html