Python矢量化分类



我目前正在尝试构建一个大约有80个类的文本分类模型(文档分类)。当我使用随机森林(在将文本向量化为TF-IDF矩阵之后)构建和训练模型时,模型工作得很好。然而,当我引入新数据时,我用来构建RF的相同单词不一定与训练集相同。这是一个问题,因为我的训练集与测试集的特征数量不同(所以训练集的维度小于测试集)。

####### Convert bag of words to TFIDF matrix
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(data)
print tfidf_matrix.shape
## number of features = 421

####### Train Random Forest Model
clf = RandomForestClassifier(max_depth=None,min_samples_split=1, random_state=1,n_jobs=-1)
####### k-fold cross validation
scores = cross_val_score(clf, tfidf_matrix.toarray(),labels,cv=7,n_jobs=-1)
print scores.mean()

### this is the new data matrix for unseen data
new_tfidf = tfidf_vectorizer.fit_transform(new_X)
### number of features = 619

clf.fit(tfidf_matrix.toarray(),labels)
clf.predict(new_tfidf.toarray())

我如何着手创建一个工作RF模型,用于分类,该模型将包含在训练中未见过的新特征(单词)?

对未见过的数据不要调用fit_transform,只调用transform !这将使字典远离训练集。

您不能将不属于您的训练集的新特征引入测试集。模型在特定的术语字典上进行训练,并且必须在训练、验证、测试和生产中使用相同的术语字典。此外,你的特征向量中的词的索引也不能改变。

您应该使用所有数据创建一个大矩阵,然后将行分成训练集和测试集。这将保证您在训练和测试中拥有相同的特性集。

相关内容

  • 没有找到相关文章

最新更新