Successfully reported this slideshow.
Your SlideShare is downloading. ×

Tensorflow regression 텐서플로우 회귀

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 28 Ad

Tensorflow regression 텐서플로우 회귀

Download to read offline

신림프로그래머 텐서플로우 스터디, 회귀 발표 자료. 선형회귀, 로지스틱 회귀, 소프트맥스 등에 대한 간단한 소개와 텐서플로우를 이용해서 구현한 코드를 소개.

신림프로그래머 텐서플로우 스터디, 회귀 발표 자료. 선형회귀, 로지스틱 회귀, 소프트맥스 등에 대한 간단한 소개와 텐서플로우를 이용해서 구현한 코드를 소개.

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to Tensorflow regression 텐서플로우 회귀 (20)

Advertisement

More from beom kyun choi (20)

Recently uploaded (20)

Advertisement

Tensorflow regression 텐서플로우 회귀

  1. 1. 텐서플로우 학습 회귀 신림프로그래머, 최범균, 2016-11-25
  2. 2. 학습 자료 모두를 위한 딥러닝 (김성훈)
  3. 3. 주의 • 이 분야 전문가가 아니므로 잘못된 내용이 존재할 수 있습니다.
  4. 4. 1. 선형 회귀
  5. 5. 선형회귀(linear regression) • 값을 예측할 때 사용 • 변수 사이의 관계 분석 • 예, 햇볕 시간과 관객수 관계 • 데이터에 가장 잘 맞는 선을 찾는 것 • 회귀선
  6. 6. 선형회귀(linear regression) * 데이터 예: 헤드퍼스트 통계학 x (햇볕) y (관객 수) 1.9 22 2.5 33 3.2 30 3.8 42 4.7 38 5.5 49 5.9 42 7.2 55
  7. 7. 선형회귀 x (햇볕) y (관객 수) 1.9 22 2.5 33 3.2 30 3.8 42 4.7 38 5.5 49 5.9 42 7.2 55 H(𝑥) = 𝒘𝑥 + 𝒃 학습 데이터에 가장 잘 맞는 가중치 w와 상수항 b를 찾기!
  8. 8. 비용 함수(cost function, loss function) • 가중치와 상수가 얼마나 데이터에 맞는지 측정 • 다양한 비용 함수 존재 • 예, 오차 제곱의 평균 • 오른쪽 표: w=10, b=5일 때 x y' (예측) y (실제) 오차 제곱 1.9 23.3 22 -1.3 1.69 2.5 27.5 33 5.5 30.25 3.2 32.4 30 -2.4 5.76 3.8 36.6 42 5.4 29.16 4.7 42.9 38 -4.9 24.01 5.5 48.5 49 0.5 0.25 5.9 51.3 42 -9.3 86.49 7.2 60.4 55 -5.4 29.16 cost 25.84625 𝐶𝑜𝑠𝑡 𝑋 = 1 𝑚 𝐻 𝑥𝑖 − 𝑦𝑖 2
  9. 9. 비용 함수와 경사 하강법 비용 함수를 미분한 값이 최소가 되는 w와 b를 찾음
  10. 10. 텐서플로우로 선형회귀 구현하기 # 학습 데이터 x_data = [1.9, 2.5, 3.2, 3.8, 4.7, 5.5, 5.9, 7.2] y_data = [22, 33, 30, 42, 38, 49, 42, 55] import tensorflow as tf W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1])) y = W * x_data + b # 가설 loss = tf.reduce_mean(tf.square(y - y_data)) # 차의 제곱 평균 # 경사 하강법 train = tf.train.GradientDescentOptimizer(0.015).minimize(loss) init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) print('FIRST', sess.run(loss), sess.run(W), sess.run(b)) for step in range(1800): sess.run(train) if step % 20 == 0: print(step, sess.run(loss), sess.run(W), sess.run(b)) FIRST 1365.22 [ 0.69029188] [ 0.] 0 180.363 [ 5.76034307] [ 1.07642579] 20 38.5053 [ 7.97524023] [ 2.60947013] 40 35.2595 [ 7.780509] [ 3.57756996] 60 32.475 [ 7.60014772] [ 4.47422886] … … … 1420 15.671 [ 5.34873962] [ 15.66702652] 1440 15.6709 [ 5.34782982] [ 15.6715498] 1460 15.6708 [ 5.34698725] [ 15.67573929] 1480 15.6708 [ 5.34620667] [ 15.67961884] 1500 15.6707 [ 5.34548378] [ 15.68321228] 1520 15.6707 [ 5.3448143] [ 15.6865406] 1540 15.6707 [ 5.34419394] [ 15.68962383] 1560 15.6706 [ 5.34361982] [ 15.69247818] 1580 15.6706 [ 5.34308767] [ 15.69512367] 1600 15.6706 [ 5.3425951] [ 15.69757462] 1620 15.6706 [ 5.34213877] [ 15.69984341] 1640 15.6706 [ 5.34171629] [ 15.7019434] 1660 15.6705 [ 5.34132433] [ 15.70388889]
  11. 11. Matplotlib로 결과 출력 import matplotlib matplotlib.rcParams['font.family'] = 'NanumBarunGothic' import matplotlib.pyplot as plt plt.plot(x_data, y_data, 'ro') plt.plot(x_data, sess.run(W) * x_data + sess.run(b)) plt.xlabel('햇볕') plt.ylabel('관객수') plt.legend() plt.show()
  12. 12. 다항식도 동일 H 𝑥1, 𝑥2, 𝑥3 = 𝑤1 × 𝑥1 + 𝑤2 × 𝑥2 + 𝑤3 × 𝑥3 + 𝑏 𝑤1 𝑤2 𝑤3 𝑥1 𝑥2 𝑥3 + 𝑏 𝑊 = 𝑤1 𝑤2 𝑤3 X = 𝑥1 𝑥2 𝑥3 𝐻 𝑋 = 𝑊𝑋 + 𝑏
  13. 13. 다항식도 동일, b를 w로 H 𝑥1, 𝑥2, 𝑥3 = 𝑤0 × 1 + 𝑤1 × 𝑥1 + 𝑤2 × 𝑥2 + 𝑤3 × 𝑥3 𝐻 𝑥1, 𝑥2, 𝑥3 = 𝑤0 𝑤1 𝑤2 𝑤3 𝑇 1 𝑥1 𝑥2 𝑥3 = 𝑊 𝑇 𝑋
  14. 14. 2. 로지스틱 회귀와 이항형 분류
  15. 15. 이항형(binomial) 분류 • 둘 중 하나로 분류 • 예 • 암 재발/재발아님 • 선형 회귀로는 안 됨 0.5
  16. 16. 이항형 로지스틱 회귀 • 선형 회귀 + 시그모이드 함수 이용 https://www.desmos.com/calculator/vfxhwrzho7 𝐻 𝑋 = 1 1 + 𝑒−𝑊 𝑇 𝑋
  17. 17. 로지스틱 회귀 비용 함수 • 크로스 엔트로피 사용 𝑐𝑜𝑠𝑡 𝑊 = 1 𝑚 𝑐 𝐻 𝑥 , 𝑦 𝑐 𝐻 𝑥 , 𝑦 = − log 𝐻 𝑥 ∶ 𝑦 = 1 − log 1 − 𝐻 𝑥 ∶ 𝑦 = 0 𝑐 𝐻 𝑥 , 𝑦 = −𝑦 log 𝐻 𝑥 − 1 − 𝑦 log 1 − 𝐻(𝑥) https://www.desmos.com/calculator/xm42ktnf29
  18. 18. 텐서플로우로 로지스틱 회귀 구현하기 • 데이터 예 • 아빠가 들려 주는 [통계] 로지스 틱 회귀분석 후 ROC 커브 그리 기 (https://goo.gl/bxcn4c) #x0 AGE SEX WT SMOKING CHD 1 22 1 60 1 0 1 23 1 58 1 0 1 24 1 62 1 0 1 27 1 67 1 0 1 28 1 64 1 0 1 30 1 60 1 0 1 30 1 65 1 0 1 32 1 58 1 0 1 32 1 72 1 0 1 35 1 64 2 1 1 38 2 56 1 0 1 40 2 46 2 0 1 41 2 58 2 1 1 46 2 72 1 0 1 47 2 63 1 0 1 48 2 60 1 0 1 49 2 48 2 1 1 49 2 50 1 0 1 50 2 58 2 1 1 51 2 62 1 0
  19. 19. 텐서플로우로 로지스틱 회귀 구현하기 * https://github.com/FuZer/Study_TensorFlow 참고 import tensorflow as tf import numpy as np xy = np.loadtxt('logistic_train2.txt', unpack=True, dtype='float32') x_data = xy[0:-1] # [5, 20] y_data = xy[-1] # [1, 20] X = tf.placeholder(tf.float32) Y = tf.placeholder(tf.float32) W = tf.Variable(tf.random_uniform([1, len(x_data)], -1.0, 1.0)) # [1, 5] h = tf.matmul(W, X) # [1, 20] hypothesis = tf.sigmoid(h) cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis)) a = tf.Variable(0.0015) # learning rate optimizer = tf.train.GradientDescentOptimizer(a) train = optimizer.minimize(cost) # goal is minimize cost 𝑐𝑜𝑠𝑡 𝑊 = 1 𝑚 𝑐 𝐻𝑦𝑝𝑜 𝑥 , 𝑦 𝑐 𝐻 𝑥 , 𝑦 = −𝑦 log 𝐻 𝑥 − 1 − 𝑦 log 1 − 𝐻(𝑥) 𝐻𝑦𝑝𝑜 𝑋 = 1 1 + 𝑒−𝑊 𝑇 𝑋
  20. 20. * https://github.com/FuZer/Study_TensorFlow 참고 init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) for step in range(20001): # 10,000-60,000까지 변경해가며 해 봤음 sess.run(train, feed_dict={X: x_data, Y: y_data}) if step % 200 == 0: print (step, sess.run(cost, feed_dict={X: x_data, Y: y_data}), sess.run(W)) print('-----------------------------------------') print(sess.run(hypothesis, feed_dict={X: [[1], [35], [1], [64], [2]]}) > 0.5) 0.199018 [[-0.69001538 0.07054905 -1.43649220 -0.09584059 3.13020134]] 0.195910 [[-0.53398216 0.02894925 -0.96797615 -0.09904154 3.71121287]] 텐서플로우로 로지스틱 회귀 구현하기
  21. 21. 테스트 결과 가중치 -0.69001538 0.07054905 -1.43649220 -0.09584059 3.13020134 #x0 AGE SEX WT SMOKING CHD 회귀 결과 값 1 22 1 60 1 0 0.0394 1 23 1 58 1 0 0.0506 1 24 1 62 1 0 0.0375 1 27 1 67 1 0 0.0290 1 28 1 64 1 0 0.0409 1 30 1 60 1 0 0.0672 1 30 1 65 1 0 0.0427 1 32 1 58 1 0 0.0913 1 32 1 72 1 0 0.0256 1 35 1 64 2 1 0.6152 1 38 2 56 1 0 0.0423 1 40 2 46 2 0 0.7523 1 41 2 58 2 1 0.5078 1 46 2 72 1 0 0.0165 1 47 2 63 1 0 0.0409 1 48 2 60 1 0 0.0575 1 49 2 48 2 1 0.8255 1 49 2 50 1 0 0.1458 1 50 2 58 2 1 0.6606 1 51 2 62 1 0 0.0586
  22. 22. 3. 다항 분류와 소프트맥스
  23. 23. 소프트맥스와 다항(multinomial) 분류 • 기본 아이디어  각 분류별로 값을 구한 뒤 확률로 변환 𝑤 𝑎1 𝑤 𝑎2 𝑤 𝑎3 𝑤 𝑏1 𝑤 𝑏2 𝑤 𝑏3 𝑤 𝑐1 𝑤 𝑐2 𝑤 𝑐3 × 𝑥1 𝑥2 𝑥3 = 𝑦1 𝑦2 𝑦3 𝑝1 𝑝2 𝑝3 소프트맥스 𝑆 𝑦𝑖 = 𝑒 𝑦𝑗 𝑗 𝑒 𝑦 𝑗 p1 + p2 + p3 = 1.0
  24. 24. 소프트맥스 비용함수 • 코로스 엔트로피 𝐷 𝑆, 𝐿 = − 𝑖 𝐿𝑖 log 𝑆𝑖 𝑝1 𝑝2 𝑝3 𝑦1 𝑦2 𝑦3 학습데이터 소프트맥스로 구한 확률 𝐿𝑜𝑠𝑠 = 1 𝑚 𝑖 𝐷 𝑆(𝑊𝑋𝑖, 𝐿𝑖) * 1개 데이터에 대한 값 * 전체 학습 데이터에 대한 값
  25. 25. 텐서플로우로 소프트맥스 다항 분류 구현하기 xy = np.loadtxt('softmax_train.txt', unpack=False, dtype='float32') x_data = xy[:, :2] # [8, 2] y_data = xy[:, 2:] # [8, 3] X = tf.placeholder(tf.float32, [None, 2]) # [n, 2] Y = tf.placeholder(tf.float32, [None, 3]) # [n, 3] W = tf.Variable(tf.zeros([2, 3])) b = tf.Variable(tf.zeros([3])) h = tf.nn.softmax(tf.matmul(X, W) + b) # [8, 3], h = softmax(XW + b) cost = tf.reduce_mean(-tf.reduce_sum(Y*tf.log(h), reduction_indices=1)) optimizer = tf.train.GradientDescentOptimizer(0.001).minimize(cost) init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) for step in range(2001): sess.run(optimizer, feed_dict={X:x_data, Y:y_data}) if step % 200 == 0: print (step, sess.run(cost, feed_dict={X: x_data, Y: y_data}), sess.run(W), sess.run(b))
  26. 26. 텐서플로우로 소프트맥스 다항 분류 구현하기 a = sess.run(h, feed_dict={X: [[11, 7]]}) print ("a :", a, sess.run(tf.arg_max(a, 1))) b = sess.run(h, feed_dict={X: [[3, 4]]}) print ("b :", b, sess.run(tf.arg_max(b, 1))) c = sess.run(h, feed_dict={X: [[1, 0]]}) print ("c :", c, sess.run(tf.arg_max(c, 1))) a : [[ 0.46272621 0.35483006 0.18244369]] [0] b : [[ 0.33820099 0.42101386 0.24078514]] [1] c : [[ 0.27002314 0.29085544 0.4391214 ]] [2]
  27. 27. 참고 • 온라인 그래프 출력 • https://www.desmos.com/calculator • 모두를 위한 딥러닝 (김성훈 교수님) • https://hunkim.github.io/ml/ • 실습한 코드 • https://github.com/madvirus/tfstudy
  28. 28. 참고, Anaconda로 설치 • anaconda + jupyter • 환경 생성 • conda create -n tensorflow python=3.5 • 생성한 환경에서 텐서플로우와 관련 라이브러리 설치 • source activate tensorflow • pip install tensorflow • conda install matplotlib • conda install seaborn • conda install notebook ipykernel • ipython kernel install --user • 참고 • Installation Quickstart: TensorFlow, Anaconda, Jupyte (https://goo.gl/kSeZKI)

×