해결된 질문
작성
·
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]을 넣었는데 됐는지도 모르겠구요 ㅠㅠ
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
Model.predict로 예측할 때와
Model.predict_proba로 예측할 때
결과값이 다릅니다.
2.는 확률값을 예측합니다. 만약 타겟(레이블)에 0과 1이 있다면 0일 확률과 1일 확률을 반환합니다. 평가지표가 roc_auc일 때 predict_proba를 활용해요!
1과 2 둘다 실행해서 pred값을 한번 출력해서 눈으로 확인 부탁해요