카테고리 없음

머신러닝(8) Logistic Regression으로 데이터 예측하기

개발연습자1 2022. 12. 1. 22:32

Logistic Regression이란 0에서 1사이의 값으로 선을 그려 데이터를 예측하는 방법이다.

 

좀 더 쉽게 그림으로 알아보자

 

 

 

어떤 회사에서 자신들의 홍보메일을 클릭하는 사람들을 알아보았다 생각해보자. 홍보메일을 클릭한 사람들은 클릭했다는 의미로 1이 되고 홍보메일을 클릭하지 않은 사람들은 클릭을 안했다는 의미로 0이된다. 0과 1 이 두개의 데이터가 주를 이루어 그래프를 그렸다 생각하자 선은 그려지지 않겠지만 0과 1의 점들은 많을것이다.

 

이걸로 예측하는 방법이 바로 Logistic Regression이다.

 

먼저 저 그래프에 선을 그린다고 해보자

 

이렇게 선이 그려질것이다 여기서 주목할점은 저 선의 절반을 기준으로 절반 위쪽은 눌렀다 판단하고 아래쪽은 안눌렀다고 판단 할수 있는것이다.  

 

 

그래프 선에 대한 일차 방정식이 세워지고 LinerRegression과 같이 Logistic Regression도 인공지능은 일차방정식속에서 계수와 y절편을 바꿔 값을 찾을것이다. 이것으로 우리가 Logistic Regression의 예측 방법도 알수 있는것이다.

 

 

이제부터 Logistic Regression을 파이썬 환경에서 해보자

 

# 데이터 프레임을 다루기 위한 라이브러리 호출

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 나이와 연봉으로 분석해서, 물건을 구매할지 안할지를 분류하자!!
# 데이터 불러오기

df= pd.read_csv('../data/Social_Network_Ads.csv')
df.head()

데이터 중 상위 5개만 출력할때 모습이다. 데이터를 보면 나이와 연봉별로 데이터가 나와있고 구매 여부는 0과 1로 표현하였다.

 

X데이터와 y데이터로 나눠서 데이터를 가공한다.  이때 X데이터는Age, EstimatedSalary 칼럼을 쓰고 y데이터는Purchased를 쓴다 

 

#데이터 슬라이싱으로 나눈다.

X=df.loc[:,"Age":"EstimatedSalary"]
y=df['Purchased']

 

데이터 가공 단계는 앞에서 다뤘고 앞에서 했던 방법과 똑같으므로 생략한다.

 

이제  Logistic Regression을 써보자

 

#구매를 할지 말지 여부에 대한, 인공지능 개발
#할지말지 => 분류의 문제!!

#LogisticRegression 함수호출
from sklearn.linear_model import LogisticRegression

#LogisticRegression을 classifier로 저장한뒤
#X_train데이터 y_train데이터를 넣는다.
classifier = LogisticRegression(random_state=1)
classifier.fit(X_train,y_train)

이렇게 뜨면 학습이 끝난거다 이제 Linear Regression과 같이 예측과 더불어 검증을 해보자

 

#X_test데이터를 예측에 대입하고 y_pred에 저장한다.
y_pred=classifier.predict(X_test)

y_pred
>>> array([0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1,
           1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
           1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1,
           0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0], dtype=int64)

 

y_test값은 실제 결과 값 데이터로 저 값과 비교할 수 있다.

 

y_test.values
>>> array([0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1,
           1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0,
           1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1,
           0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0], dtype=int64)

 

어렴풋이 정확하다는것을 알 수 있다. 

 

하지만 이걸로는 정확히 알 수 없으니 정확히 알아보기 위해 Confusion Matrix를 쓴다.

 

 

Confusion Matrix는 그림과 같이 예측과 실제의 데이터를 기반으로 행렬을 만들고

 

A는 0인 값이 0인 걸 맞춘 횟수

B는 0인 값이 1로 못맟춘 횟수

C는 1인 값이 0으로 못맞춘 횟수

D는 1인 값이 1인 걸 못맞춘 횟수

 

로 나눈다. 

 

여기서 정확도는 (A+D) / 전체값으로 구할수 있고 이 값이 인공지능의 성능 지표이다.

 

적중율도 D/(C+D) 으로 구할 수 있고 인공지능의 정확성을 나타낸다. 

 

이제 Confusion Matrix로 정확도,적중율을 구해보자 

 

#confusion matrix 함수 호출

from sklearn.metrics import confusion_matrix

#0과 1로 분류하는 문제
#따라서 y_test 값도 0과 1, y_pred 값도 0과 1

#y_test의 0과 1은 행으로 셋팅하고, y_pred 0과 1은 열로 셋팅합니다.

confusion_matrix(y_test, y_pred)

>>> array([[42,  6],
           [ 8, 24]], dtype=int64)

출력값이 위에 그림처럼 나왔다는 것을 알수 있다.  이제 정확도를 구해보자

 

#정확도 함수 호출
from sklearn.metrics import accuracy_score

#정확도
accuracy_score(y_test,y_pred)

>>> 0.825

정확도는 82%정도 나온다.

 

#적중율은 계산하여 구해본다.

24/(24+8)
>>> 0.75

적중율은 75%정도 나온다.

반응형