用于分类的Python矢量化
作者:互联网
参见英文答案 > Scikit learn – fit_transform on the test set 1个
我目前正在尝试构建一个大约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,只进行转换!这将使字典不受训练集的影响.
标签:random-forest,python,scikit-learn,vectorization 来源: https://codeday.me/bug/20190825/1714521.html