在CountVectorizer/TfidfVectorizer变为(40845 X 218904)(unigram)后,我遇到了一个只有2个类和训练数据集矩阵大小的文档分类问题。我想使用TruncatedVD;然而,CountVectorizer/TfidfVectorizer似乎会产生负值。我想知道为什么以及如何避免负值。
tsvd = TruncatedSVD(10000, algorithm="randomized")
features = [
dict(name="count_ng1",
feat=CountVectorizer(tokenizer=tokenizer, ngram_range=(1,1))),
dict(name="tfidf_ng1",
feat=TfidfVectorizer(tokenizer=tokenizer, ngram_range=(1,1))),
]
for data in datas:
(D_train, y_train, d_test, y_test) = g.get_train_test(**data['params'])
for feat in features:
x_train = feat['feat'].fit_transform(d_train)
x_test = feat['feat'].transform(d_test)
X_trainSVD = tsvd.fit_transform(x_train)
X_testSVD = tsvd.transform(x_test)
TruncatedSVD
处理负值应该没有问题。
CountVectorizer
/TfidfVectorizer
不应产生负值。如果他们真的这么做了,那很可能是一个bug。
如果您将问题更新为:,我将更新我的答案
- 为我们提供一个有效的复制脚本,如果可能的话,最好是在自包含的数据上(例如,将
d_train
/d_test
定义为Python字符串的小列表,可以在不访问真实数据的情况下复制问题) - 修复缩进,以便可以复制和粘贴代码片段并运行它
- 提供完整回溯时附带的错误消息