x 리스트, y리스트가 있고. 둘의 관계를 f(x)로 정의하고 있을 때
x와 y의 요소들을 통해 f(x)를 찾아낸는 것이 선형회귀이다.
찾아내는 법은 f(x)=wx+b를 우리의 목표라고 한다면
아직 알지못하는 f(x)를 찾기위해 값을 마구잡이로 집어넣을 실험체인
H(w, b) 함수가 있다고 하고.
실제 f(x)를 찾기 위해서 리스트의 값으로 이루어진 좌표들과,
실험체 H(w,b)에 리스트들의 값을 넣은 값들의 차이가
가장 작게나오도록 하는 함수H(w,b)를 끊임없이 계산해서 찾게 만든다.
위의 요소들마다의 차이들을 제곱해서 모두 더한후, 그 요소의 갯수만큼 나눠주게 된다는...
그런 구체적인 계산방식으로 가장 f(x)에 가까운 H(w,b)를 찾게 되는데 이 구체적 계산방식을
cost(w,b). 즉 최소제곱법이라고 한다.(비용함수라고도 함.)
이 cost(w,b)가 가장 작게 나오는, 정확히는 제곱의 합이 가장적게 나오는 함수H를 찾는 것이다.
(나누는 요소의 갯수는 상관x // 중요한건 제곱의 합이 최솟값인것을 찾는것이기 때문)
(거리 값에는 음수가 있을 수 있고, 조건문 사용을 피하고자 절댓값이 아닌 제곱과 나눗셈을 이용해서 근사치를 찾도록 했다.)
1.경사하강법으로 구하기(머신러닝 방식)
cost라는 함수는 제곱의 합이 최솟값이 중요하며, 제곱이라는 값이 커지면, 1/n은 크게 중요하지 않게 된다.
그리고 cost함수는 2차함수 그래프의 모양을 띄게 되는데..
기존의 f(x)의 w의 값에 가장 가까워질수록 0과 가까워지다가, 다시 양수든 음수든 0과 멀어질수록 값이 기하급수적으로 불어나기 때문이다.
저 기울기가 0이되는 지점이자 우리가 찾는 w값이 있는 cost 함수의 지점을 Global optimum이라 한다.
저 cost의 그래프를 뜯어보면 각 w를 넣은 지점의 기울기를 살펴보면
- 기울기가 음수라면 w를 오른쪽으로 보내기. 즉 w값을 더해줘야하고.
- 기울기가 양수라면 w를 왼쪽으로 보내기. 즉 w값을 빼줘야 한다.
는 특징을 알수 있다. 위의 기울기를 변경해나가는 과정을 경사하강법이라 한다.
그렇다면 b값은?
마찬가지로 2차원 형태를 띄게 된다.
위처럼 x,y의 리스트 요소들로 함수 f(x)가 있을 때 b값만을 변경해보면 기울기를 위한 w는 안바뀌기에 위치만 이동한다.
저 좌표에 대해 함수가 멀어질 수록 값이 제곱만큼 증가하게 된다.
그러니 b도 똑같은 2차방정식의 모양을 띄게 된다.
우리는 w와 b 모두 각각 따로 비교를 통한 update를 진행해서 f(x)에 가깝게 함수H(w,b)를 만들어내야 하는 것이다.
어떻게? w,b의 기울기가 각각 0이될때! 그때가 w의 global optimum이자, b의 global optimum 임.
w,b 각각 비교를 해줘야 한다. => 각각 기울기를 구해줘야한다. => 결국 미분이 필요하다.
우리가 필요한건 w,b의 미분값들이지. 이미 리스트에 정해진 상수들인 x,y값이 아님.
그래서 편미분을 통해. w와 b를 기준으로만 따로빼서 미분이 가능함
(2차 이상은 차수를 그냥 내리면 되고, 1차는 기준이 되는 값을 없애주기만 하면 됨) 정확한 기울기는 1/n까지 해주면 된다.
저 맨위의 값에도 미미한 수치라 1/n이 생략되어있다.
생략하는 이유는 다시한번 말하지만.. w,와 b의 조합을 구하게는게 우리의 목표지.
w,b,x,y의 조합의 합을 n으로 나눈 값을 구하는게 우리의 목표가 아니기 때문이다.
<전반적 과정>
-구체적 업데이트 방법-
목표는 f(x)의 w 값과 가장 가까운 H(w,b)의 w로 업데이트 해나가는것.(빼주는 기울기가 0이 될때까지가 목표임.)
w의 미분값을 구해서, 작은 값으로 만든 다음 w에 빼주게 되면 일단 절댓값이 계속 w와 가깝게 작아지게끔하는 거임.
만약 기울기 빼줘서 H(w,b)의 w가 음수가 됬다하면 그 다음H(w,b)의 기울기는 음수인 것이고. 그렇다면 음수값은 다시 미분이 되어 빼주게 되면 양수값으로 다시 가게되고. 절댓값은 미분해서 계속 빼주고 있으니 계속 f(x)의 절댓값에 향하도록 절댓값이 미세하게 계속 줄어들어가는 것이다.
미세 공정을 위해 a(알파)값을 곱하기 까지 햇으니 미세공정은 많이 하면할수록 원하는 값에 도달하기 때문에 계속 미분과 빼기, 미분과 빼기,미분과 빼기의 반복을 통해 절대값을 원하는 절대값으로 깎아나가는 과정이라고 하겠다.
(미세하게 계속 균형잡기 하는 느낌).
b또한 위의 설명과 같다.
2.행렬과 공분산, 분산을 통해 구하는 방식(사람이 구하는 방)
업데이트 할 때 빼주는 기울기 값들을 뜯어보면 아래와 같이 식을 나타낼 수 있는데.,,
이걸 연립2차방정식을 통해서 계산해보도록 하겠음.
우선 w와 b의 기울기를 각각 저렇게 식 두개로 전환.
먼저 w기울기 식, b의 기울식 2개를 통해 아래처럼 행렬로 정의 해준뒤.
https://elecch.tistory.com/220 (모르겠으면 출처를 참고하자.)
크래머 공식을 통해 w를 구한다.
그다음에
E(x) = 각각의 x값들 더하기/ x의 갯수 (x에 대한 기댓값. 흔히 평균값이라 칭하는 편)
이 E(x)로 아래와 같이 변환이 가능해진다. (변환도중 1/n과 n이 상쇄되어 날라간다. )
아래와 같이 정분산(cov)/분산(var)로 식을 변환.
w는 이렇게 간단히 정리가 가능해진다.
b또한 과저은 비슷하지만. 상수이기 때문에 xi가 없는게 w와 다르다.
w = (xiw+b-yi) * xi
b = (xiw+b-yi)
연립을 통한 행렬 변화와, 크래머를 쓰지 않고 아래처럼 간단하게 (E(x) = 1/n * 합 )으로 바꾸는 것만 사용.
오른쪽 식의 n소거를 위해 n으로 나눠주면 가볍게 E(x)의 형태가 나온다.
식 활용
w = 공분산/ 분산 ,
https://math100.tistory.com/101
분산분석에서 분산 구하는 공식
먼저 분산분석이란 “3개 이상의 모집단 평균이 서로 같은지를 비교하는 분석”이라고 했었는데, 분산분석은 분산을 활용해서 평균이 서로 같은지를 비교한다. 그래서 분산분석을 할 때는 당연
math100.tistory.com
분산은 위의 출처 설명을 참고해보자.(n을 생략해도 되는 이유까지 적어놓았다.)
위에서는 각 x 요소들의 제곱의 합 - 기댓값의 제곱 하여 w값을 구한뒤에
w 값을 b식인 E(y) - E(x)*w에 대입하여 b값도 구해줌.
출처: https://www.youtube.com/watch?v=ve6gtpZV83E&t=140s
'📊python > 파이썬, 데이터분석' 카테고리의 다른 글
1주차 후기[데이터분석 및 연습하는 곳] (0) | 2023.03.08 |
---|---|
캐글 첫사용 후기 (0) | 2023.03.03 |
파이썬 데이터분석(6)[numpy 여러 메서드들][pycharm 기준] (0) | 2023.02.21 |
파이썬 데이터분석(4)[numpy 기초][pycharm 기준] (0) | 2023.02.20 |
파이썬 데이터분석(3)[파일 경로 설정] (0) | 2023.02.20 |