PINBlog Gitea Repository


05. Regression


Regression

Linear Regression, Logistic Regression


선형 회귀 (Linear Regression)

선형 회귀는 연속적인 값을 예측하기 위한 회귀 알고리즘입니다. 주로 종속 변수와 독립 변수 간의 선형 관계를 모델링하는 데 사용됩니다.

수식

​ (y = \beta_0 + \beta_1x_1 + \beta_2x_2 + … + \beta_nx_n + \epsilon)

목적

오차 항 ϵ의 제곱합을 최소화하는 회귀 계수를 찾는 것입니다.

사용 사례

주택 가격 예측, 연봉 예측, 판매량 예측 등 연속적인 값을 가지는 대상을 예측할 때 사용됩니다.


예제 코드

Code View

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import numpy as np

# 예제 데이터 생성
X = np.random.rand(100, 1) * 10  # 100개의 랜덤 데이터
y = 2.5 * X + 5 + np.random.randn(100, 1) * 2  # y = 2.5x + 5 + 잡음

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 선형 회귀 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)


diabetes 데이터셋 활용

개요

- 위스콘신 대학의 유방암 진단 데이터셋으로, 유방암 종양의 임상 정보를 기반으로 악성(malignant) 또는 양성(benign)으로 분류하는 문제에 사용됩니다.

특징

- 30개의 특징 변수가 있으며, 이는 종양의 다양한 특성(크기, 반경, 질감 등)을 나타냅니다.

목표 변수

- 종양이 악성인지(1) 양성인지(0)를 나타내는 이진 값입니다.

용도

- 이 데이터셋은 주로 분류 문제에 사용됩니다.

속성

- age: 나이
- sex: 성별
- bmi: 체질량지수
- bp: 평균 혈압
- s1 ~ s6: 6개의 혈청 측정값
Code View

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 데이터 로드
diabetes = datasets.load_diabetes()
X = diabetes.data[:, np.newaxis, 2]  # BMI feature만 사용
y = diabetes.target

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 선형 회귀 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")


로지스틱 회귀 (Logistic Regression)

로지스틱 회귀는 이름에 ‘회귀’가 들어가지만, 분류 문제에 사용되는 알고리즘입니다. 주로 이진 분류 문제에 사용되며, 확률을 출력으로 가집니다.

수식

목적

사용 사례

Code View


from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 예제 데이터 생성
X = np.random.rand(100, 1) * 10  # 100개의 랜덤 데이터
y = (X > 5).astype(int).ravel()  # X가 5보다 크면 1, 아니면 0

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 로지스틱 회귀 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)


breast_cancer 데이터셋 활용

개요

  • 위스콘신 대학의 유방암 진단 데이터셋으로, 유방암 종양의 임상 정보를 기반으로 악성(malignant) 또는 양성(benign)으로 분류하는 문제에 사용됩니다.

특징

  • 30개의 특징 변수가 있으며, 이는 종양의 다양한 특성(크기, 반경, 질감 등)을 나타냅니다.

목표 변수

  • 종양이 악성인지(1) 양성인지(0)를 나타내는 이진 값입니다.

용도

  • 이 데이터셋은 주로 분류 문제에 사용됩니다.

Code View

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 데이터 로드
cancer = datasets.load_breast_cancer()
X = cancer.data
y = cancer.target

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 로지스틱 회귀 모델 학습
model = LogisticRegression(max_iter=10000)  # max_iter를 증가시켜 수렴을 도움
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print(f"Accuracy: {acc*100:.2f}%")


참고