[PYTHON] 훈련 및 테스트 데이터에서 동일한 더미 변수 유지
PYTHON훈련 및 테스트 데이터에서 동일한 더미 변수 유지
파이썬에서 두 개의 별도의 교육 및 테스트 세트를 사용하여 예측 모델을 구축하고 있습니다. 교육 데이터에는 우편 번호, [91521,23151,12355, ...]와 같은 숫자 유형의 범주 형 변수와 도시 [ 'Chicago', 'New York', 'Los Angeles', ...].
데이터를 학습하기 위해, 먼저 'pd.get_dummies'를 사용하여이 변수의 더미 변수를 얻은 다음 모델에 변형 된 학습 데이터를 맞 춥니 다.
테스트 데이터에서 동일한 변형을 수행하고 훈련 된 모델을 사용하여 결과를 예측합니다. 그러나 오류가 발생했습니다. 'ValueError : 모델의 기능 수가 입력과 일치해야합니다. 모델 n_features는 1487이고 입력 n_features는 1345 '입니다. 그 이유는 테스트 데이터에 '도시'와 '우편 번호'가 적기 때문에 더미 변수가 적기 때문입니다.
이 문제를 어떻게 해결할 수 있습니까? 예를 들어 'OneHotEncoder'는 모든 숫자 형식의 범주 형 변수 만 인코딩합니다. 'DictVectorizer ()'는 모든 문자열 유형의 범주 형 변수 만 인코딩합니다. 온라인에서 검색하고 몇 가지 유사한 질문을 볼 수 있지만 그 중 아무도 내 질문에 실제로 답하지 않습니다.
scikit-learn을 사용하여 범주 적 기능 처리
https://www.quora.com/If-the-training-dataset-has-more-variables-than-the-test-dataset-what-does-one-do
https://www.quora.com/What-is-the-best-way-to-do-a-binary-one-hot-one-of-K-coding-in-Python
해결법
-
==============================
1.누락 된 열을 가져 와서 테스트 데이터 세트에 추가 할 수도 있습니다.
누락 된 열을 가져 와서 테스트 데이터 세트에 추가 할 수도 있습니다.
# Get missing columns in the training test missing_cols = set( train.columns ) - set( test.columns ) # Add a missing column in test set with default value equal to 0 for c in missing_cols: test[c] = 0 # Ensure the order of column in the test set is in the same order than in train set test = test[train.columns]
또한이 코드는 테스트 데이터 집합의 범주에서 생성되었지만 학습 데이터 집합에없는 열이 제거되도록합니다.
-
==============================
2.기차 및 테스트 데이터 세트에서 동일한 지형지 물의 이름을 가지고 있다고 가정합니다. 기차와 테스트에서 연결된 데이터 세트를 생성하고 연결된 데이터 세트에서 인형을 얻은 다음이를 분리하여 테스트하고 다시 테스트 할 수 있습니다.
기차 및 테스트 데이터 세트에서 동일한 지형지 물의 이름을 가지고 있다고 가정합니다. 기차와 테스트에서 연결된 데이터 세트를 생성하고 연결된 데이터 세트에서 인형을 얻은 다음이를 분리하여 테스트하고 다시 테스트 할 수 있습니다.
다음과 같이 할 수 있습니다.
import pandas as pd train = pd.DataFrame(data = [['a', 123, 'ab'], ['b', 234, 'bc']], columns=['col1', 'col2', 'col3']) test = pd.DataFrame(data = [['c', 345, 'ab'], ['b', 456, 'ab']], columns=['col1', 'col2', 'col3']) train_objs_num = len(train) dataset = pd.concat(objs=[train, test], axis=0) dataset_preprocessed = pd.get_dummies(dataset) train_preprocessed = dataset_preprocessed[:train_objs_num] test_preprocessed = dataset_preprocessed[train_objs_num:]
결과적으로 열차 및 테스트 데이터 세트의 기능 수가 동일 해집니다.
-
==============================
3.
train2,test2 = train.align(test, join='outer', axis=1, fill_value=0)
train2와 test2는 같은 열을 가지고 있습니다. Fill_value는 누락 된 열에 사용할 값을 나타냅니다.
-
==============================
4.이것은 다소 오래된 질문이지만 scikit learn API 사용을 목표로한다면 다음 DummyEncoder 클래스를 사용할 수 있습니다. https://gist.github.com/psinger/ef4592492dc8edf101130f0bf32f5ff9
이것은 다소 오래된 질문이지만 scikit learn API 사용을 목표로한다면 다음 DummyEncoder 클래스를 사용할 수 있습니다. https://gist.github.com/psinger/ef4592492dc8edf101130f0bf32f5ff9
그것이하는 일은 카테고리 dtype을 사용하여 생성 할 더미를 지정하는 것입니다. 열차와 테스트 세트에서 서로 다른 레벨의 파이프 라인에 더미 생성
from https://stackoverflow.com/questions/41335718/keep-same-dummy-variable-in-training-and-testing-data by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 opencv를 사용하여 이미지의 회전 사각형 영역을 교정하는 방법은 무엇입니까? (0) | 2018.10.21 |
---|---|
[PYTHON] CSVWriter는 데이터를 쓰는 순간 데이터를 저장하지 않습니다. (0) | 2018.10.21 |
[PYTHON] 큰 Numpy 배열 작업을위한 기술? (0) | 2018.10.21 |
[PYTHON] Python : PyQt 팝업 창 (0) | 2018.10.21 |
[PYTHON] 셀레늄 - visibility_of_element_located : __init __ ()은 정확히 2 개의 인수 (3 개)를 취합니다. (0) | 2018.10.21 |