为什么 DictVectorizer 会改变特征的数量?



我有一个 324 行和 35 列的数据集。我将其拆分为训练数据和测试数据:

X_train, X_test, y_train, y_test = train_test_split(tempCSV[feaure_names[0:34]], tempCSV[feaure_names[34]], test_size=0.2, random_state=32)    

这似乎工作正常,我的X_train和X_test都有 34 个功能。我用字典矢量器应用了一些进一步的转换,因为我有分类变量。

from sklearn.feature_extraction import DictVectorizer
vecS=DictVectorizer(sparse=False)
X_train=vecS.fit_transform(X_train.to_dict(orient='record'))
X_test=vecS.fit_transform(X_test.to_dict(orient='record'))

现在,当我将X_train与X_test进行比较时,前者有 46 个特征,而后者只有 44 个。发生这种情况的可能原因是什么?

因为您正在使用不同的拟合进行矢量化。当您使用fit_transform时:

X_train=vecS.fit_transform(X_train.to_dict(orient='record'))
X_test=vecS.fit_transform(X_test.to_dict(orient='record'))

这会导致两个不同拟合的矢量化器作用于您的数据集。第一个将在X_train.to_dict中的所有特征上训练,另一个将在X_test.to_dict中的所有特征上训练,你想在你的训练数据上训练一次矢量化器,然后只使用transform,因为fit_transform重新拟合

X_train=vecS.fit_transform(X_train.to_dict(orient='record'))
X_test=vecS.transform(X_test.to_dict(orient='record'))

请注意,您的模型只会知道训练集中的特征。

最新更新