작성
·
1.4K
0
# 피처 데이터 세트 X, 레이블 데이터 세트 y를 추출.
# 맨 끝이 Outcome 컬럼으로 레이블 값임. 컬럼 위치 -1을 이용해 추출
X = diabetes_data.iloc[:, :-1]
y = diabetes_data.iloc[:, -1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 156, stratify=y)
# 로지스틱 회귀로 학습,예측 및 평가 수행.
lr_clf = LogisticRegression()
lr_clf.fit(X_train , y_train)
pred = lr_clf.predict(X_test)
# roc_auc_score 수정에 따른 추가
pred_proba = lr_clf.predict_proba(X_test)[:, 1]
get_clf_eval(y_test , pred, pred_proba)
--------------------------------------------
선수 학습이 부족해서 그런지 강의를 듣고 다시 코드를 작성하는 과정에서 계속 의문점이 생겨 질문을 남깁니다.
1) pred_proba = lr_clf.predict_proba(X_test)[:, 1]
이 부분에서 왜 [:,1]로 하는 것인가요?
2) X = diabetes_data.iloc[:, :-1]는 정의했고,
(X_test)[:,1]이 제가 이해한 바로는 X_test의 데이터 중에 [all rows, outcome]인데, 맞나요?
train_test_split을 했을 때 X_test가 어떠한 데이터 프레임 형태를 갖는지 알지 못하여,
print(X_test)를 하였고 다음과 같은 결과값이 나왔습니다.
Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \ 81 2 74 0 0 0 0.0 682 0 95 64 39 105 44.6 169 3 111 90 12 78 28.4 693 7 129 68 49 125 38.5 9 8 125 96 0 0 0.0 .. ... ... ... ... ... ... 293 1 128 48 45 194 40.5 344 8 95 72 0 0 36.8 650 1 91 54 25 100 25.2 415 3 173 84 33 474 35.7 505 10 75 82 0 0 33.3 DiabetesPedigreeFunction Age 81 0.102 22 682 0.366 22 169 0.495 29 693 0.439 43 9 0.232 54 .. ... ... 293 0.613 24 344 0.485 57 650 0.234 23 415 0.258 22 505 0.263 38 [154 rows x 8 columns]
제가 머신러닝에 대한 기초적 개념이 부족해서인지, 파이썬에 대한 개념이 부족해서인지, 이 부분이 이해가 가지 않습니다. 답변 기다리겠습니다. 감사합니다.
답변 1
2
안녕하십니까,
사이킷런의 Classifier 객체들, 예를 들어 DecisionTreeClassifier, LogisticRegression 들은 predict_proba() 메소드를 가지고 있습니다. 이 predict_proba()는 학습이 완료된 Classifier 객체에서 호출되며, predict_proba(X_test)와 같이 테스트 feature 데이터셋이 인자로 입력될 경우 개별 클래스별로 예측 확률값을 반환합니다.
가령, 여러개의 feature들과 Target값이 0(음성), 1(양성)과 같은 두개의 값만이 있는 binary classification으로 학습이 된 모델 lr_clf에서 X_test(테스트용 피처 데이터 세트)를 predict_proba(X_test)로 입력하면 0이될 확률, 1이 될 확률 각각을 반환합니다.
그러니까 예를 들어 X_test 가 아래와 같은 1건을 입력 했을 때 lr_clf.predict_proba(X_test)는 [ [0.1, 0.9]] 와 같은 값을 반환합니다. 첫번째 열인 0.1은 바로 0이 될 확률, 두번째 열인 0.9는 1이 될 확률입니다.
Pregnancies Glucose BloodPressure SkinThickness Insulin BMI 81 2 74 0 0 0
보통 ROC AUC는 1이 될 확률만 있으면 되므로 lr_clf.predict_proba(X_test)[:, 1]로 [0.9] 를 반환합니다.코드를 풀어서 쓰면 아래와 같습니다.
predict_prob_array = lr_clf.predict_proba(X_test)
predict_positive_prob = predict_prob_array[:, 1]
여기서 [:, 1] 의 : 이 사용된 이유는 보통은 X_test로 여러건이 입력되므로 적용합니다.
감사합니다.