Python/scikit-learn

AttributeError: probability estimates are not available for loss='hinge'

검정비니 2020. 4. 4. 20:08
728x90
반응형

scikit-learn에서 SGDClassifier나 SVM 모델을 훈련시키다보면 "AttributeError: probability estimates are not available for loss='hinge' ..."과 같은 에러 메세지를 마주하게 될 것이다.

 

에러 메세지에서 말해주듯이 hinge 손실 함수가 문제가 되어서 에러가 발생한 것이다. 대표적인 예로, hinge를 손실 함수로 사용하는 SGDClassifier 객체가 predict_proba() 메소드를 사용하게 되면 위와 같은 에러를 발생시키게 된다. 이 예시에서 에러가 발생한 이유는 사이킷런의 predict_proba() 메소드가 오직 log 손실 함수와 modified Huber 손실 함수만 지원하기 때문이다. predict_proba() 메소드가 지원하지 않는 hinge 손실 함수를 사용해서 예측값을 얻으려고 했기 때문에 문제가 발생한 것이다.

 

predict_proba()를 직접적으로 사용하지 않았더라도, 다른 validation method 등에서 내부적으로 predict_proba()를 사용하고 있어서 이 에러가 발생하였을 수도 있다.

 

이에 대한 해결책으로는 2가지 방법이 있는데, 첫번째로는 hinge 손실 함수를 log 손실 함수나 modified_huber 손실 함수로 대체하는 것이다. 그런데 만약 반드시 hinge 손실 함수를 사용하고 싶다면, Calibration를 사용해서 문제를 해결할 수도 있다. Calibration은 특정 모델이 probability의 계산을 잘 하지 못하거나, probability 계산 기능을 지원하지 않을 때 해당 모델에 probability 계산 기능을 추가하거나 좋지 못한 기능을 향상시키고 싶을 때 사용한다.

 

사용 방법:

 

Calibration에 대한 자세한 설명(영문)은 아래의 링크를 참조하기를 바란다.

https://scikit-learn.org/stable/modules/calibration.html

 

1.16. Probability calibration — scikit-learn 0.22.2 documentation

1.16. Probability calibration When performing classification you often want not only to predict the class label, but also obtain a probability of the respective label. This probability gives you some kind of confidence on the prediction. Some models can gi

scikit-learn.org

 

반응형