카테고리 없음

Machine Learning Basic

young_3060 2022. 3. 29. 21:06
728x90

** 출처 : boostcourse 텐서플로우로 시작하는 딥러닝 기초

링크 -> https://www.boostcourse.org/ai212/joinLectures/25072

 

 

지도 학습 (Supervised Learning) 

  • labeled된 데이터를 학습함
  • training data set이 필요함

비지도학습 (Unsupervised Learning)

  • un-labeled data, 데이터를 가지고 스스로 학습함

 

 

Linear Regression


Linear Regression?

parameter을 선형 결합식(1차식)으로 표현 가능한 모델

 

n차식으로 결합된 식도 선형이 될 수 있다?

x의 차수가 중요한것이 아니라 파라미터 끼리의 결합이 선형인지가 중요하다

 

피처 종류 개수에 따라

한개이면 단순 선형 회귀,

여러개이면 다중 선형 회귀,

피처의 차수가 높인 모델은 다항 회귀라고 한다.

 

Regression이란?

regression toward the mean, 전체의 평균으로 돌아간다.

데이터를 가장 잘 대변하는 직선의 방정식을 찾는 것 H(x) = Wx + b

cost(loss, error) [H(x) - y] 가 작을수록 적절한 직선의 방정식이다. ==> 목표 ) minimize cost

 

[ tesorflow로 옮기는법 ]

W, b값은 random으로 진행함 -> 별 의미 없기 때문

tf.reduce_mean() : 랭크가 줄어들면서 mean을 구함

예시 ] v = [1,2,3,4] 에서의 랭크? 1 tf.reduce_mean(v) : 2.5

 

 

minimize algorithm


Gradient descent 

W값을 지속적으로 업데이트해주는 알고리즘으로, cost function을 W로 미분하여 다시 뺀값

local minimum(가장 작은 값)이 동일할때 더 정확하게 사용할 수 있다

 

Simplified Hypothesis

H(x) = Wx

나누어주는 m값은 cost값에 영향을 주지 않으므로 우리는 2m으로 계산해준다

running mate (alpha) : W값을 얼마만큼 변경할지를 결정하는 파라미터

[code]

alpha = 0.01
#alpha == running mate

gradient = tf.reduce_mean(tf.multiply(tf.multiply(W, X) - Y, X))
descent = W - tf.multiply(alpha, gradient)
W.assign(descent)

 

 

Multi-variable(feature) Linear Regression (다중 선형회귀)


변수가 하나일때 H(x) = Wx + b

변수가 여러개일때 H(x1, x2, x3 ... xn) = w1x1 + w2x2 + ... wnxn ..너무 복잡하다

==> MATRIX 이용시 간단하게 표현할 수 있다!

데이터의 column == W의 row

Output의 column == W의 column

 

[code - using matrix]

# 변수가 여러개이므로 각각의 weight가 필요하다
# matrix를 사용함
data = np.array([
    # X1,   X2,    X3,   y
    [ 73.,  80.,  75., 152. ],
    [ 93.,  88.,  93., 185. ],
    [ 89.,  91.,  90., 180. ],
    [ 96.,  98., 100., 196. ],
    [ 73.,  66.,  70., 142. ]
], dtype=np.float32)

# data splice
X = data[:, :-1] #전체 row, x1 ~ x3 (크기 3)
y = data[:, [-1]] #전체 row, 마지막 column만 (크기 1)

W = tf.Variable(tf.random_normal([3,1])) #x의 column
b = tf.Variable(tf.random_normal([1])) #y의 column

def predict(X):
	return tf.matmul(X, W) + b

n_epochs = 2000 #2000번 수행
for i in range(n_epochs+1):
	with tf.GradientTape as tape:
    	cost = tf.reduce_mean((tf.square(predict(X) - y)))
    
    W_grad, b_grad = tape.gradient(cost, [W,b])
    
    W.assign_sub(learning_rate * W_grad)
    b.assign_sub(learning_rate * b_grad)
    
    if i % 100 == 0 :
    	print("{:5} | {:10.4f}".format(i, cost.numpy()))

 

728x90