1) 로지스틱 회귀 이해하기
로지스틱 회귀는 시그모이드(Sigmoid) 함수를 사용하여 데이터를 설명하는 최적의 선으로 답을 찾는 알고리즘
이름은 회귀지만, 분류에 사용
S(x) = 1/(1+e^-x) = e^x / (e^x + 1)
(1) 시그모이드 함수 만들기
# 넘파이, 그래프 라이브러리
import numpy as np
import matplotlib.pyplot as plt
# 시그모이드 함수 작성
def sigmoid(x):
# numpy.exp() 함수는 밑이 자연상수 e인 지수함수(e^x)로 변환
return 1/(1+np.exp(-x))
# 함수 테스트용 데이터 생성하기
test=np.array([-1, 0, 1])
# 작성된 함수 확인하기
print(sigmoid(test))
[0.26894142 0.5 0.73105858]
(2) 시그모이드 함수 그래프 그리기
# 그래프 적용을 위한 데이터 만들기
sigmoid_x = range(-6, 7)
sigmoid_y = sigmoid(np.array(sigmoid_x))
# 선그래프
plt.plot(sigmoid_x, sigmoid_y, color = 'blue', linewidth = .5)
# 백그라운드 모눈종이
plt.rcParams['axes.grid'] = True
# 선굵기
plt.axvline(x=0, color='black',linewidth=3)
#y축 범위
plt.yticks([0, .5, 1])
plt.show()

-6 ~ 6 사이의 값을 0~1 사이의 값으로 변환해주는 로지스틱 함수가 잘 구현되었음
시그모이드 함수(로지스틱 함수)에 대한 이해하기 좋은 글
시그모이드 함수(sigmoid function) 알아보기 + 미분 : 네이버 블로그 (naver.com)
시그모이드 함수(sigmoid function) 알아보기 + 미분
(갑자기 시그모이드 함수를 알아보는 시간!) 이렇게 S자로 처음에는 잠잠하다가 중간에 갑작스럽게 크게 ...
blog.naver.com
2) 로지스틱 회귀 실습하기
로지스틱회귀 알고리즘은 sklearn의 linear_model 서브패키지에서 제공하는 LogisticRegression 클래스로 활용 가능함
# 데이터 구성하기
# 학습데이터 생성
x_train = [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
y_train = [0,0,0,0,0,0,0,1,1,1,1,1,1,1]
# 추론을 위한 데이터 생성
x_test = [0,1,2,18,19]
y_test = [0,0,0,1,1]
# 학습데이터 numpy로 변경, 행을 열로 변경
x_train = np.array(x_train).reshape(-1,1)
y_train = np.array(y_train)
print(x_train)
print(y_train)
[[ 3]
[ 4]
[ 5]
[ 6]
[ 7]
[ 8]
[ 9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]]
[0 0 0 0 0 0 0 1 1 1 1 1 1 1]
(2) 로지스틱 회귀 학습하기
# 로지스틱회귀 라이브러리
from sklearn.linear_model import LogisticRegression
# 로지스틱회귀 생성하기
logi_reg = LogisticRegression()
# 학습하기
logi_reg.fit(x_train, y_train)
#역산을 위한 기울기와 y절편이 있는지 확인하기
print('intercept: ', logi_reg.intercept_)
print('coef: ', logi_reg.coef_)
intercept: [-11.34126808]
coef: [[1.19383367]]
학습을 마친 모델에서 선형회귀와 같이 coef와 intercept를 확인할 수 있음
이를 이용해 sigmoid 그래프 그리고, 데이터와 비교해보자
(3) 로지스틱회귀 그래프 만들기
# 기울기, 절편을 수동으로 결과 만들기
odd = []
for i in x_train:
odd.append((logi_reg.coef_*i)+logi_reg.intercept_)
sigmoid_y = sigmoid(np.array(odd))
sigmoid_y = sigmoid_y.reshape(-1,1)
#역산된 그래프 표시하기
plt.scatter(x_train, y_train, color = 'red')
plt.plot(np.array(x_train), sigmoid_y, color='blue')
plt.rcParams['axes.grid']=True
plt.ylim([-0.1, 1.1])
plt.show()

3) 로지스틱 회귀와 선형 회귀 비교
(1) 선형회귀 모델링
# 선형회귀 함수 불러오기
from sklearn.linear_model import LinearRegression
# 선형회귀 생성하기
lr = LinearRegression()
# 학습하기
lr.fit(x_train, y_train)
# coef와 intercept 확인하기
print('coef: ', lr.coef_)
print('intercept: ', lr.intercept_)
coef: [0.1]
intercept: -0.4666666666666667
coef_intercept = x_train * lr.coef_ + lr.intercept_
plt.scatter(x_train, y_train, color = 'red')
plt.plot(np.array(x_train), coef_intercept, color='green')
plt.plot(np.array(x_train), sigmoid_y, color='blue')
plt.show()
x_test = np.array(x_test).reshape(-1,1)
print(logi_reg.score(x_test, y_test))
print(lr.score(x_test, y_test))

1.0
0.3981481481481479
로지스틱회귀는 y축의 0.5를 기준으로 Yes 또는 No를 구분하여 이진/다중 분류에 강한 모델을 만듦
위 학습모델을 기반으로 x=9.5인 경우 로지스틱/선형 회귀에서 각각 어떤 결과를 도출하는지....
'Tech' 카테고리의 다른 글
| 통계학 정리 2 (2) | 2024.08.30 |
|---|---|
| 통계학 정리 (2) | 2024.08.28 |
| ch8. 사례기반 '''선형회귀모델''' (0) | 2024.06.26 |
| ch8. 지도학습 AI 모델링 (2) | 2024.06.25 |
| Ch7. AI 모델링 (2) | 2024.06.24 |