1

我有一个 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 个。发生这种情况的可能原因是什么?

4

1 回答 1

2

因为您正在使用不同的拟合进行矢量化。当你使用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'))

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

于 2017-04-12T23:44:46.643 回答