我有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个。这可能会发生什么原因?
答案 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'))
注意,您的模型只会知道训练集中的功能。