SlideShare a Scribd company logo
1 of 28
Download to read offline
텐서플로우 학습
회귀
신림프로그래머, 최범균, 2016-11-25
학습 자료
모두를 위한 딥러닝 (김성훈)
주의
• 이 분야 전문가가 아니므로 잘못된 내용이 존재할 수 있습니다.
1. 선형 회귀
선형회귀(linear regression)
• 값을 예측할 때 사용
• 변수 사이의 관계 분석
• 예, 햇볕 시간과 관객수 관계
• 데이터에 가장 잘 맞는 선을 찾는 것
• 회귀선
선형회귀(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
선형회귀
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를 찾기!
비용 함수(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
비용 함수와 경사 하강법
비용 함수를 미분한 값이
최소가 되는 w와 b를 찾음
텐서플로우로 선형회귀 구현하기
# 학습 데이터
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]
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()
다항식도 동일
H 𝑥1, 𝑥2, 𝑥3 = 𝑤1 × 𝑥1 + 𝑤2 × 𝑥2 + 𝑤3 × 𝑥3 + 𝑏
𝑤1 𝑤2 𝑤3
𝑥1
𝑥2
𝑥3
+ 𝑏
𝑊 = 𝑤1 𝑤2 𝑤3 X =
𝑥1
𝑥2
𝑥3
𝐻 𝑋 = 𝑊𝑋 + 𝑏
다항식도 동일, 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
= 𝑊 𝑇 𝑋
2. 로지스틱 회귀와 이항형 분류
이항형(binomial) 분류
• 둘 중 하나로 분류
• 예
• 암 재발/재발아님
• 선형 회귀로는 안 됨
0.5
이항형 로지스틱 회귀
• 선형 회귀 + 시그모이드 함수
이용
https://www.desmos.com/calculator/vfxhwrzho7
𝐻 𝑋 =
1
1 + 𝑒−𝑊 𝑇 𝑋
로지스틱 회귀 비용 함수
• 크로스 엔트로피 사용
𝑐𝑜𝑠𝑡 𝑊 =
1
𝑚
𝑐 𝐻 𝑥 , 𝑦
𝑐 𝐻 𝑥 , 𝑦 =
− log 𝐻 𝑥 ∶ 𝑦 = 1
− log 1 − 𝐻 𝑥 ∶ 𝑦 = 0
𝑐 𝐻 𝑥 , 𝑦 = −𝑦 log 𝐻 𝑥 − 1 − 𝑦 log 1 − 𝐻(𝑥)
https://www.desmos.com/calculator/xm42ktnf29
텐서플로우로 로지스틱 회귀 구현하기
• 데이터 예
• 아빠가 들려 주는 [통계] 로지스
틱 회귀분석 후 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
텐서플로우로 로지스틱 회귀 구현하기
* 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 + 𝑒−𝑊 𝑇 𝑋
* 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]]
텐서플로우로 로지스틱 회귀 구현하기
테스트 결과
가중치
-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
3. 다항 분류와 소프트맥스
소프트맥스와 다항(multinomial) 분류
• 기본 아이디어  각 분류별로 값을 구한 뒤 확률로 변환
𝑤 𝑎1 𝑤 𝑎2 𝑤 𝑎3
𝑤 𝑏1 𝑤 𝑏2 𝑤 𝑏3
𝑤 𝑐1 𝑤 𝑐2 𝑤 𝑐3
×
𝑥1
𝑥2
𝑥3
=
𝑦1
𝑦2
𝑦3
𝑝1
𝑝2
𝑝3
소프트맥스
𝑆 𝑦𝑖 =
𝑒 𝑦𝑗
𝑗 𝑒 𝑦 𝑗
p1 + p2 + p3 = 1.0
소프트맥스 비용함수
• 코로스 엔트로피
𝐷 𝑆, 𝐿 = −
𝑖
𝐿𝑖 log 𝑆𝑖
𝑝1
𝑝2
𝑝3
𝑦1
𝑦2
𝑦3
학습데이터 소프트맥스로
구한 확률
𝐿𝑜𝑠𝑠 =
1
𝑚
𝑖
𝐷 𝑆(𝑊𝑋𝑖, 𝐿𝑖)
* 1개 데이터에 대한 값 * 전체 학습 데이터에 대한 값
텐서플로우로 소프트맥스 다항 분류 구현하기
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))
텐서플로우로 소프트맥스 다항 분류 구현하기
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]
참고
• 온라인 그래프 출력
• https://www.desmos.com/calculator
• 모두를 위한 딥러닝 (김성훈 교수님)
• https://hunkim.github.io/ml/
• 실습한 코드
• https://github.com/madvirus/tfstudy
참고, 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)

More Related Content

What's hot

빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
SeongHyun Ahn
 
Pyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabPyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlab
Intae Cho
 

What's hot (20)

Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: Function
 
종이접기(fold) 프로그래밍
종이접기(fold) 프로그래밍종이접기(fold) 프로그래밍
종이접기(fold) 프로그래밍
 
하스켈 모나드
하스켈 모나드하스켈 모나드
하스켈 모나드
 
iOS 메모리관리
iOS 메모리관리iOS 메모리관리
iOS 메모리관리
 
IPython
IPythonIPython
IPython
 
Python machine learning Ch.4
Python machine learning Ch.4Python machine learning Ch.4
Python machine learning Ch.4
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
R 스터디 두번째
R 스터디 두번째R 스터디 두번째
R 스터디 두번째
 
한국 커뮤니티 데이 트랙2, 세션2 JavaScript 성능향상과 Sencha
한국 커뮤니티 데이 트랙2, 세션2 JavaScript 성능향상과 Sencha한국 커뮤니티 데이 트랙2, 세션2 JavaScript 성능향상과 Sencha
한국 커뮤니티 데이 트랙2, 세션2 JavaScript 성능향상과 Sencha
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols
 
Pyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabPyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlab
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
R 스터디 세번째
R 스터디 세번째R 스터디 세번째
R 스터디 세번째
 
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariochoTfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
 
자료구조 프로젝트
자료구조 프로젝트자료구조 프로젝트
자료구조 프로젝트
 
R_datamining
R_dataminingR_datamining
R_datamining
 

Similar to Tensorflow regression 텐서플로우 회귀

2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
kd19h
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
chl132435
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 Hwp
Kimjeongmoo
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서
KimChangHoen
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
KoChungWook
 
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
주영 송
 

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

2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
Alphago at a Glance
Alphago at a GlanceAlphago at a Glance
Alphago at a Glance
 
자구2번
자구2번자구2번
자구2번
 
3.neural networks
3.neural networks3.neural networks
3.neural networks
 
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 Hwp
 
3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택
 
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
해커에게 전해들은 머신러닝 #1
해커에게 전해들은 머신러닝 #1해커에게 전해들은 머신러닝 #1
해커에게 전해들은 머신러닝 #1
 
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
 
Persistent Segment Tree - Sogang ICPC Team, 2019
Persistent Segment Tree - Sogang ICPC Team, 2019Persistent Segment Tree - Sogang ICPC Team, 2019
Persistent Segment Tree - Sogang ICPC Team, 2019
 
2.linear regression and logistic regression
2.linear regression and logistic regression2.linear regression and logistic regression
2.linear regression and logistic regression
 
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리 학습을 위한 PPT! (Deep Learning for Natural Language Processing)
 
Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)
 
RLCode와 A3C 쉽고 깊게 이해하기
RLCode와 A3C 쉽고 깊게 이해하기RLCode와 A3C 쉽고 깊게 이해하기
RLCode와 A3C 쉽고 깊게 이해하기
 

More from beom kyun choi

More from beom kyun choi (20)

옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
 

Tensorflow regression 텐서플로우 회귀

  • 2. 학습 자료 모두를 위한 딥러닝 (김성훈)
  • 3. 주의 • 이 분야 전문가가 아니므로 잘못된 내용이 존재할 수 있습니다.
  • 5. 선형회귀(linear regression) • 값을 예측할 때 사용 • 변수 사이의 관계 분석 • 예, 햇볕 시간과 관객수 관계 • 데이터에 가장 잘 맞는 선을 찾는 것 • 회귀선
  • 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. 선형회귀 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. 비용 함수(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. 비용 함수와 경사 하강법 비용 함수를 미분한 값이 최소가 되는 w와 b를 찾음
  • 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. 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. 다항식도 동일 H 𝑥1, 𝑥2, 𝑥3 = 𝑤1 × 𝑥1 + 𝑤2 × 𝑥2 + 𝑤3 × 𝑥3 + 𝑏 𝑤1 𝑤2 𝑤3 𝑥1 𝑥2 𝑥3 + 𝑏 𝑊 = 𝑤1 𝑤2 𝑤3 X = 𝑥1 𝑥2 𝑥3 𝐻 𝑋 = 𝑊𝑋 + 𝑏
  • 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. 2. 로지스틱 회귀와 이항형 분류
  • 15. 이항형(binomial) 분류 • 둘 중 하나로 분류 • 예 • 암 재발/재발아님 • 선형 회귀로는 안 됨 0.5
  • 16. 이항형 로지스틱 회귀 • 선형 회귀 + 시그모이드 함수 이용 https://www.desmos.com/calculator/vfxhwrzho7 𝐻 𝑋 = 1 1 + 𝑒−𝑊 𝑇 𝑋
  • 17. 로지스틱 회귀 비용 함수 • 크로스 엔트로피 사용 𝑐𝑜𝑠𝑡 𝑊 = 1 𝑚 𝑐 𝐻 𝑥 , 𝑦 𝑐 𝐻 𝑥 , 𝑦 = − log 𝐻 𝑥 ∶ 𝑦 = 1 − log 1 − 𝐻 𝑥 ∶ 𝑦 = 0 𝑐 𝐻 𝑥 , 𝑦 = −𝑦 log 𝐻 𝑥 − 1 − 𝑦 log 1 − 𝐻(𝑥) https://www.desmos.com/calculator/xm42ktnf29
  • 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. 텐서플로우로 로지스틱 회귀 구현하기 * 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. * 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. 테스트 결과 가중치 -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. 3. 다항 분류와 소프트맥스
  • 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. 소프트맥스 비용함수 • 코로스 엔트로피 𝐷 𝑆, 𝐿 = − 𝑖 𝐿𝑖 log 𝑆𝑖 𝑝1 𝑝2 𝑝3 𝑦1 𝑦2 𝑦3 학습데이터 소프트맥스로 구한 확률 𝐿𝑜𝑠𝑠 = 1 𝑚 𝑖 𝐷 𝑆(𝑊𝑋𝑖, 𝐿𝑖) * 1개 데이터에 대한 값 * 전체 학습 데이터에 대한 값
  • 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. 텐서플로우로 소프트맥스 다항 분류 구현하기 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. 참고 • 온라인 그래프 출력 • https://www.desmos.com/calculator • 모두를 위한 딥러닝 (김성훈 교수님) • https://hunkim.github.io/ml/ • 실습한 코드 • https://github.com/madvirus/tfstudy
  • 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)