통계게시판이지만, 아시는 분 답변 부탁드려요...
머신러닝 기초 수업듣고 숙제하는데 막히네요...
회귀분석 데이터를 traini test 셋으로 나누는 방법 중에서요...
변수, 샘플의 분포가 이질적이라 이 이질적 분포를 training set과 test set으로 나눌 때 사용하는 것 계층화 샘플링(strarifying)을 이해했어요.
Y와 상관관계가 가장 높은 X1을 기준으로 계층화를 할 건데요...
파이썬 코드를 보니 pandas의 cut이란걸 사용해서
bin을 넣어주고, label을 붙여줘서 새로 분류한 다음에,
이걸 train, test 셋 분류할 때, tratify=X1_category란 걸 넣어서 바꾸더라고요...
(아래)
X1_category = pd.cut(df['X1'],
bins=[0., 30.0, 70.0, 130.0, 200., 400., 1200],
labels=[1,2,3,4,5,6])
X1_category
train_set, test_set = train_test_split(df,
test_size=0.2,
shuffle=True,
random_state=0,
stratify=X1_category)
제가 궁금한 거는, 위에서 bin을 나누는 방법이나, 전해오는 룰 같은게 있을까요??
왜냐하면 수업에서는 딱히 말해주진 않았던거 같고
저 부분을 바꾸니까 실제
회귀모형에서 r2값들이 다르게 나오더라고요...
혹시 아시는분 도움부탁드립니다. ㅜㅜ
사분위수같은거 빼면 딱히 떠오르는게 없는데 본문은 그런것같지는 않고...
정확히 뭔진 모르겠는데 1. 분포가 이질적(종모양 대칭 아니고 다른 모양인데 여기서는 치우친 모양이라고 가정) 2. cut은 나눠주는거고 bin은 나누는 경계값 예를들어 소득x로 목표변수 y를 예측한다고 하면 연속형 변수로 측정된 x를 그대로 쓸 수도 있지만 어떤 범위로 나눠서 상, 중 하층 같이 순서형 척도로 변환해서 분석에 사용하고 싶을 때가 있을 거. 그러면 분포는 하층에 사람 수가 많고 상층엔 적을거니까 0~30 → 소득이 거의 없어서 보조금 받는 층 → 1이라고 라벨링(최하층) 30~70 → 약간의 부업이 있는 경우 → 2(하층)... 이렇게 나눠가는거지 0, 30, 70...같은 경계값은 선행연구를 따르거나 연구자가 어떤 기준으로 선정해서 정하고
tratify는 데이터셋 나눌때 클래스 비율까지 맞춰주는것 n=100짜리를 그냥 훈련:검증=7:3으로 나누면 데이터 케이스 수는 70개 30개로 나눠지겠지만 X1을 1~6로 라벨링한 것이 검증용에는 X1가 5,6짜리가 없을 수 있음. 상층은 수가 적으니까 30개정도 랜덤하게 나눠준다고 하면 5,6짜리가 70개쪽으로 다 몰려버릴 수 있잖아. 이런걸 방지해서 30개쪽에도 X1의 1~6이 고루 들어가게 해주는게 tratify