딥러닝과 머신러닝을 배우기 위해 몇개월 전주식트레이팅 시스템을 목적으로 급하게 후려쳐서? 실습했던 파이썬을 다시 차근차근 공부하고 있다.
이 과정에서 매우 인상적인 경험을 하고 있다.
그 경험은 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의 합
- y = ax + b
- 입력 값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
그리고
회귀이론과 관련한
실습내용들
최소제곱법(단순선형회귀 | 2차원 함수)
'새로워지기 > 마흔의 생활코딩' 카테고리의 다른 글
프로토타이핑 툴에 대한 소고 (0) | 2021.07.10 |
---|---|
마흔에 정석을 다시 펼치다 02 for.딥러닝 (feat.퍼셉트론) (0) | 2021.07.06 |
블록체인에 왠 시큐어 코딩이냐고?! (0) | 2021.06.09 |
까이꺼 인공지능(NLP 자연어 처리 : word2vec, LexRank ) (0) | 2021.06.08 |
마흔에 블록체인) 하이퍼레저 페브릭 실습 01~ 03 (0) | 2021.06.05 |
댓글