반응형
3-1 선형 회귀
- 문제 해결을 위해 당뇨병 환자의 데이터 준비하기
1. load_diabetes() 함수로 당뇨병 데이터 준비하기
from sklearn.datasets import load_diabetes
diabetes = load_diabetes()
2. 입력과 타깃 데이터의 크기 확인하기
print(diabetes.data.shape, diabetes.target.shape)
##출력: (442, 10) (442,)
3. 입력 데이터 자세히 보기
diabetes.data[0:3]
##출력: array([[ 0.03807591, 0.05068012, 0.06169621, 0.02187235, -0.0442235 ,
-0.03482076, -0.04340085, -0.00259226, 0.01990842, -0.01764613],
[-0.00188202, -0.04464164, -0.05147406, -0.02632783, -0.00844872,
-0.01916334, 0.07441156, -0.03949338, -0.06832974, -0.09220405],
[ 0.08529891, 0.05068012, 0.04445121, -0.00567061, -0.04559945,
-0.03419447, -0.03235593, -0.00259226, 0.00286377, -0.02593034]])
4. 타깃 데이터 자세히 보기
diabetes.target[:3]
##출력: array([151., 75., 141.])
- 당뇨병 환자 데이터 시각화하기
1. 맷플롯립의 scatter() 함수로 산점도 그리기
import matplotlib.pyplot as plt
plt.scatter(diabetes.data[:, 2], diabetes.target)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
2. 훈련 데이터 준비하기
x = diabetes.data[:, 2]
y = diabetes.target
반응형
3-2 경사 하강법
- 예측값으로 올바른 모델 찾기
1. w와 b 초기화하기
w = 1.0
b = 1.0
2. 훈련 데이터의 첫 번째 샘플 데이터로 y_hat 얻기
y_hat = x[0] * w + b
print(y_hat)
##출력: 1.0616962065186886
3. 타깃과 예측 데이터 비교하기
print(y[0])
##출력: 151.0
4. w값 조절해 예측값 바꾸기
w_inc = w +0.1
y_hat_inc = x[0] * w_inc + b
print(y_hat_inc)
##출력: 1.0678658271705574
5. w값 조정한 후 예측값 증가 정도 확인하기
w_rate = (y_hat_inc - y_hat) / (w_inc - w)
print(w_rate)
##출력: 0.061696206518688734
※ 변화율로 가중치 업데이트 하기
w_new = w+ w_rate
print(w_new)
##출력: 1.0616962065186888
※ 변화율로 절편 업데이트 하기
b_inc = b +0.1
y_hat_inc = x[0] *w +b_inc
print(y_hat_inc)
##출력: 1.1616962065186887
b_rate = (y_hat_inc - y_hat) / (b_inc - b)
print(b_rate)
##출력: 1.0
b_new = b + 1
print(b_new)
##출력: 2.0
- 오차 역전파로 가중치와 절편을 적절하게 업데이트
1. 오차와 변화율을 곱하여 가중치 업데이트하기
err = y[0] - y_hat
w_new = w + w_rate * err
b_new = b + 1 * err
print(w_new, b_new)
##출력: 10.250624555904514 150.9383037934813
2. 두번째 샘플을 통해 오차를 구하기 새로운 w, b 구하기
y_hat = x[1] * w_new + b_new
err = y[1] - y_hat
w_rate = x[1]
w_new = w_new + w_rate * err
b_new = b_new + 1* err
print(w_new, b_new)
##출력: 14.132317616381767 75.52764127612664
3. 전체 샘플 반복하기
for x_i, y_i in zip(x,y):
y_hat = x_i * w + b
err = y_i - y_hat
w_rate = x_i
w = w + w_rate * err
b = b + 1 * err
print(w, b)
##출력: 587.8654539985689 99.40935564531424
4. 그래프를 그려 알아보기
plt.scatter(x, y)
pt1 = (-0.1, -0.1 * w + b)
pt2 = (0.15, 0.15 * w + b)
plt.plot([pt1[0], pt2[0]], [pt1[1], pt2[1]])
plt.xlabel('x')
plt.ylabel('y')
plt.show()
5. 여러 에포크를 반복하기
for i in range(1, 100):
for x_i, y_i in zip(x,y):
y_hat = x_i * w + b
err = y_i - y_hat
w_rate = x_i
w = w + w_rate * err
b = b + 1 * err
print(w, b)
##출력: 913.5973364345905 123.39414383177204
plt.scatter(x, y)
pt1 = (-0.1, -0.1 * w + b)
pt2 = (0.15, 0.15 * w + b)
plt.plot([pt1[0], pt2[0]], [pt1[1], pt2[1]])
plt.xlabel('x')
plt.ylabel('y')
plt.show()
6. 모델로 예측하기
x_new = 0.18
y_pred = x_new * w + b
print(y_pred)
##출력: 287.8416643899983
plt.scatter(x, y)
plt.scatter(x_new, y_pred)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
※ 해당 내용은 <Do it! 딥러닝 입문>의 내용을 토대로 학습하며 정리한 내용입니다.
반응형
'딥러닝 학습' 카테고리의 다른 글
4장 분류하는 뉴런 만들기-이진 분류 (2) (0) | 2023.03.04 |
---|---|
4장 분류하는 뉴런 만들기-이진 분류 (1) (0) | 2023.03.03 |
3장 머신러닝 기초 다지기-수치 예측 (2) (0) | 2023.03.02 |
2장 최소한의 도구로 딥러닝 시작 (0) | 2023.02.28 |
1장 딥러닝 소개 (0) | 2023.02.27 |