새로워지기/마흔의 생활코딩

마흔에 정석을 다시 펼치다 01 for.딥러닝 (feat.회귀 이론)

청춘만화 2021. 7. 1. 10:28


딥러닝과 머신러닝을 배우기 위해 몇개월 전주식트레이팅 시스템을 목적으로 급하게 후려쳐서? 실습했던 파이썬을 다시 차근차근 공부하고 있다.
이 과정에서 매우 인상적인 경험을 하고 있다.
그 경험은 3년전인가? JAVA를 공부할때 보았던 자료구조에 대해 다시 들여다보고 있다. 그리고 30년...전인가? ㅎㄷㄷ.. (아, 물론... 당연히.. 라임을 맞추기 위해 MSG 좀 뿌려서..) 정석책을 펼쳤다.



아직 집에 있다는게 더 신기... =,.=



머신러닝은 기하와 백터를 기반으로 한다. 그리고 머신러닝은 기하와 백터를 텐서로, 사람?과거의 컴퓨팅?은 선형대수로 기하와 백터를 연산했다. 물론 이 둘은 상반된 방식이 아니라 선형대수가 확장되서 텐서가 되었다고 보면 될 것 같다. 그 선형대수는 벡터와 행렬를 기반으로 하고, 다시 이들은 배열, 미분, 적분을 기반으로 한다.
그리하여... 정석을 펼치게 되었다..
다행히 ;D 이 복잡한 수식들은 numpy 모듈을 통해 쉽게? 연산할 수 있다. 물론 선형대수를 상대해줄 numpy을 잘 사용하기 위해서는 다차원 숫자로 관리하는 배열 형태의 자료구조에 대해 이해하고 있어야 하기 때문에..
그리하여2... JAVA를 다시 들여다보고 있는 것이다.

TMI...
선형 대수학...은 개인적으로 아주 큰 인연이 있다... 말그대로 수 십년 전... 수능이 어설프게 좋아서.. 문과를 나오고도 정보통신학과에 특차로 입학했던 나는 대학교 1학년 1학기 이 선형대수 수업의 충격으로 군대로 도피. 전역 후 전과를 했던 기억이 있다...-,.- ㅋㅋㅋ 내가 대학생때 넘파이 모듈이 있었더라면... ㅜㅜ numpy는 2005년에 생김 ㅜㅜ.. 뭐냐.. 이 화석이 된 듯한 느낌적인 느낌은... ㅡ,.ㅜ 또르르..


그렇게 틈틈이 정석과 numpy를 보면서 딥러닝 공부 스타트 중이다.


머신러닝, 딥러닝

  • 기반을 이루는 회귀(예측) 이론
    • 수집된 과거 데이터 셋([..]x = 독립 변수들, y = 종속 변수)들을 통해 미래를 예측
    • 원인[x], 결과y를 그래프에 옮길 수 있으면
    • 그 점들의 패턴(선)을 통해 따라 미래를 예측할 수 있다.
    • 그래프의 점들이,
      • 연속적인 값(선형) = 회귀 ex) 미래의 학교 성적 예측
      • 이산적인 값 = 분류(로지스틱 회귀) ex) 미래의 성공, 실패 예측 또는 다중분류 예측


선형 회귀 linear regression( 미래를 예측하기 위한 예측 선)

  • 입력 값x 이 1 개일때
    • y = ax + b 
      • x = 독립 변수, y = 종속 변수
    • (일차 함수, 2차원 = 가중합 함수**) ⇒ 최소제곱법 or 경사하강법**
      • ex) 학생의 성적y은 [ 정보.. ]x에 따라 다르다.
    • 예측선, 일차 함수를 제대로 표현하기 위해
      • a(기울기)와 b(절편, 편향)가 필요
      • a(가중치, 중요도), b(임계값) 값을 통해 y를 결정하는 패턴 파악
      • 최소제곱법( 단, 종속 변수y를 결정하는 독립변수 x가 1개일때만 적용 가능)
      • 가장 정확한 직선(예측 선)을 긋기 위한 기울기a를 찾는 공식
    • 기울기 = x와 y의 편차를 곱해서 합한 값 / x의 편차(각 값과 평균과의 차이)를 합한 값
      • a = (x-x평균)(y-y평균)의 합 / (x-x평균)**2의 합

 

  • 입력 값x 이 여러 개일때
  • 그래프의 점들이 한 선 위에 있지 않기 때문에 그 사이로 선을 긋되 예측 선을 그릴때 각 점과의 오차를 파악하여 최대한 많은 점에 가깝게 그리는 과정이 필요
    • 오차 = 실제값 - 예측값
    • 오차들의 크기(합) = 오차들이 +, -가 나올 수 있기 때문에 전체를 '제곱'
    • 평균제곱오차(평가법) MSE mean square error
      • 처음에는 정확한 오차를 알 수 없기 때문에 그리는 임의(예측)선이 실제값과의 오차를 **평가, 개선(**그 값을 줄여가는)하는 방법
        • 임의의 예측선 그리기
        • 실제값과 예측선을 비교하여 오차평가 = 실제값 - 예측값 = Y - Y_pred

오차그래프

  • 미분의 성질
    • f(x)=a에서 a가 상수(변하지 않는 수)일 때 미분값은 0
    • f(x)=x일때 미분값은1
    • f(x)=ax에서 a가 상수이면 미분값은 a
    • f(x)=$x^a$에서 a가 자연수이면 미분값은 $ax^{a-1}$


경사 하강법

  • 평균제곱오차을 위해 예측선의 평가를 개선시키는 '전처리 작업'
    • 평균제곱오차(평가법) MSE에 예측선y_pred 대입
    • Y_pred = ax+b
    • $1/n\sum(Y-Ypred)^2$ → $1/n\sum(Y-(ax+b))^2$


편미분(, a는 상수)

  • $f(x_1, x_2) = x_1^2 + x_1x_2+a$ 와 같이
    • 여러 변수가 식 안에 있을때, 모든 변수를 미분하는 것이 아니라
    • 원하는 한가지 변수만 미분하고 그 외에는 모두 상수 취급하는 것
  • f(x1, x2)를 편미분 한다
    • $∂f/∂x=2x_1 + x_2$
  • a편미분 = ∂/∂a$MES$$(a, b)$ =2/n $\sum$ (ax+b-y)x = -(2/len(x)) * sum(x *(y - y_pred))
  • b편미분= ∂/∂b$MES$$(a, b)$ = 2/n$\sum$(ax+b-y) = -(2/len(x)) * sum(y - y_pred)



음.. 역시.. 티스토리 기본 설정에서는 포스팅에.. 한계가 있다..
결국, 다시 노션 링크
https://www.notion.so/thinknormal/41c12d969d8948da83d108e703fab227

 

회귀 이론

머신러닝, 딥러닝

www.notion.so





그리고
회귀이론과 관련한
실습내용들
최소제곱법(단순선형회귀 | 2차원 함수)

 

최소제곱법(단순선형회귀 | 2차원 함수)

학생 성적 데이터 셑 x = [2,4,6,8] y= [81,93,91,97]

www.notion.so

경사하강법(단순선형회귀 | 2차원 함수)

 

경사하강법(단순선형회귀 | 2차원 함수)

학생 성적 데이터 셑 x = [2,4,6,8] y= [81,93,91,97]

www.notion.so

경사하강법(다중 회귀 | 다 차원 함수)

 

경사하강법(다중 회귀 | 다 차원 함수)

학생 성적 데이터 셑 x1 = [2, 4, 6, 8] + x2 = [0, 4, 2, 3] y= [81, 93, 91, 97]

www.notion.so

경사하강법(로지스틱 회귀 | 이진분류)

 

경사하강법(로지스틱 회귀 | 이진분류)

학생 성적 데이터 셑 x = [2, 4, 6, 8, 10, 12, 14] y= [0, 0, 0, 1, 1, 1, 1] #0 = 불합격, 1 = 합격

www.notion.so