서두르세요! "데이스쿨 40% 할인" 12월 2일까지!
분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
머신러닝 입문트랙 1단계 공부 중 질문있습니다
안녕하세요, 데이콘 학습 중 머신러닝 입문 트랙을 공부 중인 학생입니다.
코드를 따라하다가 이해되지 않는 부분이 질문드립니다.
위에 밑줄 친 코드가 도통 이해가 가지 않습니다.... 갑자기 set은 왜 나온거고, 왜 classes_를 사용했는지도 잘 이해가지 않습니다.
고수님들의 설명 부탁드립니다 ㅠㅠ
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
해당 코드의 궁극적인 목적은 "테스트 데이터에는 있지만 학습 데이터에는 없는 고유한 값을 찾는 것"이에요. 이 값을 찾는 이유는, `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()"이라고 출력되는걸보니, 테스트 데이터에는 학습 데이터에 없는 고유한 값이 없네요~