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

아함님의 프로필 이미지
아함

작성한 질문수

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

4회 기출 유형(작업형2)

4회 기출 유형(작업형2) 문제 풀이 과정 중에 질문드립니다.

해결된 질문

작성

·

1K

0

안녕하세요!

4회 기출 유형(작업형2) 문제 풀이 과정 중에 에러가 발생하여 질문 드립니다.

이전까지 하던 대로 train_test_split을 통해 데이터를 분리해서 진행을 하였는데요

from sklearn.model_selection import train_test_split
x_tr, x_val, y_tr, y_val = train_test_split(train.drop('Segmentation', axis = 1),
                                            train['Segmentation'],
                                            test_size = 0.1,
                                            random_state = 2023)
x_tr.shape, x_val.shape, y_tr.shape, y_val.shape
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators = 400, max_depth = 9, random_state = 2023)
rf.fit(x_tr, y_tr)
pred = rf.predict_proba(x_val)
from sklearn.metrics import roc_auc_score
roc_auc_score(y_val, pred, multi_class = 'ovo')
pred = rf.predict_proba(test)
submit = pd.DataFrame(
    {
        'ID' : test_id,
        'Segmentation': pred
    })
ValueError: Per-column arrays must each be 1-dimensional

위와 같은 에러 메시지가 뜹니다!

이리 저리 만져봐도 잘 모르겠네요 ㅠㅠ

어떻게 하면 될까요?

답변 2

0

아함님의 프로필 이미지
아함
질문자

pred = rf.predict_proba(test[:,1])

InvalidIndexError: (slice(None, None, None), 1)

알려주신 내용을 입력하니,

위와같은 에러가 발생하여서 원래대로 진행하였고,

pred = rf.predict_proba(test)
pd.DataFrame({'ID': test_id, 'Segmentation': pred[:,1]}).to_csv('000000.csv', index = False)

이렇게 dataframe을 만들 때 'pred'에다가 [:,1]을 넣어 진행하니까 오류는 안뜨네요.

그런데 모델링할 때는 pred[:,1] 없이 pred로만 진행해도 에러가 없었는데, 왜 오류가 생겼는지 이유를 잘 모르겠습니다. 왜 마지막 데이터프레임을 만들때만 [:,1]을 넣었는데 됐는지도 모르겠구요 ㅠㅠ

 

 

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

  1. Model.predict로 예측할 때와

  2. Model.predict_proba로 예측할 때

결과값이 다릅니다.

2.는 확률값을 예측합니다. 만약 타겟(레이블)에 0과 1이 있다면 0일 확률과 1일 확률을 반환합니다. 평가지표가 roc_auc일 때 predict_proba를 활용해요!

1과 2 둘다 실행해서 pred값을 한번 출력해서 눈으로 확인 부탁해요

아함님의 프로필 이미지
아함
질문자

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators = 400, max_depth = 9, random_state = 2023)
rf.fit(x_tr, y_tr)
pred = rf.predict(x_val)

rf.predict로만 진행하면 위와 같이 되고, 결과값은 아래와 같이 나옵니다.

pred
array([2, 4, 3, 1, 4, 1, 2, 4, 3, 3, 1, 4, 4, 4, 3, 1, 2, 3, 2, 4, 2, 1,
       4, 4, 3, 1, 1, 2, 2, 4, 1, 3, 4, 4 4, 2,

다만, 이 상태에서는 roc_auc_score가 실행이 안되네요

from sklearn.metrics import roc_auc_score
roc_auc_score(y_val, pred, multi_class = 'ovo')

AxisError: axis 1 is out of bounds for array of dimension 1
from sklearn.metrics import roc_auc_score
roc_auc_score(y_val, pred[:,1], multi_class = 'ovo')

IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed

선생님 혹시 해당 데이터의 예측값이 1, 2, 3, 4인 것과 관계 있을까요?

제출 형식:
ID,Segmentation
458989,1
458994,2
459000,3
459003,4

 

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

기출유형 4 다중분류였네요

제가 모바일로 답변하느라 문제를 제대로 보질 못했습니다.

predict이 아닌 predict_proba로 예측해 주세요!

그리고 다중분류니 roc_auc를 평가할 때 pred그대로 넣어주면 됩니다.

다시 한번 해보고 안되면 댓글주세요 :)

 

0

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

test에 0확률과 1확률이 있어요

1 확률을 선택해야합니다

pred = rf.predict_proba(test[:,1])

 

아함님의 프로필 이미지
아함

작성한 질문수

질문하기