정확도, 정밀도, 재현율
답변 감사드립니다. 제가 사용한 데이터의 shape은 (236, 17)이며 상관관계분석을 통해 유의미하다고 판단된 열 3개만 x데이터로 가져왔습니다. 제가 설명이 부족한 부분이 있던것같아 임계값을 올리는 부분 전 단계를 가져왔습니다. 제가 짠 코드는 위 코드이고, 결과는 아래와 같습니다. x = df[['FBS', 'HBA1C', 'BS']] y = df['DM_DX_YN'] X_train, X_test, y_train, y_test = train_test_split(x,y,test_size = 0.2, random_state=121) lr_clf = LogisticRegression() lr_clf.fit(X_train,y_train) pred = lr_clf.predict(X_test) confusion = confusion_matrix(y_test, pred) accuaracy = accuracy_score(y_test, pred) precision = precision_score(y_test, pred) recall = recall_score(y_test, pred) print('오차 행렬') print(confusion) print('정확도 : {0:.4f} 재현율 : {0:.4f} 정밀도 : {0:.4f}'.format(accuracy, precision, recall)) pred_proba = lr_clf.predict_proba(X_test) pred = lr_clf.predict(X_test) print('pred proba() 결과 Shape: : {0}'.format(pred_proba.shape)) print('pred_proba() array에서 앞 3개만 샘플로 추출 \n:', pred_proba[:3]) pred_proba_result = np.concatenate([pred_proba, pred.reshape(-1,1)], axis =1) print('두 개의 class 중에서 더 큰 확률을 클래스 값으로 예측 \n', pred_proba_result[:3]) from sklearn.preprocessing import Binarizer custom_threshold = 0.5 pred_proba_1 = pred_proba[:, 1].reshape(-1,1) binarizer = Binarizer(threshold = custom_threshold).fit(pred_proba_1) custom_predict = binarizer.transform(pred_proba_1) confusion = confusion_matrix(y_test, custom_predict) accuaracy = accuracy_score(y_test, custom_predict) precision = precision_score(y_test, custom_predict) recall = recall_score(y_test, custom_predict) print('오차 행렬') print(confusion) print('정확도 : {0:.4f} 재현율 : {0:.4f} 정밀도 : {0:.4f}'.format(accuracy, precision, recall)) # 결과 오차 행렬 [[30 2] [ 1 15]] 정확도 : 0.8590 재현율 : 0.8590 정밀도 : 0.8590 pred proba() 결과 Shape: : (48, 2) pred_proba() array에서 앞 3개만 샘플로 추출 : [[0.97882766 0.02117234] [0.84113331 0.15886669] [0.85791886 0.14208114]] 두 개의 class 중에서 더 큰 확률을 클래스 값으로 예측 [[0.97882766 0.02117234 0. ] [0.84113331 0.15886669 0. ] [0.85791886 0.14208114 0. ]] 오차 행렬 [[30 2] [ 1 15]] 정확도 : 0.8590 재현율 : 0.8590 정밀도 : 0.8590