Python TFIDF矢量器管道上具有不同ngram范围的字和字符ngram
我正在尝试运行一个包含3到5个字符n-gram和1到2个单词n-gram的管道,使用管道和GridSearch,但是我得到了一些错误。以下是完整的代码:Python TFIDF矢量器管道上具有不同ngram范围的字和字符ngram,python,scikit-learn,text-mining,tf-idf,grid-search,Python,Scikit Learn,Text Mining,Tf Idf,Grid Search,我正在尝试运行一个包含3到5个字符n-gram和1到2个单词n-gram的管道,使用管道和GridSearch,但是我得到了一些错误。以下是完整的代码: def prediction(dataFrame): allText = [] for index, row in dataFrame.iterrows(): allText.append(res) pipeline = Pipeline([ ('vect', TfidfVect
def prediction(dataFrame):
allText = []
for index, row in dataFrame.iterrows():
allText.append(res)
pipeline = Pipeline([
('vect', TfidfVectorizer(min_df=2,analyzer="char",sublinear_tf=True,max_df=0.01,ngram_range=(3,5))),
('vec', TfidfVectorizer(min_df=2,sublinear_tf=True,analyzer="word",max_df=0.01,ngram_range=(1,2))),
('clf', LinearSVC()),
])
parameters = [{
'clf__C': [0.1, 0.5, 1, 1.5, 5]
}]
grid_search = GridSearchCV(pipeline, parameters,scoring="accuracy",cv=5)
grid_search.fit(allText,dataFrame.gender)
print("Best parameter (CV score=%0.3f):" % grid_search.best_score_)
我在FeatureExtraction上得到了一些像“AttributeError:lower not found”这样的EROR,而且所有的文本看起来都是正确的
这种情况下有什么问题?使用
管道
,可以链接两个TfidfVectorizer
矢量器,这样在第一个矢量器之后就可以获得数字特征,然后这些特征被传递到第二个矢量器中。但您的目标是连接两个不同的TfidfVectorizer
特征矩阵。管道按顺序应用变换器(以及最终估计器,如果给定),同时单独运行所有变换器,并将结果连接到单个特征空间中
解决方案:
从sklearn.feature\u extraction.text导入TfidfVectorizer
从sklearn.pipeline导入功能联合,管道
从sklearn.svm导入LinearSVC
#将管道替换为以下内容:
char\u tfidf=tfidf矢量器(analyzer='char',ngram\u范围=(3,5))
word\u tfidf=tfidf矢量器(analyzer='word',ngram\u范围=(1,2))
tfidf=FeatureUnion([('char',char\u tfidf),('word',word\u tfidf)])
管道=管道([('tfidf',tfidf),('clf',LinearSVC())]
它可以工作!谢谢