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`
答案 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