[파이썬] 미국 경제 데이터셋으로 머신러닝 배우기 2 <경사 하강법>

2024. 12. 30. 23:14·Coding & Data Analysis/Python

데이터

R의 ggplot2 라이브러리의 "economics" 데이터를 활용했습니다. 

https://ggplot2.tidyverse.org/reference/economics.html

 

US economic time series — economics

This dataset was produced from US economic time series data available from https://fred.stlouisfed.org/. economics is in "wide" format, economics_long is in "long" format.

ggplot2.tidyverse.org

 

 

경사하강법

x = df.loc[:,'pce'].values.reshape(-1,1)
y = df.loc[:,'psavert'].values.reshape(-1,1)

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train)
x_test_scaled = scaler.transform(x_test)

from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(x_train_scaled,y_train)

일반적인 LinearRegression 함수는 RSS(Residual Sum of Squares)의 최소화를 통해 최적화를 한다.

예측된 값과 실제 값의 차이를 최소화하는 방식으로 직선을 구하는데,

이상치에 취약하고 규모가 커질수록 계산량이 매우 늘어난다.

 

그래서 사용할 수 있는 다른 회귀분석 방법이 경사하강법(Gradient Descent) 이다.

손실 함수의 기울기를 구하고, 경사의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다.

손실 함수는 아래로 볼록한 함수이기에 극값 = 최솟값이다.

수식을 통해 더 깊이 이해할 수 있지만, 개괄적인 부분만 일단 다루도록 하자.

 

데이터 스케일링

이러한 방법은 규모가 큰 데이터에서도 무리없이 계산을 수행할 수 있지만,

기존과도 비슷하게 이상치에 취약하다는 단점이 있다. 기울기가 한번 튀게 되면 걷잡을 수 없다.

그래서 데이터를 표준정규분포에 따르게끔 만드는 과정을 "스케일링(Scaling)" 이라고 한다.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train)
x_test_scaled = scaler.transform(x_test)

➡️ fit_transform 함수를 통해 데이터를 표준화한다.

➡️ 독립변수가 기울기에 영향을 미치기에 독립변수만 수행한다. 종속변수는 오차 계산용.

 

이러한 스케일링 과정은 경사하강법에서는 필수이고, 머신러닝 모델의 학습 전에 일반적으로 진행한다.

 

 

모델 생성 및 비교

from sklearn.linear_model import SGDRegressor
sr = SGDRegressor(max_iter=1000, eta0=0.001, verbose=1)
sr.fit(x_train_scaled,y_train.flatten())

여기서 경사 하강법의 개념 몇 가지를 알아야 한다.

  • 에포크(Epoch) : 데이터 전체 를 활용해 손실 함수의 그래프를 타고 내려가는 한 주기
  • 학습률 : 한 번 학습 할 때 이동하는 정도

에포크의 최대 수행 횟수를 max_iter, 학습률을 eta0, 학습 과정 표시 여부를 verbose 로 조절한다.

plt.scatter(x_train_scaled,y_train, s = 5, alpha = 0.3, c = 'blue')
plt.plot(x_train_scaled,sr.predict(x_train_scaled), c = 'green', label = 'sgd')
plt.plot(x_train_scaled,reg.predict(x_train_scaled), c = 'orange', label = 'lr')
plt.xlabel('pce(billions)')
plt.ylabel('saving rate')
plt.legend()
plt.show()

전 포스팅의 LinearRegression 모델과 비교하니 비슷한 걸 알 수 있다. 데이터가 작으니..

print(sr.t_)
print(sr.score(x_test_scaled,y_test))

➡️ sr.t_ : 경사하강법 모델의 학습 횟수

 

 

'Coding & Data Analysis > Python' 카테고리의 다른 글

[파이썬] airquality 데이터셋으로 머신러닝 배우기 <다항 회귀>  (1) 2025.01.04
[파이썬] iris 데이터셋으로 머신러닝 배우기 <다중선형회귀 & 평가지표>  (0) 2025.01.02
[파이썬] 미국 경제 데이터셋으로 머신러닝 배우기 <선형회귀>  (1) 2024.12.27
파이썬 데이터 분석 쌩 기본기 : matplotlib 시각화 기초 (2)  (1) 2024.12.26
파이썬 데이터 분석 쌩 기본기 : matplotlib 시각화 기초 (1)  (0) 2024.12.26
'Coding & Data Analysis/Python' 카테고리의 다른 글
  • [파이썬] airquality 데이터셋으로 머신러닝 배우기 <다항 회귀>
  • [파이썬] iris 데이터셋으로 머신러닝 배우기 <다중선형회귀 & 평가지표>
  • [파이썬] 미국 경제 데이터셋으로 머신러닝 배우기 <선형회귀>
  • 파이썬 데이터 분석 쌩 기본기 : matplotlib 시각화 기초 (2)
흑석동사는시골쥐
흑석동사는시골쥐
문과 경영학도 숫자 배우기 프로젝트
  • 흑석동사는시골쥐
    NaN
    흑석동사는시골쥐
  • 전체
    오늘
    어제
  • 링크

    • 독서 일지
    • 올리고 싶은 거 올려요
    • 분류 전체보기 (75)
      • Coding & Data Analysis (52)
        • Python (23)
        • R (21)
        • Excel & Data (2)
        • Git & Github (4)
        • Certificate (2)
      • Project (15)
        • 일자리 스크래핑 서비스 (8)
        • 최적의 인스타 피드 (2)
        • 주식 & 비트코인 분석 (5)
      • Economics (1)
        • 경제기사 스크랩 (1)
      • Records & Thoughts (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    데이터
    주식
    주가분석
    웹스크래퍼
    FLASK
    엔비디아
    코랩
    adsp공부법
    Colab
    matplotlib
    심장병 데이터
    데이터수집
    ADSP
    Python
    다항회귀
    AI반도체
    git
    동아리
    비전공자
    프로그래밍
    자격증
    머신러닝
    r
    파이썬
    지도
    기초
    개발
    전처리
    시각화
    데이터분석
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
흑석동사는시골쥐
[파이썬] 미국 경제 데이터셋으로 머신러닝 배우기 2 <경사 하강법>
상단으로

티스토리툴바