파이썬 - 선형회귀분석

김지수·2025년 6월 18일

선형회귀의 정의

  • 입력 변수(독립 변수)와 출력 변수(종속 변수) 사이의 선형적인 관계를 모델링하는 기법

  • 즉, 데이터를 가장 잘 설명하는 직선을 찾아내는 것

  • 광고비, 계절성, 요일 등의 데이터를 바탕으로 매출을 예측 / 수업 출석률, 과제 점수, 시험 점수를 이용해 최종 학점을 예측 / 키, 나이, 식습관 정보를 바탕으로 예상 몸무게 예측 등의 상황에서 선형회귀분석이 사용될 수 있음

수학적 표현

y=wx+b

  • y: 예측 값 (종속 변수)
  • x: 입력 값 (독립 변수)
  • w: 기울기 (slope)
  • b: 절편 (bias 또는 y절편)
  • 여기서 w와 b는 학습을 통해 결정되는 파라미터

훈련/검증 데이터 분할

# 속성(변수) 선택
X=ndf[['weight']] # 독립변수
Y=ndf[['mpg']] # 종속변수

# train data와 test data로 구분 (7:3 비율)
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,test_size=0.3,random_state=10)
print('train data 개수:', len(X_train))
print('train data 개수:', len(X_test))

모델 학습 및 검증

# sklearn 라이브러리에서 선형회귀분석 모듈 가져오기
from sklearn.linear_model import LinearRegression

# 단순회귀번석 모델 객체 생성
lr = LinearRegression()

# train data를 가지고 모델 학습
lr.fit(X_train, Y_train) # 학습에 사용되는 입력 데이터, 출력 데이터 

# 학습을 마친 모델에 test data를 적용하여 결정계수 계산
r_square = lr.score(X_test, Y_test)
print('결정계수:', r_square)

결정계수: 모델이 전체 데이터의 변동성을 얼마나 잘 설명하는가? 를 나타내는 수치
이때 R² = 0.85 라면, 85%의 연비 변화를 자동차 무게로 설명할 수 있다는 뜻

# 모델에 test data 데이터를 입력하여 예측한 값 y_hat을 실제 y와 비교
y_hat = lr.predict(X_test) # 학습된 모델 lr이 X_test를 보고 예측한 종속변수 

# 오차 계산
test_preds = pd.DataFrame(Y_test)
test_preds.columns = ['Y_test']
test_preds['y_hat'] = y_hat
# 실제값(Y_test)과 예측값(y_hat)을 비교
test_preds['squared_error'] = (test_preds['y_hat'] - test_preds['Y_test']) ** 2
test_preds
# 오차 분석
fig, axes = plt.subplots(1,2, figsize=(10,5)) # 1행 2열 구조 
sns.regplot(x='Y_test', y='y_hat', data=test_preds, ax=axes[0]);
# 그래프가 왼쪽에 뾰족하게 치우쳐 있으면 → 예측이 전반적으로 정확하다는 뜻
# 커널 밀도 추정을 이용해 데이터 분포를 부드럽게 표현
sns.kdeplot(x='squared_error', data=test_preds, ax=axes[1]);
profile
오늘 배운 것을 기록하며, 나만의 지식으로 만들어가는 성장 일지 💪🍀

0개의 댓글