2017-04-12 81 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

謝謝!這使它工作。說得通。 –

相關問題