Tensorflow로 간단한 Linear regression 알고리즘 구현: 두 판 사이의 차이
(컴퓨터 과학 용어 정리 - Tensorflow로 간단한 Linear regression 알고리즘 구현 추가) |
편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
==== [딥러닝] Tensorflow로 간단한 Linear regression 알고리즘 구현 ==== | ==== [딥러닝] Tensorflow로 간단한 Linear regression 알고리즘 구현 ==== | ||
시험 점수를 예측하거나 연속적인 값을 예측해야 할 때는 회귀(regression)를 사용한다. 여기서는 TensorFlow를 이용한 간단한 선형 회귀(Linear Regression) 모델 구현을 다룬다. | |||
시험 점수를 | |||
여러 x와 y 값을 기반으로 가장 근접한 직선(선형 모델)을 찾아야 한다. 이 선을 통해 입력된 새로운 x 값에 대응하는 y 값을 예측할 수 있다. | |||
[[File:https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=http%3A%2F%2Fcfile21.uf.tistory.com%2Fimage%2F99A1B3365AF1362C106BFF|center|600px]] | |||
현재 파란 선은 가설 H(x)에 해당한다. 예를 들어, 데이터가 (1,1), (2,2), (3,3)이라면 선과 이 점들 간의 거리를 최소화하는 것이 좋은 가설이다. | |||
이를 위해 다음과 같은 개념을 사용한다: | |||
'''H(x)''': 예측 가설 | |||
'''cost(W,b)''': 비용 함수 | |||
'''W''': 가중치(기울기) | |||
'''b''': 절편 | |||
'''m''': 데이터 개수 | |||
'''H(x^(i))''': 예측값 | |||
'''( | '''y^(i)''': 실제값 | ||
=== (예측값 - 실제값)의 제곱을 사용하는 이유 === | |||
음수 또는 양수 차이를 제거하고, 오차가 클수록 더 큰 페널티를 주기 위해 제곱을 사용한다. | |||
[[File:https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=http%3A%2F%2Fcfile25.uf.tistory.com%2Fimage%2F99FEFF355AF13568288AE8|center|600px]] | |||
===== '''Linear regression 알고리즘의 최종 목적: cost 값을 최소화하는 W와 b를 찾자''' ===== | |||
== 미리 x와 y 값을 주었을 때 == | |||
x_train = [1, 2, 3] | x_train = [1, 2, 3] | ||
y_train = [1, 2, 3] | y_train = [1, 2, 3] | ||
W = tf.Variable(tf.random_normal([1]), name='weight') | W = tf.Variable(tf.random_normal([1]), name='weight') | ||
b = tf.Variable(tf.random_normal([1]), name='bias') | b = tf.Variable(tf.random_normal([1]), name='bias') | ||
hypothesis = x_train * W + b | |||
hypothesis = x_train * W + b | |||
cost = tf.reduce_mean(tf.square(hypothesis - y_train)) | cost = tf.reduce_mean(tf.square(hypothesis - y_train)) | ||
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01) | optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01) | ||
train = optimizer.minimize(cost) | train = optimizer.minimize(cost) | ||
sess = tf.Session() | sess = tf.Session() | ||
sess.run(tf.global_variables_initializer()) | sess.run(tf.global_variables_initializer()) | ||
for step in range(2001): | for step in range(2001): | ||
sess.run(train) | |||
if step % 20 == 0: | |||
print(step, sess.run(cost), sess.run(W), sess.run(b)) | |||
2000번 반복 후, W는 1에 가까워지고 b는 0에 가까워진다. 따라서 가설은 H(x) = x로 수렴한다. | |||
== learning_rate에 대하여 == | |||
너무 크면 발산(over-shooting) | |||
너무 작으면 수렴 속도가 느리고 local minimum에 갇힐 수 있음 | |||
보통 0.01 ~ 0.5 사이 값을 사용한다. | |||
== placeholder를 이용하여 값 전달하기 == | |||
W = tf.Variable(tf.random_normal([1]), name='weight') | W = tf.Variable(tf.random_normal([1]), name='weight') | ||
b = tf.Variable(tf.random_normal([1]), name='bias') | b = tf.Variable(tf.random_normal([1]), name='bias') | ||
X = tf.placeholder(tf.float32, shape=[None]) | X = tf.placeholder(tf.float32, shape=[None]) | ||
Y = tf.placeholder(tf.float32, shape=[None]) | Y = tf.placeholder(tf.float32, shape=[None]) | ||
hypothesis = X * W + b | hypothesis = X * W + b | ||
cost = tf.reduce_mean(tf.square(hypothesis - Y)) | cost = tf.reduce_mean(tf.square(hypothesis - Y)) | ||
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01) | optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01) | ||
train = optimizer.minimize(cost) | train = optimizer.minimize(cost) | ||
sess = tf.Session() | sess = tf.Session() | ||
sess.run(tf.global_variables_initializer()) | sess.run(tf.global_variables_initializer()) | ||
for step in range(2001): | for step in range(2001): | ||
cost_val, W_val, b_val, _ = sess.run([cost, W, b, train], | |||
feed_dict={X: [1, 2, 3, 4, 5], Y: [2.1, 3.1, 4.1, 5.1, 6.1]}) | |||
if step % 20 == 0: | |||
print(step, cost_val, W_val, b_val) | |||
[[File:https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=http%3A%2F%2Fcfile30.uf.tistory.com%2Fimage%2F9966EB3E5AF134071A0326|center|600px]] | |||
최종적으로 가설 H(x) = x + 1.1로 수렴한다. | |||
== 예측 결과 확인 == | |||
훈련된 모델로 예측을 수행하면 입력한 x값에 따라 적절한 y값이 출력된다. |
2025년 5월 6일 (화) 06:53 판
[딥러닝] Tensorflow로 간단한 Linear regression 알고리즘 구현
시험 점수를 예측하거나 연속적인 값을 예측해야 할 때는 회귀(regression)를 사용한다. 여기서는 TensorFlow를 이용한 간단한 선형 회귀(Linear Regression) 모델 구현을 다룬다.
여러 x와 y 값을 기반으로 가장 근접한 직선(선형 모델)을 찾아야 한다. 이 선을 통해 입력된 새로운 x 값에 대응하는 y 값을 예측할 수 있다.
현재 파란 선은 가설 H(x)에 해당한다. 예를 들어, 데이터가 (1,1), (2,2), (3,3)이라면 선과 이 점들 간의 거리를 최소화하는 것이 좋은 가설이다.
이를 위해 다음과 같은 개념을 사용한다:
H(x): 예측 가설
cost(W,b): 비용 함수
W: 가중치(기울기)
b: 절편
m: 데이터 개수
H(x^(i)): 예측값
y^(i): 실제값
(예측값 - 실제값)의 제곱을 사용하는 이유
음수 또는 양수 차이를 제거하고, 오차가 클수록 더 큰 페널티를 주기 위해 제곱을 사용한다.
Linear regression 알고리즘의 최종 목적: cost 값을 최소화하는 W와 b를 찾자
미리 x와 y 값을 주었을 때
x_train = [1, 2, 3] y_train = [1, 2, 3]
W = tf.Variable(tf.random_normal([1]), name='weight') b = tf.Variable(tf.random_normal([1]), name='bias')
hypothesis = x_train * W + b cost = tf.reduce_mean(tf.square(hypothesis - y_train))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01) train = optimizer.minimize(cost)
sess = tf.Session() sess.run(tf.global_variables_initializer())
for step in range(2001): sess.run(train) if step % 20 == 0: print(step, sess.run(cost), sess.run(W), sess.run(b))
2000번 반복 후, W는 1에 가까워지고 b는 0에 가까워진다. 따라서 가설은 H(x) = x로 수렴한다.
learning_rate에 대하여
너무 크면 발산(over-shooting)
너무 작으면 수렴 속도가 느리고 local minimum에 갇힐 수 있음
보통 0.01 ~ 0.5 사이 값을 사용한다.
placeholder를 이용하여 값 전달하기
W = tf.Variable(tf.random_normal([1]), name='weight') b = tf.Variable(tf.random_normal([1]), name='bias')
X = tf.placeholder(tf.float32, shape=[None]) Y = tf.placeholder(tf.float32, shape=[None])
hypothesis = X * W + b cost = tf.reduce_mean(tf.square(hypothesis - Y)) optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01) train = optimizer.minimize(cost)
sess = tf.Session() sess.run(tf.global_variables_initializer())
for step in range(2001): cost_val, W_val, b_val, _ = sess.run([cost, W, b, train], feed_dict={X: [1, 2, 3, 4, 5], Y: [2.1, 3.1, 4.1, 5.1, 6.1]}) if step % 20 == 0: print(step, cost_val, W_val, b_val)
최종적으로 가설 H(x) = x + 1.1로 수렴한다.
예측 결과 확인
훈련된 모델로 예측을 수행하면 입력한 x값에 따라 적절한 y값이 출력된다.