y = ax + b
머신러닝은 x, y가 주어질 때 기울기(a)와 절편(b)을 구한다 (x는 입력, y는 타깃)
sklearn →예제데이터셋들을 포함한 머신러닝 라이브러리
보통 행-샘플, 열- 특성
타깃과 예측값
만든 모델로 계산한 타깃 = 와이햇
입력, 타깃 데이터는 예제 데이터에 미리 준비됨. 이를 이용해 최적의 w, b 찾은 후 임의의 x 집어넣어 예측값을 얻음
1번~ 3번 과정
w값을 임의로 조정 후 결과값이 타깃 y와 가까워졌는지를 확인함
→ 타깃에 조금 더 가까워졌기 때문에 w 값을 증가시킨 것이 올바른 결정이라는 것을 알아냄
x[0]가 양수이냐 음수이냐에 따라 w를 증가시킬지 감소시킬지가 바뀔 수 있음
위 그래프는 w와 y_hat의 관계
w_rate = 음수 일 때→ w_new는 줄어듦
w_rate = 양수 일 때→ w_new는 늘어남
w_new = w + w_rate
고정된 값이 아니라 w_rate 방향대로 증가시킨다
b의 변화율은 항상 1
w_new는 w변화율을 더하지만 b_new는 b+1로 설정한다
-
y_hat이 y에 한참 못미칠 때 w와 b를 더 큰 폭으로 수정 불가(변화율)
→ 큰 차이만큼 w, b도 비례해 바꿔야 함 (빠른 솔루션)
-
y_hat>y이 되면 y_hat 감소시키지 못함
→ w와 b를 감소시켜야 함 (y_hat, y 값에 능동적 대처)
w_new = w + w_rate * err 로 변경
err = y[0]-y_hat
- err를 곱하면 y와 y_hat의 차이가 클 때 비례하는 가중치도 되고, y_hat을 증가시킬지 감소시킬지에 대한 방향성도 부호로 적용 가능
x[2], x[3], ... 모든 샘플 처리
for 문으로 전체 샘플 반복.
zip()는 튜플로 만들어 줌 (x, y)를 x_i, y_i에 적용해 반복
반복해서 구한 값이 587., 99.
scatter로 산점도 그리고, x가 -0.1 , 0.15일 때 y값 계산 후 직선을 그림
→ 타깃 값과의 관계를 어느정도는 표현 해준다
for문을 하나 더 써서 100번 더 수행 후 w, b 값 구함
똑같이 산점도에 직선을 그리면 더 산점도에 가까운 직선이 나옴
x에 특정 값 넣으면 예측값이 나온다
- w와 b를 임의의 값(1.0, 1.0)으로 초기화하고 훈련 데이터의 샘플을 하나씩 대입하여 y와 y_hat의 오차를 구한다
- 1에서 구한 오차를 w와 b의 변화율에 곱하고 이 값을 이용해 w와 b를 업데이트한다
- 만약 y_hat>y가 되면 오차는 음수가 되어 자동으로 w와 b가 줄어드는 방향으로 업데이트된다
- 반대로 y_hat<y이면 오차는 양수가 되고 w와 b는 더 커지도록 업데이트된다
- 손실 함수는 예측 값과 실제 타깃값의 차이를 측정한다
- 손실 함수의 차이를 줄이는 방향으로 경사 하강법을 사용한다
- 대표적인 회귀, 분류 등에서 널리 사용하는 손실 함수가 존재한다
- 복잡한 다른 문제에서는 자신만의 손실 함수를 정의해 사용하기도 한다
경사 하강법은 손실함수의 기울기가 작은 쪽으로 이동하는 알고리즘.
손실함수 값이 0이 되는 지점이 가장 최적의 솔루션이다
기울기가 낮아지는 쪽으로 이동해야 함 → 미분
y_hat = wx + b → w 함수이기 때문에 한번 더 미분했음
w가 점점 작아져야 하기 때문에 w에서 미분 값을 빼준다
03-02의 오차 역전파가 제곱오차를 미분한 것과 결과가 같다는 걸 알 수 있음
class ⇒ 변수와 메서드(함수)를 묶은 코드 덩어리
init ⇒ 초기화 하는 메서드 (클래스 이용해서 객체를 만들 때 가장 먼저 실행될 코드들)
후에 forpass 메소드 호출해서 y_hat으로 사용한다
y_hat 계산 후 오차를 계산하고, w를 변경하기 위해 -(y-y_hat)에 x를 곱해 최종적 그래디언트를 만든다 → w에 곱할 가중치
에포크 값 지정 안하면 자동으로 100 적용됨