我有一个 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'))
请注意,您的模型只会了解训练集中的特征。
关于python - 为什么 DictVectorizer 会改变特征数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43381295/