Machine Learning & Data Analytics

predict_proba & predict in sklearn LogisticRegression

Genie Lee 2022. 4. 2. 06:58
728x90
반응형

이 글은  유투브 '도움코드'의 영상을 보고 도움을 받아 작성하였음을 밝힙니다. 

https://www.youtube.com/watch?v=hB_b_vgxjiw


모델을 예측하는 코드를 살펴보다가 비슷한 듯 비슷하지 않은 비슷한 코드를 마주했다.

보통 예측을 할 때는, pred = log_reg.predict(test_df) 라고 썼는데, 오늘은 log_reg_pred = log_reg.predict_proba(test_df) 라는 코드도 보게 되었다. 

둘 다 sklean에서 지원되는 메소드인데, 무엇이 다를까? 둘 다 써도 되는 건가? 하나만 쓰는 건가? iris 데이터를 가지고 한번 알아보자! 

 

predict_proba  VS  predict

| predict_proba()  & predict()

결론부터 말하자면, predict_proba() 는 확률을, predict()은 결과 값을 나타내 준다. 

 

우리가 모델을 만들 때, predict()을 하는 이유는, 이 모델이 X_train과 y_train을 잘 학습해서, X_test를 주고 예측해 보라고 했을 때, 잘 예측하는 지를 보기 위해서 이다. 

(X_train, y_train, X_test, y_test 가 있다는 가정하에)

 

predict_proba()은, 각 row의 각 label마다 정확도 확률을 보여주기 때문에 어떤 label이 가장 확률이 높은 지 확인할 수 있다.

predict_proba()해서 보면, 첫번째 row의 경우, label 2의 확률(8.....)이 가장 높다. 그리고 각 row의 확률 값을 다 더하면, 확률이므로, 1이 되어야 한다. 더하는 함수는 sum(), axis=1 (행)방향으로.

 

.argmax()

argmax() 메소드를 써주면, 지정된 row, 여기서는 [:4]라고 했으므로, 각 row0번, row1번, row2번, row3번에서 가장 확률이 높았던 label 번호를 추출해준다.

 

순서를 다시 정리해보면, lr.precict_proba() > lr.precict_proba().sum() 

 

AI 컴패티션의 Submission 상세를 보면 확률인지, 유무인지 나와있다.

 

그런데, 이렇게 몇 단계를 걸쳐서 구하는 방법보다. 한번에 어떤 label이 가장 확률이 높은 지를 구할 수 있는 함수가 있는데, 그게 바로 predict()이다. 

predict()는 보통 pred라는 변수에 담아준 다음, 모델을 테스트 하는데, 코드는 아래와 같다. 

pred =  lr.predict(X_test)

그리고 나서, 모델 평가 해주는 과정으로 진행이 된다.
accuracy_score(y_test, pred)

 

 

728x90
반응형