4일차(머신러닝 기초)
#간단한 머신러닝 모델 만들어보기
##공부시간이 성적에 영향을 미칠까??
예를 들어 4명의 학생이 있고 4명의 공부시간과 성적은 아래와 같다고 가정하자.
2시간 공부한 학생의 성적=65
4시간 공부한 학생의 성적=85
6시간 공부한 학생의 성적=70
8시간 공부한 학생의 성적=95
이 값들을 하나의 직선으로 표현 한다면 어떤 직선을 그려야 할까??
먼저, 정확하진 않지만 예측선을 그려본다.
양 끝 두 점을 이어 예측선을 그려본다.
예측값이 있다면 실제값이 있고 이 둘 사이에는 차이값, 즉 오차가 존재한다.
이때, 인공지능은 오차값을 줄여나가는 과정에서 오차가 0인 값을 찾는게 아니라 오차가 가장 적은 값을 찾는 과정이기 때문에 오차 값을 구할때 제곱의 합을 구해도 상관 없다.(절댓값도 사용 가능)
오차제곱의 그래프 형태를 알아보면 이차함수 형태라는 것을 알 수 있다.
여기서 알고있는 값은 x,y 값이고 ,알 수 없는 값은 a(기울기),b(절편) 값이다.
이때, 기울기 a=0, 절편 b=0이라고 가정한다면 예측선은 x축이 되면서 오차가 커질 것이다.
오차가 커진다면 오차 그래프에서 보았을때 정확한 값은 알 수 없지만 그래프의 상단에 점이 찍힐 것을 예측할 수 있다.
오차값이 오른쪽에 찍혔다고 가정해보자.
오차값을 줄여나가며 학습과정을 거친다.
오차값에서의 기울기를 a' 이라고 하자.
오차값을 줄여나가는 폭은 a-a' 이고 a 값은 a-a' 으로 계속해서 갱신된다.
오차값이 0이 되면 학습이 종료되었음을 의미한다.
오차값이 왼쪽에 찍혔을 때도 위와 같은 방법으로 학습이 진행된다.
>>>>여기서 a-a' 은 a 값으로 갱신이되고 b-b' 값은 b로 갱신이되며 a,b 값을 모르기 때문에 a,b에 대한 편미분 값을 이용한다.
이때 a′, b′는 각각 a, b에 대한 오차의 기울기(변화량)를 의미한다. 우리가 원하는 것은 오차를 줄이는 방향으로 a와 b 값을 조금씩 조정해 나가는 것이며, 이를 위해서 이차 함수(오차 함수)를 각각 a와 b에 대해 편미분하여 그 방향을 찾는다.
쉽게 말하면,편미분은 현재 위치에서 '오차를 가장 빠르게 줄일 수 있는 방향'을 알려주는 역할을 한다.
#
>import numpy as np
>import matplotlib.pyplot as plt
>x=np.array([2,4,6,8]) #v병렬 계산 가능 #넘파이 배열 (행렬)
>x+1
array([3, 5, 7, 9])
import numpy as np
import matplotlib.pyplot as plt
x=np.array([2,4,6,8]) #v병렬 계산 가능 #넘파이 배열 (행렬)
y=np.array([65,85,70,95])
a=0 #모르기 때문에..
b=0
plt.scatter(x,y)
plt.show() #학생들 데이터
import numpy as np
import matplotlib.pyplot as plt
x=np.array([2,4,6,8]) #병렬 계산 가능 #넘파이 배열 (행렬)
y=np.array([65,85,70,95])
a=0 #모르기 때문에..
b=0
plt.scatter(x,y)
plt.plot(x,a*x+b,'r') #x축,y축
plt.show() #학생들 데이터
#기울기 조절해서 직선 조절하기
import numpy as np
import matplotlib.pyplot as plt
x=np.array([2,4,6,8]) #병렬 계산 가능 #넘파이 배열 (행렬)
y=np.array([65,85,70,95])
a=5 #
b=55
plt.scatter(x,y)
plt.plot(x,a*x+b,'r') #x축,y축
plt.show() #학생들 데이터