为什么DictVectorizer会改变功能的数量?

时间:2017-04-12 23:38:49

标签: python scikit-learn categorical-data 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个功能。我使用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个。这可能会发生什么原因?

1 个答案:

答案 0 :(得分:1)

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

注意,您的模型只会知道训练集中的功能。