2017-04-12 5 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_test에 X_train 비교, 전자는 (46 개) 기능을 가지고 있으며,이 일어날 수있는 몇 가지 가능한 이유는 무엇입니까 후자는 (44)이있다?

답변

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')) 

을이 다르게 장착 vectorizers 결과는 데이터 세트에 작용하는 것이다. , X_train.to_dict의 모든 기능을 훈련 할 것이다 제 X_test.to_dict의 모든 기능에서 다른, 당신은 당신의 훈련 데이터 한 번 기차중인 벡터를 원하는 만 transform을 사용하기 때문에 fit_transformrefits :

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

참고로, 모델에는 교육 세트의 기능 만 알 수 있습니다.

+0

감사합니다. 그게 효과가있었습니다. 말이된다. –