머신러닝 문제 해결 방법 中 회귀(Regression)
→ 선형 수식을 가설이라고 한다.📝 선형회귀의 전제: 문제 해결에 있어서 가장 효과적인 방법이 선형으로 가설을 만드는 것
정확한 Y값을 예측하기 위해선 가설로 세운 임의 직선과 점(정답)의 거리를 최대한 가깝게 만들어야 한다. 직선과 점과의 최소 거리를 구하는 function, 평균제곱오차로 cost/loss의 최솟값을 찾는다.
→ 평균 제곱 오차
📍 학습이 잘된 모델: 직선 H(x)과 정답 포인트 y의 거리가 최소일 때 = Cost function이 최솟값을 가질 때
가설
손실 함수
📝 정리
선형회귀란? 모든 문제는 선형회귀로 풀 수 있다는 가정한다. 가설을 직선/선형 함수로 표시해서, 이 직선과 정답값의 거리를 좁히는 방법으로 기계한테 학습을 시킨다. 기계는 W, b값을 계속 바꿔 대입하면서 Cost가 minimaize(최소화) 되는 방향으로 학습한다.

상단의 이미지는 정확도 높은 가설과 결과값을 도출하기 위해서, 손실함수를 최소화(Optimize)해야 한다. 이 손실함수를 최소화하는 방법(Optimizer) 중 경사 하강법을 나타낸다.
상단의 그림의 initial weight에서 W,b값을 바꿔 대입하면서 Cost가 내려가는지 확인하고, 점점 내려가면서 최소점에 도달했을 때 학습을 종료시키는 것.
Cost 가 떨어지면, 내가 올바른 방향으로 학습시키고 있다고 체크할 수 있고, Cost가 올라가면 잘못 학습시키고 있기에 방향을 조정할 수 있다.
설명
컴퓨터는 사람처럼 수식을 풀 수 없기때문에 경사 하강법이라는 방법을 써서 점진적으로 문제를 풀어간다. 처음에 랜덤으로 한 점(initial weight)으로부터 시작한다. 좌우로 조금씩 그리고 한번씩 움직이면서 이전 값보다 작아지는지를 관찰한다. 여기서 조금씩 움직이는, 한 칸씩 전진하는 단위를 Learning rate다. 그리고 그래프의 최소점에 도달하게 되면 학습을 종료된다.
기능


Training set (학습 데이터셋, 트레이닝셋), Validation set (검증 데이터셋, 밸리데이션셋), Test set (평가 데이터셋, 테스트셋)
import numpy as np from tensorflow.keras.models import Sequential # 모델을 정의할 때 쓰임 from tensorflow.keras.layers import Dense # 가설을 구현할 때 쓰임 from tensorflow.keras.optimizers import Adam, SGD x_data = np.array([[1], [2], [3]]) y_data = np.array([[10], [20], [30]]) model = Sequential([ # 모델을 순차적으로 쌓아나갈 수 있는 구조 Dense(1) ]) model.compile(loss='mean_squared_error', optimizer=SGD(lr=0.1)) model.fit(x_data, y_data, epochs=100) # epochs 복수형으로 쓰기!
x_data = np.array([[1], [2], [3]]) y_data = np.array([[10], [20], [30]])Dense(1)
model.compile(loss='mean_squared_error', optimizer=SGD(lr=0.1))
model.compile = 모델을 구성해준다.
loss function은 mean_squared_error(평균제곱오차)를 쓴다.
Tensorflow에 비해서 수식을 안 써도 되는 장점이 있다.
optimizer=SGD
lr=0.1
model.fit(x_data, y_data, epochs=100)
model fit y_pred = model.predict([[4]]) print(y_pred)