인코딩 질문!!
훈련 세트에서 보지 못한 카테고리를 테스트 세트에서 발견하여 아래와 같은 오류가 떴는데
ValueError: Found unknown categories ['XXX'] in column 1 during transform
이러한 경우 test에 해당 값을 다른 값으로 대체하거나 삭제 하는게 좋을까요?
시험이 얼마 안남아 궁금한게 많네요
ㅜㅜ
回答 1
0
네 이 에러는 훈련시에는 없었던 새로운 카테고리가 테스트 할때 포함되서 나오는 오류 입니다. 이 에러가 나면 훈련시 컬럼과 테스트 컬럼을 비교해보셔야합니다. 아마도 문자를 숫자로 변환하는 과정에서 훈련과 테스트간에 데이터 불일치가 있어보입니다. 전체 코드가 어떻게 되죠?
0
강사님 강의 기출문제는 모두 풀고 연습을 하여 다른 교재를 사서 풀이하던중에 오류가 나서 질문을 드렸는데 실례가 안되면 답변 주시면 많은 도움 될 것 같습니다.,,ㅜㅜ
아래 문제입니다
#훈련 데이터로 학습한 모델을 테스트 데이터에 적용하여 예측한 결과를 제출하시오.(분류 예측값 제출)
#※ 제출 형식은 ID, pred 두 칼럼만 존재해야 한다.(평가 지표: macro f1-score)
import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/YoungjinBD/data/main/exam/7_2_train.csv')
test = pd.read_csv('https://raw.githubusercontent.com/YoungjinBD/data/main/exam/7_2_test.csv')
1
네 ~ 아래와 같이 모델을 만들어보았습니다.
훈련데이터에 unknown 을 포함시키면 해결되는데요.
실제 시험때 이렇게 나오면 아마 많은 수강생들이 못풀거라서 이렇게 문제가 나오지는
않을것 같습니다.
import pandas as pd
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score
# 데이터 로드
train = pd.read_csv('https://raw.githubusercontent.com/YoungjinBD/data/main/exam/7_2_train.csv')
test = pd.read_csv('https://raw.githubusercontent.com/YoungjinBD/data/main/exam/7_2_test.csv')
# 데이터 분리
X_train = train.drop(['ID', 'Target'], axis=1)
y_train = train['Target']
X_test = test.drop(['ID', 'Target'], axis=1)
# 카테고리 변수 처리
for col in X_train.select_dtypes(include='object').columns:
train_values = set(X_train[col])
X_test[col] = X_test[col].apply(lambda x: 'UNKNOWN' if x not in train_values else x)
le = LabelEncoder()
le.fit(list(X_train[col]) + ['UNKNOWN'])
X_train[col] = le.transform(X_train[col])
X_test[col] = le.transform(X_test[col])
# 피처 엔지니어링 (성적 비율)
if 'Curricular units 1st sem (approved)' in X_train.columns:
X_train['approval_rate'] = X_train['Curricular units 1st sem (approved)'] / (X_train['Curricular units 1st sem (enrolled)'] + 1)
X_test['approval_rate'] = X_test['Curricular units 1st sem (approved)'] / (X_test['Curricular units 1st sem (enrolled)'] + 1)
# 결측치 처리 및 스케일링
X_train = X_train.fillna(X_train.median())
X_test = X_test.fillna(X_train.median())
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 앙상블 모델 (성능 UP!)
rf = RandomForestClassifier(n_estimators=100, class_weight='balanced', random_state=42)
lr = LogisticRegression(class_weight='balanced', random_state=42)
ensemble = VotingClassifier([('rf', rf), ('lr', lr)], voting='soft')
# 성능 확인
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)
ensemble.fit(X_tr, y_tr)
val_pred = ensemble.predict(X_val)
print(f"검증 Macro F1-score: {f1_score(y_val, val_pred, average='macro'):.4f}")
# 전체 학습 및 예측
ensemble.fit(X_train, y_train)
pred = ensemble.predict(X_test)
# 제출 파일
result = pd.DataFrame({'ID': test['ID'], 'pred': pred})
result.to_csv('submission.csv', index=False)
print("완료!")
수강 기한 연장 문의
0
74
4
코랩 기본 사용법 문의
0
63
1
8회 작업형1 문제2
0
59
2
4회 2유형 1번 문제
0
48
1
다중 선형 회귀 상수항 추가 관련 질문
0
88
2
10회 작업형1번문제2번 문제 풀이 틀림
0
74
2
8회 1유형 1번 문제
0
73
1
답변 항상 감사드립니다. 질문 있습니다.
0
68
2
원핫인코딩 이후 칼럼 불일치 문제
0
66
2
6회 1유형 3번 문제
0
63
1
코딩 방법에 따른 채점 기준에 관하여 질문있습니다.
0
77
1
데이터 파일들은 어디서 다운받을 수 있나요?
0
79
2
선형회귀분석 질문
0
47
2
링크가안보여요 어디에올라와있는거죠대체 ? 구글코랩파일이요
0
82
4
범주형 인코딩
0
83
2
원핫인코딩시 라벨링질문
0
78
1
유형2 질문!!
0
58
2
6회 작업형 2 문제 1
0
61
1
작업형 유형 2에서,,, train, test, split 시 성능
0
122
2
항상 모델학습하실때 train_test_split일부러 안하시는 이유가 있는건가요?
0
94
2
Label Encoding 관련 질문
0
100
3
상수항 질문드립니다. (6회 작업형 2문제)
0
50
1
2유형 답안 제출 시 문의
0
59
1
help, dir 사용법
0
93
2

