본문 바로가기
ML&DATA/핸즈온 머신러닝

4 - 로지스틱 회귀, 소프트맥스 회귀

by sun__ 2020. 9. 15.

www.youtube.com/watch?v=6omvN1nuZMc&list=PLJN246lAkhQjX3LOdLVnfdFaCbGouEBeb&index=13

박해선 교수님의 유튜브 강의로 공부했음을 밝힙니다. 

 


4.6 로지스틱 회귀

로지스틱 회귀 : 분류에 사용되는 회귀모델. 샘플이 특정 하나의 클래스에 속할 확률(predict_proba)을 추정한다.

소프트맥스 회귀 : 다항 로지스틱 회귀라고도 한다. 각 클래스에 속할 확률을 추정한다.

 

<실제 모듈 사용>

 

sklearn.linear_model의 LogisticRegression사용. coef_속성은 (클래스 수, 특성 수)크기의 2차원배열. intercept_속성은 클래스 수와 같은 1차원 배열

 

1. 로지스틱 회귀

머신러닝의 'hello world'라고 부르는 붓꽃 데이터 셋. 꽃밪침 너비/길이, 꽃잎 너비/길이를 feature로 가지고 setosa,versicolour, virginica 세가지 클래스를 갖는다.

from sklearn import datasets
iris = datasets.load_iris()
list(iris.keys())
#['data',
# 'target',
# 'frame',
# 'target_names',
# 'DESCR',
# 'feature_names',
# 'filename']

#클래스마다 50개씩의 데이터를 갖는다. 
np.unique(iris.target, return_counts=True)
#(array([0, 1, 2]), array([50, 50, 50], dtype=int64))

#꽃잎 너비만 특성으로 사용 (그래프 그리기 쉽게 하기 위함임. )
X = iris['data'][:,3:] 
#Iris virginica면 1 아니면 0
y = (iris['target'] == 2).astype(np.int)

X.shape #(150,1) 범위인덱스로 뽑았으므로 2차원

 

로지스틱 회귀 모델을 훈련. sklearn.linear_model의 LogisticRegression 사용

from sklearn.linear_model import LogisticRegression

log_reg = LogisticRegression(random_state=42)
log_reg.fit(X,y)

 

 

사용법

log_reg.predict_proba(X_new)  #X_new의 로지스틱 회귀 결과 확률벡터를 반환함
log_reg.predict(X_new) 		#X_new의 클래스 예측벡터 반환

 

 

사용예

꽃잎의 너비가 0~3cm인 꽃에 대해 모델의 추정 확률 계산

X_new = np.linspace(0,3,1000).reshape(-1,1)
y_proba = log_reg.predict_proba(X_new)  #추정확률 y_proba에

plt.plot(X_new, y_proba[:,1], 'g--', linewidth=2, label ='Iris virginica')
plt.plot(X_new, y_proba[:,0], 'b--', linewidth=2, label ='not Iris virginica')
plt.legend()

 


 

2. 소프트맥스 회귀

사용할 데이터

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

X.shape  #(150,2)

 

소프트맥스 회귀 모델을 훈련. LogisticRegression의 multi_class옵션을 'multinomial'로 설정하여 사용

softmax_reg = LogisticRegression(multi_class = 'multinomial', C=10, random_state=42)
softmax_reg.fit(X,y)

 

사용법

softmax_reg.predict([[5,2]])
#array([2])
softmax_reg.predict_proba([[5,2]])
#array([[6.38014896e-07, 5.74929995e-02, 9.42506362e-01]])

 

 


<로지스틱 회귀>

시그모이드 함수

로지스틱 회귀모델에서 어떤 샘플에 대한 확률 추정식은 위 시그모이드 함수를 사용해서 정의한다.

 

샘플의 추정라벨 $\hat{y}$은 추정확률$\hat{p}$이 0.5이상이면 양성, 0.5미만이면 음성이다.

 


 

모델을 훈련시키기 위한 비용함수를 알아보자.

 

하나의 샘플에 대한 비용함수는 다음과 같다. 라벨이 1인 경우 확률이 0에 가까울수록 큰 비용 발생하고, 라벨이 0인 경우 확률이 1에 가까울수록 큰 비용이 발생한다는 의미를 갖는다.

더보기

정리하면 경우에 따른 교차 엔트로피 오차라고 할 수 있는 것 같다.

 

전체 훈련세트에 대한 비용함수는 모든 훈련샘플의 비용을 평균한 것이다. 이걸 로그손실이라고 한다.

 

미분해서 경사하강법에 사용하면 된다. 

 

 


<소프트맥스 회귀>

  • $k$ : 클래스 수
  • $s(x)$ : 샘플 $x$에 대한 각 범주의 점수를 담고 있는 벡터
  • $\sigma(s(x))_k$ : 이 샘플이 범주 $k$에 속할 확률

샘플 $x$가 주어지면 소프트맥스 회귀 모델이 각 클래스 $k$에 대한 점수 $s_k(x)$를 계산하고, 그 점수에 소프트맥스 함수를 적용하여 각 범주별 속할 확률을 추정한다.

추정라벨 $\hat{y}$는 추정확률$\hat{p}_k이 가장 높은 클래스를 선택함

 


 

모델을 훈련시키기 위한 비용함수를 알아보자.

 

교차(크로스) 엔트로피 오차를 사용한다. suuntree.tistory.com/299

 

역시 미분해서 경사하강에 사용하면 된다.

'ML&DATA > 핸즈온 머신러닝' 카테고리의 다른 글

5. SVM - 선형분류  (0) 2020.09.28
4 - 정리, 연습문제  (0) 2020.09.18
4 - 다항회귀, 규제  (2) 2020.09.09
4 - 선형회귀 (경사하강법)  (0) 2020.09.04
4 - 선형 회귀 (정규방정식)  (0) 2020.09.04