함께하는 데이터 분석

[Find-A] [Scikit Learn] 소프트맥스 회귀 본문

학회 세션/파인드 알파

[Find-A] [Scikit Learn] 소프트맥스 회귀

JEONGHEON 2022. 8. 20. 09:47

이번에는 소프트맥스 회귀를 진짜 맛만 보겠습니다.

 

정말 간단하게 저번에 봤던 iris 데이터를 가지고

 

코드만 돌려보는 식으로 진행할게요!

 

이전의 데이터 설명이나 로지스틱 회귀를 파이썬으로 돌린 포스팅은

2022.08.19 - [학회 세션/파인드 알파] - [Find - A] [Python] 로지스틱 회귀

 

[Find - A] [Python] 로지스틱 회귀

안녕하세요! 오늘은 로지스틱 회귀모형을 Python으로 돌려보겠습니다. 다른 포스팅에도 개념은 설명되어 있어 간단하게 말하고 넘어갈게요. 로지스틱 회귀는 이진 분류기로 샘플이 특정 클래스

tnqkrdmssjan.tistory.com

여기를 확인하시면 됩니다.

 

시작할게요!

 

소프트맥스 회귀

로지스틱 회귀 모델은 여러 개의 이진 분류기를 훈련시켜 연결하지 않고 직접 다중 클래스를 지원하도록 되어있습니다.

 

이를 소프트맥스 회귀(Softmax Regression) 또는 다항 로지스틱 회귀(Multinomial Logistic Regression)이라고 합니다.

 

이제 코드로 맛만 볼게요.

 

 

데이터 불러오기

from sklearn import datasets
iris = datasets.load_iris()

사이킷런의 내장 데이터인 iris데이터를 불러왔습니다.

 

X = iris['data'][:, (2, 3)] # 꽃잎 길이, 꽃잎 너비
y = iris['target']

꽃잎의 길이와 너비를 갖고 소프트맥스 회귀를 사용하여

 

붓꽃을 setona, versicolor, virginica 총 3개의 클래스로 분류해보겠습니다.

 

from sklearn.linear_model import LogisticRegression

softmax_reg = LogisticRegression(multi_class='multinomial',
                                 solver='lbfgs', C=5)
softmax_reg.fit(X, y)

앞선 로지스틱 회귀 모델과 동일하게 LogisticRegression은 동일합니다.

 

하지만 여기서 multi_class 매개변수를 'multinomial'로 변경하고

 

solver 매개변수에 'lbfgs'와 같은 소프트맥스 회귀를 지원하는 알고리즘을 지정하면 됩니다.

 

하이퍼파라미터 C는 L2 규제를 적용하는 것으로 값이 커지면 약한 규제, 값이 작아지면 강한 규제를 가합니다.

 

이제 마지막으로 분류해볼까요?

 

print(softmax_reg.predict([[4, 2]]))
print(softmax_reg.predict_proba([[4, 2]]))

>>> [1]
    [[0.0026644  0.81154903 0.18578657]]

꽃잎의 길이가 4, 너비가 2인 붓꽃은 class가 1인 Versicolor로 분류된 것을 확인할 수 있습니다.

 

앞서 확인했던 바로는 너비만 활용했을 때 1.6을 결정 경계로 너비가 2이면 Virginica로 분류했습니다.

 

하지만 꽃잎의 길이까지 고려하면 Versicolor로 분류하는 것을 볼 수 있습니다.

 

그리고 0.2%의 확률로 Setona, 81%의 확률로 Versicolor, 18%의 확률로 Virginica라고 출력하는 것을 볼 수 있습니다.

 

추가적으로 앞서 이진 분류기인 로지스틱 모형은 50% 이상인 클래스를 예측했지만

 

이번에는 클래스를 3개로 분류하므로 33% 이상인 클래스를 예측할 수 있어

 

50%보다 작아도 예측이 될 수 있다는 점을 알아두시면 좋습니다.


https://www.hanbit.co.kr/store/books/look.php?p_code=B9267655530 

 

핸즈온 머신러닝

최근의 눈부신 혁신들로 딥러닝은 머신러닝 분야 전체를 뒤흔들고 있습니다. 이제 이 기술을 거의 모르는 프로그래머도 데이터로부터 학습하는 프로그램을 어렵지 않게 작성할 수 있습니다. 이

www.hanbit.co.kr