인프런 커뮤니티 질문&답변

김치현님의 프로필 이미지
김치현

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

모델링 및 평가(분류)

검증용 데이터 분리시

해결된 질문

작성

·

26

0

y = (y_train['income'] == '>50K').astype(int)

이렇게 하면 50k 보다 큰 값에서는 1이 나오는데,
만약 3개의 값으로 나오게 하려면 어떻게 해야하나요? (0, 1, 2) 등등

그리고 윗 코딩대로 진행하면
<=50k 는 자동적으로 0이 되는건가요? 이유가 있을까요?

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

안녕하세요~!!

위 코드는 타겟이 범주형 일때 숫자로 변경하는 코드입니다.

레이블 인코딩과 같지만 어떤 값을 0으로 지정할지 정할수 있는거죠

y_train['income'] == '>50K' 조건문의 결과 True와 False를 int형으로 변경하면서 1과 0으로 변경합니다.

 

랜덤포레스트, lightgbm이 타겟이 범주형일 때 자동으로 처리해서

이진 또는 다중에서 변경하지 않아도 됩니다.

y = (y_train['income'] == '>50K').astype(int) 코드 사용하지 않아도 됨.

 

 

알려드린 이유는 문제가 좀 더 어렵게 출제될 경우에

0과 1이 아닌경우 평가지표에서 양성(1)을 지정해야할 때가 있는데

기출에서 그런상황이 한 번도 없었어요!

 

0

안녕하세요, 인프런 AI 인턴입니다. 김치현님께서 질문하신 내용을 이해하고 관련 정보를 제공해 드리겠습니다.

우선, y = (y_train['income'] == '>50K').astype(int)라는 코드는 income 값이 ">50K"인 경우 1로, 나머지는 0으로 변환하는 작업입니다. 이는 이진 분류를 위한 전처리 과정으로, 특정 조건에 대해 True이면 1, False이면 0을 할당합니다.

다중 클래스 (예: 0, 1, 2)로 변환하려면:

먼저, income 데이터가 범주형 변수이며, ">50K", "<50K" 외에도 예를 들어 ">=100K"와 같은 다른 범주가 존재한다고 가정할 수 있습니다. 이 경우, 특정 기준을 가지고 값들을 각각 다른 숫자로 매핑하면 됩니다. 예시는 다음과 같습니다:

def map_income(income_value):
    if income_value == '>50K':
        return 1
    elif income_value == '>=100K':
        return 2
    else:
        return 0

y = y_train['income'].apply(map_income)

위 코드는 income 값에 따라 각각 다른 정수 값으로 변환하여 다중 클래스를 만듭니다.

두 번째 질문에 대한 설명:

<=50K인 경우 자동으로 0이 되는 이유는 조건문 (y_train['income'] == '>50K')의 결과가 True 인 경우에만 1로 변환되며, 그 외의 경우에는 모두 False로 인식합니다. astype(int)True1, False0으로 변환하므로 <=50K나 기타 조건을 만족하지 않는 값들은 0으로 변환됩니다. 이 방식은 이진 분류를 위해 사용되며, 특히 미리 명시된 두 상태(이진 상태)를 쉽게 처리하기 위한 전통적인 방식입니다.

질문과 관련된 유사한 주제를 다루는 링크를 통해 더 심화된 내용이나 유사 사례를 확인할 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김치현님의 프로필 이미지
김치현

작성한 질문수

질문하기