我目前有一个小型的tf-idf功能训练集(每个单词约250列),我手动将它们手动标记为1和0。训练集很小,主要是因为要花更多时间标记更多数据,我想看看模型在这个小训练集上的表现如何。因为数据很小,所以我使用tf-idf创建了功能并将其转换为pandas数据框。举个简单的例子,我可以更好地了解我所谈论的内容,比如说在培训中我只有:
Hello great car target variable
great car 0 .35 .25 1
Hello great car .40 .15 .10 0
现在,我对测试集进行了完全相同的操作。但是,测试集与训练集相比
car great plane boring yoo nice dude man jump fancy japan target
car japan .53 0 0 0 0 0 0 0 0 0 .60 1
man car yoo .53 0 0 0 .30 0 0 .15 0 0 0 0
jump 0 0 0 0 0 0 0 0 .45 0 0 1
实际上,上述测试集的行数比训练集大了数千倍,因此,由于它,它具有更多的功能(我的字词是iff-idfed)。现在,因为是这样,所以我只能将tf-idf放入稀疏矩阵而不是pandas数据框中,因此输出当前显示:
<1383329x27870 sprase matrix fo type ',class 'numpy.float'>' with 15874611 stored elements in Compressed Sparse Row format>
我唯一的问题是,为了.fit()和.predict(),机器学习模型的训练和测试集中需要相等数量的输入x功能,所以我要做的就是摆脱所有测试集中没有的功能(一吨)不在训练集中,但是我不确定如何比较稀疏矩阵和熊猫数据框?通常,当我比较熊猫数据帧时,我只是做一个x ['y']。isin [a ['b']]并过滤掉这两个共同的所有列。比较熊猫数据框和稀疏矩阵时,不确定如何做同样的事情?
答案 0 :(得分:2)
看,这是您如何做想做的草图:
documents = [
'the quick brown fox jumped over the lazy dog',
'the name of the game is pain',
'what is in a name? Is a rose as sweet by any other name',
'the world is a world of many people',
'i am running out of things to write',
'yeah now I am totally out of things to write'
]
from sklearn.feature_extraction.text import TfidfVectorizer
# train test splitting, of course, you wouldn't do it this way...
import random
random.shuffle(documents)
train, test = documents[:len(documents)//2], documents[len(documents)//2:]
vectorizer = TfidfVectorizer()
Xtrain = vectorizer.fit_transform(train)
Xtest = vectorizer.transform(test)
当然,这不是您实际进行火车测试拆分/交叉验证的方式。有各种各样的方法可以解决这个问题,这里只是one of many guides。
好吧,您将执行以下操作:
from sklearn.fancy_model import FancyModel
model = FancyModel(param=42).fit(Xtrain, Ytrain) # assuming you have your labels
yhat_train = model.predict(Xtrain)
yhat_test = model.predict(Xtest)
# compare your metric based on yhat_train and yhat_test....