AI/MachineLearning

회귀분석 알고리즘 구현

2021. 6. 4. 08:25
목차
  1. 회귀 분석의 절차

회귀 분석의 절차

  1. X라는 값이 입력되면 Y = 베타0 + 베타1*X라는 계산식을 통해 값을 산출하는 예측 함수를 정의한다.
  2. 실제 값 y와 예측 함수를 통해 도출된 예측값 pred_y간의 차이를 계산한다.
  3. 계산한 차이에 기반하여 베타0와 베타1를 업데이트하는 규칙을 정의하고 이를 바탕으로 베타0와 베타1의 값을 조정한다.
  4. 위의 과정을 특정 반복 횟수(iteration) 만큼 반복한다.
  5. 반복적으로 수정된 베타0와 베타1를 바탕으로  Y = 베타0 + 베타1*X라는 회귀식을 정의한다. 
import numpy as np
import matplotlib.pyplot as plt

# 데이터를 생성하고 반환하는 함수
def load_data():
    
    X = np.array([[8.70153760], [3.90825773], [1.89362433], [3.28730045], [7.39333004], [2.98984649], [2.25757240], [9.84450732], [9.94589513], [5.48321616]])
    y = np.array([[5.64413093], [3.75876583], [3.87233310], [4.40990425], [6.43845020], [4.02827829], [2.26105955], [7.15768995], [6.29097441], [5.19692852]])
    
    return X, y

def prediction(beta_0,beta_1,X):
    
    pred_y = beta_0 + beta_1 * X
    
    return pred_y
    
def update_beta(beta_0,beta_1,X,loss,lr):
    
    # 이는 임의로 정할 수 있으나 기존 라이브러리에 있는 식으로 진행
    delta_0 = -(lr*(2/len(loss))*(np.dot(X.T, loss)))
    
    delta_1 = -(lr*(2/len(loss))*np.sum(loss))
    
    return delta_0, delta_1
    
def gradient_descent(X, y, iters, lr):
    
    # np.zeros는 초기화값을 0으로 해줌/ 1,1은 shape을 의미
    beta_0 = np.zeros((1,1))
    beta_1 = np.zeros((1,1))
    
    for i in range(iters):
        
        loss = y - prediction(beta_0, beta_1, X)
        
        beta0_delta, beta1_delta = update_beta(beta_0,beta_1,X,loss,lr)
        
        beta_0 -= beta0_delta
        beta_1 -= beta1_delta
        
        # 100번의 학습마다 그래프 출력하기
        if i%100==0:
            print("학습 횟수 :",i)
            plotting_graph(X,y,beta_0,beta_1)
        
    return beta_0, beta_1


# 그래프를 시각화하는 함수
def plotting_graph(X,y,beta_0,beta_1):
    
    y_pred = beta_0 + beta_1[0,0] * X
    
    fig = plt.figure()
    
    plt.scatter(X, y)
    plt.plot(X, y_pred,c='r')
    
    plt.savefig("test.png")
    elice_utils.send_image("test.png")


# 회귀 알고리즘 구현 진행을 위한 main() 함수
def main():
    
    # 학습을 위해 필요한 파라미터
    lr = 1e-4
    iteration = 1000
    
    X, y = load_data()
    
    beta_0, beta_1 = gradient_descent(X, y, iteration, lr)
    
    print("{}번의 학습 이후의 회귀 알고리즘 결과".format(iteration))
    print("beta_0:",beta_0[0], "beta_1:",beta_1[0])
    
    plotting_graph(X,y,beta_0,beta_1)
    
    return beta_0, beta_1

if __name__=="__main__":
    main()

출처: 앨리스 교육

반응형
저작자표시 (새창열림)
  1. 회귀 분석의 절차
'AI/MachineLearning' 카테고리의 다른 글
  • 다항 회귀 모델 구현
  • 단순 선형 회귀 모델 구현
  • 과적합과 정규화
  • 회귀분석
향식이
향식이
성장을 무기로, 성실함을 필살기로 가지고 있습니다.
향식이
향식이의 군침 싹 도는 개발일기
향식이
전체
오늘
어제
  • 분류 전체보기
    • Language
      • Python
      • Java
    • Database
      • Mysql
    • Infra
      • Docker
      • Airflow
    • Develop
      • DevCourseTIL
      • TroubleShooting
      • ComputerScience
      • Tech-review
    • Framework
      • Django
    • AI
      • MachineLearning
    • Medical
      • Term
    • Daily
      • TMI
      • Book
    • ETC
      • JupyterLab

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 중요한 건..
  • https://github.com/hyangsso
  • It's no fun if it's easy, BINGO ⋯

인기 글

태그

  • 데이터
  • Kafka
  • 예제
  • 판다스
  • Docker
  • Pandas
  • 과적합
  • tensorflow
  • Review
  • airflow
  • 알고리즘
  • 가중치
  • 파이썬
  • 파이프라인
  • 해결
  • 텐서플로
  • Python
  • 기술
  • groupby
  • Compose
  • 오류
  • 견고한
  • 머신러닝
  • tech
  • 퍼셉트론
  • error
  • 인공지능
  • 정규화
  • 코드
  • MySQL

최근 댓글

최근 글

hELLO · Designed By 정상우.
향식이
회귀분석 알고리즘 구현
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.