Python 分类的向量化
我现在正在尝试建立一个文本分类模型,也就是把文档分成大约80个类别。当我使用随机森林算法来构建和训练模型时(先把文本转化为TF-IDF矩阵),效果还不错。但是,当我引入新数据时,构建随机森林时用到的那些词,可能和训练集里的词并不完全一样。这就出现了问题,因为我在训练集里的特征数量和测试集里的特征数量不一样(也就是说,训练集的维度比测试集少)。
####### 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())
我该如何创建一个可以处理分类的随机森林模型,让它能包含那些在训练时没有见过的新特征(词)呢?
2 个回答
3
你不能在测试集里加入训练集没有的新的特性。模型是根据一套特定的词汇表进行训练的,这套词汇表在训练、验证、测试和实际应用中都必须保持一致。而且,你的特征向量中单词的位置也不能改变。
你应该把所有的数据放在一个大的矩阵里,然后再把行分成训练集和测试集。这样可以确保训练集和测试集使用的是相同的特征。
4
不要在未见过的数据上使用 fit_transform
,只用 transform
!这样可以保持来自训练集的字典。