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

Why would DictVectorizer change the number of features?

我有一个 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 个特征。我使用 DictVectorizer 应用了一些进一步的转换,因为我有分类变量。

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 refits:

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

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