머신러닝

로지스틱 회귀(Logistic Regression)

Master.M 2022. 1. 12. 17:29
반응형

 안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Conducter'입니다.

오늘 알아볼 내용은 로지스틱 회귀(Logistic Regression)입니다.

 

 

로지스틱 회귀(Logistic Regression) 

 로지스틱 회귀(Logistic Regression)는 회귀를 이용하여 데이터가 어떤 범주에 속할 확률을 0에서 1 사이의 값으로 예측하고 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류해주는 지도 학습 알고리즘입니다.

 

 예를들어 나이와 보험유무를 알수 있는 데이터가 있다고 해봅시다. 선형회귀 를 사용하면 아래와 같은 그래프가 그려집니다. 실제 데이터는 y값은 0에서 1인 반면 예측된 모델은 -무한대에서 +무한대 까지인것을 알 수 있습니다.  

선형 회귀

 

 그럼 로지스틱 회귀를 사용하면 어떨까요? 아래 그림은 로지스틱 회귀를 사용하여 학습한 그래프입니다.  이제야 예측 모델이 확률 0에서 1사이에 있고 실제 값과도 더욱 잘 맞는것을 알 수 있습니다. 이러한 이유로 로지스틱 회귀를 사용합니다. 

로지스틱 회귀

 

Sigmoid Function(시그모이드 함수)

 로지스틱 회귀에서 가장 많이 사용하는 함수로, 0부터 1까지의 확률을 가능하게 해주는 함수 입니다.

Sigmoid Function(시그모이드 함수)은 다음과 같이 생겼습니다. 

 

$$sigmoid(z) = \frac{1}{1 + e^{-z}}$$

 

 

 지금부터는 예제를 통해 로지스틱 회귀(Logistic Regression)를 알아보도록 합시다. 

 

우선 필요한 라이브러리를 불러와줍니다.

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
#머신러닝 분석에 유용한 라이브러리
from sklearn.linear_model import LogisticRegression
#LogisticRegression: 시그모이드 함수
from sklearn.model_selection import train_test_split

 

 

그 다음 나이에 따른 보험유무 데이터를 불러줍니다. 

 

df = pd.read_csv('insurance_data.csv')

 

insurance_data.csv
insurance_data.csv
0.00MB

 

 

train_test_split함수를 사용하여 Test data와 Train data를 분리해줍니다. 아래 코드의 경우 Test data = 10%, Train data = 90%입니다. 

 

X_train, X_test, y_train, y_test = train_test_split(df[['age']], df.bought_insurance, test_size = 0.1)

 

 

로지스틱 회귀(Logistic Regression)로 모델을 만들어주고 Train data로 모델을 학습시켜줍니다. 

 

model = LogisticRegression()
model.fit(X_train, y_train)

 

 

그 다음 '.predict'함수를 이용하여 값을 예측해주고, 최종적으로 '.score'함수를 통해 모델이 잘 맞는지 확인해줍니다.  이 경우 score이 '1' 즉 100%로 상당히 잘 학습된것을 알 수 있습니다.

 

model.predict(X_test)

 

model.score(X_test, y_test)

 

오늘은 '로지스틱 회귀(Logistic Regression)'에 대해 알아보았습니다. 도움이 되셨나요? 만약 되셨다면 구독 및 좋아요로 표현해 주시면 정말 많은 힘이 됩니다. 저는 '코딩 오페라' 'Conductor'였습니다. 감사합니다.

 

 

<출처 및 참고 : 위키백과, code basics>

반응형