Python

데이터분석_Logistic Regression(로지스틱회귀)

5시의그림자 2022. 10. 5. 10:01

로지스틱 회귀란 무엇인가

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

스팸 메일 분류기 같은 예시를 생각하면 쉽다. 어떤 메일을 받았을 때 그것이 스팸일 확률이 0.5 이상이면 spam으로 분류하고, 확률이 0.5보다 작은 경우 ham으로 분류하는 거다. 이렇게 데이터가 2개의 범주 중 하나에 속하도록 결정하는 것을 2진 분류(binary classification)라고 한다.

로지스틱 회귀를 이해하려면 우선 선형 회귀(Linear Regression)에 대한 개념을 먼저 익혀야 한다. 

 

상세한 내용은 링크를 타고 가시면 정말 아주 잘 설명되어있다.

(https://hleecaster.com/ml-logistic-regression-concept/)

 

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn import datasets
import sklearn
import pandas as pd

data = datasets.load_breast_cancer()
df = pd.DataFrame(data.data, columns = data.feature_names)
# 일부 feature만 사용
df = df[['mean radius', 'mean texture', 'mean area', 'mean symmetry']]

# 1이면 양성 종양, 0이면 악성 종양 라벨 열 지정
df['target'] = data.target

X = df[['mean radius', 'mean texture', 'mean area', 'mean symmetry']]
y = df['target']
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X,y, test_size = 0.2)

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

model.score(X_test, y_test)

# 로지스틱 모델 학습 성능 비교
y_pred = model.predict(X_test)

# 정확도 측정
accuracy_score(y_pred, y_test)

coef = pd.DataFrame({"feature_names":X.columns, "coefficient":model.coef_[0]})
coef

import statsmodels.api as sm

# for b0, 상수항 추가
X = sm.add_constant(X, has_constant = "add")

logit = sm.Logit(y, X)
result = logit.fit()
result.summary2()