2017-04-12 80 views
1

我有一个324行和35列的数据集。我把它分成训练和测试数据:为什么DictVectorizer会更改特征的数量?

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

因为您正在使用不同的身材进行矢量化。作用于你的数据集

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

导致两种不同装配vectorizers:当您使用fit_transform。第一次将所有的功能在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')) 

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

+0

谢谢!这使它工作。说得通。 –

相关问题