머신러닝 입문트랙 1단계 공부 중 질문있습니다

2024.10.23 11:26 203 조회

안녕하세요, 데이콘 학습 중 머신러닝 입문 트랙을 공부 중인 학생입니다.

코드를 따라하다가 이해되지 않는 부분이 질문드립니다.



위에 밑줄 친 코드가 도통 이해가 가지 않습니다.... 갑자기 set은 왜 나온거고, 왜 classes_를 사용했는지도 잘 이해가지 않습니다.

고수님들의 설명 부탁드립니다 ㅠㅠ


로그인이 필요합니다
0 / 1000
꼰대가르송
2024.10.23 19:33

해당 코드의 궁극적인 목적은 "테스트 데이터에는 있지만 학습 데이터에는 없는 고유한 값을 찾는 것"이에요. 이 값을 찾는 이유는, `LabelEncoder`는 학습 데이터에 없는 고유한 값을 인코딩하지 않기 때문에, 만약 테스트 데이터에 그런 값이 있다면 직접 인코딩을 해주어야 해요.
예를 들어, 학습 데이터셋의 `education` 피처에 Some-college와 Bachelors 값만 있다고 가정해볼게요. 그런데 테스트 데이터셋에는 Some-college, Bachelors, HS-grad가 포함되어 있다면, HS-grad는 숫자로 인코딩되지 않습니다. 따라서, HS-grad는 별도로 처리해줘야 하는 상황이 발생합니다.

코드에서 `set()`을 사용한 이유는 중복된 값을 제거하고 고유한 값만 추출하기 위해서에요. 예를 들어, `test_ex1['education'].unique()`를 출력해 보면 Some-college, Bachelors, Some-college, HS-grad... 이런식으로 나올 텐데, 중복된 값을 제외하고 고유한 값들만 보고 싶다면 `set()`을 사용해서 Some-college, Bachelors, HS-grad 같은 고유 값들만 추출할 수 있어요.

그리고 `set(le_train.classes_)`는 `LabelEncoder`로 학습된 범주(클래스)들을 나타냅니다. 학습 데이터에서 인코딩된 값들이 무엇인지 확인할 수 있어요. 따라서, 테스트 데이터의 고유값에서 `LabelEncoder`로 변환된 고유값을 빼면, 테스트 데이터에만 있는 고유값을 추출할 수 있습니다!! 
하지만, 코드 실행 결과를 보면 "new category that not in le_train.classes_: set()"이라고 출력되는걸보니, 테스트 데이터에는 학습 데이터에 없는 고유한 값이 없네요~

반리
2024.10.29 11:41

답변 감사합니다!