🤖머신러닝/개인공부및 삽질

머신러닝 공부일지 (선형회귀 cost최소화와 시각화)

Mawile 2021. 9. 30.
728x90

요즘 머신러닝, 딥러닝에 관심이 생겨서 파이썬 - tensorflow, keras, matplotlib.pyplot 등등

여러가지 라이브러리로 학습하는중이다.

 

은 이것을 구매했다.

 

 

그리고 강의는 그냥 인프런에서 듣고있다.

 

미적분 기초지식도 필요할것같아서, 저번에 사놓고 미분법쪽만 풀고 라면받침대가 되었던, 미적분 문제풀이집도 이번에 빡쎄게 문제풀면서 공부중이다..

 

우선 이번에 만들어본것은 머신러닝이라고하면, 제일 익숙하면서 제일 처음배우는 선형회귀!에 관한 여러가지를 배우는중이고, 노트로 필기도하고 있다..ㅋㅋ

 

개발환경은 주피터노트북으로 하는중~~!!

오늘 배운것을 바탕으로 살짝 응용해보았다.

확실히 강의를 보면서 배우니까, 이해가 잘되었다.

무료강좌라 그런지, 강사분이 중간에 미분하는쪽을 헤매셨는데,

그 부분이 "Formal Definition? Gradient Descent?"이 부분이였고,

결국엔 이 부분을 강사분이 살짝 얼버무렸다.

자세히보니까 W에 관한식으로 미분하면 되는것이였다.

(그냥 혼자서 이해했다.. 어차피 무료강좌니까 댓글 안남기고 그냥 넘어갔다;;)

 

해당 식을 사용했다.

나도 이번에 처음 배운것인데,

저기 go언어에서 사용하는 ':=' 이것은 W.assign으로 감싸주면 된다고한다.

 

 

일단 오늘 직접 공부한 코드는 아래와같다.

나는 텐서플로우가 2.xx버전으로 깔려서 1.xx버전을 사용하기위해 좀 바꾸었다..

 

이것은 11번째에 무슨값이 들어올지 예상하는 간단한 코드이다.
import tensorflow.compat.v1 as tf
import matplotlib.pyplot as plt
tf.disable_v2_behavior()

# 값을 예상할 현재값
xData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
yData = [1100, 2200, 3300, 4400, 5500, 6600, 7700, 8800, 9900, 11000]

# W, X, Y, Hypnothesis 만들기
W = tf.Variable(tf.random_normal([1]), name = 'weight')
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
H = X * W

# cost 함수 계산
fn = tf.reduce_sum(tf.square(H - Y))

# 최소화
learning_rate = 0.01
cost = tf.reduce_mean((H - Y) * X)
descent = W - learning_rate * cost
train = W.assign(descent) # <-- 학습시킬것

# tf.Variable활성화
sess = tf.Session()
sess.run(tf.global_variables_initializer())

# 값을 시각적으로 보기위한 값 저장용 리스트
fn_list = []
W_list = []

# 5000번 학습을 실행
for i in range(5001):
    sess.run(train, feed_dict={X: xData, Y: yData})
    
    if i % 500 == 0:
        print(i, sess.run(W), sess.run(fn, feed_dict={X: xData, Y: yData}))
    
    t_W, t_fn = sess.run([W, fn], feed_dict={X: xData, Y: yData})
    fn_list.append(t_fn)
    W_list.append(t_W)
        
print('예측값: ', sess.run(H, feed_dict={X: [11]}))

plt.plot(W_list, fn_list)
plt.show()

 

실행해보면 위와 같이 시각적으로도 점점 값이 최소화되는것을 볼수있다.

선형회귀는 W의 값이 제일 최소가 되는 지점을 찾는 것이기때문에 잘 나온듯하다.

살짝 지수함수모양이 나왔다.

 

이번에 머신러닝을 처음 배우면서 매트랩도 같이 배우게됬는데, 진짜 신세계였다.

재미있다 ㅋㅋ 끝!


 

728x90

댓글