로지스틱 회귀 모델

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 파이썬의 scikit-learn 라이브러리를 사용하여 로지스틱 회귀 모델을 만드는 단계별 가이드를 제공합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습용 Jupyter Notebook에 접근할 수 있습니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

필요한 라이브러리 가져오기

첫 번째 단계는 이 실습에서 사용할 필요한 라이브러리를 가져오는 것입니다. numpy, matplotlib, scipy, 그리고 sklearn을 사용할 것입니다.

import matplotlib.pyplot as plt
import numpy as np
from scipy.special import expit
from sklearn.linear_model import LinearRegression, LogisticRegression

가상 데이터셋 생성

다음 단계는 가우시안 노이즈가 포함된 직선 형태의 가상 데이터셋을 생성하는 것입니다. numpy를 사용하여 이 데이터셋을 생성합니다.

## 가상 데이터셋 생성, 가우시안 노이즈가 포함된 직선입니다.
xmin, xmax = -5, 5
n_samples = 100
np.random.seed(0)
X = np.random.normal(size=n_samples)
y = (X > 0).astype(float)
X[X > 0] *= 4
X += 0.3 * np.random.normal(size=n_samples)

X = X[:, np.newaxis]

분류기 학습

데이터셋을 생성한 후, scikit-learn 의 LogisticRegression을 사용하여 분류기를 학습합니다.

## 분류기 학습
clf = LogisticRegression(C=1e5)
clf.fit(X, y)

결과 시각화

마지막 단계는 결과를 시각화하는 것입니다. matplotlib를 사용하여 예시 데이터의 산점도를 그리고, 로지스틱 회귀 모델과 선형 회귀 모델을 함께 표시합니다.

## 결과 시각화
plt.figure(1, figsize=(4, 3))
plt.clf()
plt.scatter(X.ravel(), y, label="예시 데이터", color="black", zorder=20)
X_test = np.linspace(-5, 10, 300)

loss = expit(X_test * clf.coef_ + clf.intercept_).ravel()
plt.plot(X_test, loss, label="로지스틱 회귀 모델", color="red", linewidth=3)

ols = LinearRegression()
ols.fit(X, y)
plt.plot(
    X_test,
    ols.coef_ * X_test + ols.intercept_,
    label="선형 회귀 모델",
    linewidth=1,
)
plt.axhline(0.5, color=".5")

plt.ylabel("y")
plt.xlabel("X")
plt.xticks(range(-5, 10))
plt.yticks([0, 0.5, 1])
plt.ylim(-0.25, 1.25)
plt.xlim(-4, 10)
plt.legend(
    loc="lower right",
    fontsize="small",
)
plt.tight_layout()
plt.show()

요약

이 실습에서는 파이썬의 scikit-learn 라이브러리를 사용하여 로지스틱 회귀 모델을 단계별로 만드는 방법을 안내했습니다. 필요한 라이브러리를 가져오고, 가상 데이터셋을 생성하고, 분류기를 학습시키고, 마지막으로 결과를 시각화하는 과정을 다루었습니다.