1. 비용함수
비용(cost): 가설이 얼마나 정확한지 판단하는 기준
비용함수
-
(예측값-실제값)^2의 평균
-
W(1차함수의 기울기 값)과 b(Y 절편)를 이용하여 비용 함수를 구함
-
비용 함수로 구한 비용이 적을수록 좋음
2. 경사 하강(Gradient Descent)
-
해당 함수의 최소값 위치를 찾기 위해 비용함수의 그레디언트 반대 방향으로 정의한 step size를 가지고 조금씩 움직여 가면서 최적의 파라미터를 찾는 방법.
-
그래디언트: 파라미터에 대해 편미분한 벡터를 의미, 이 파라미터를 반복적으로 조금씩 움직이는 것이 관건
-
텐서플로우는 경사 하강 라이브러리를 제공함
3. 실제로 적용해보기
import tensorflow as tf
xData = [1, 2, 3, 4, 5, 6, 7]
yData = [250000, 55000, 75000, 110000, 128000, 155000, 180000]
W = tf.Variable(tf.random_uniform([1], -100, 100))
"""가중치, 가설의 기울기, random_uiform은 random 범위 설정"""
b = tf.Variable(tf.random_uniform([1], -100, 100))
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
H = W * X + b
"""1차식 정의"""
cost = tf.reduce_mean(tf.square(H - Y))
"""reduce_mean은 평균값"""
a = tf.Variable(0.01)
"""경사 하강의 크기"""
optimizer = tf.train.GradientDescentOptimizer(a)
"""경사하강 라이브러리"""
train = optimizer. minimize(cost)
"""실제로 비용함수를 가장 적게 만들 수 있도록 학습 해주는 부분"""
init = tf.global_variables_initializer()
"""변수 초기화"""
sess = tf.Session()
"""하나의 세션을 얻어오고"""
sess.run(init)
"""초기화"""
for i in range(5001):
sess.run(train, feed_dict={X: xData, Y: yData})
"""실제로 실행, 데이터 매칭"""
if i % 500 == 0:
"""500번에 한번씩 현재 머신러닝 과정 보여주도록 변수 출력"""
print(i, sess.run(cost, feed_dict={X: xData, Y: yData}), sess.run(W), sess.run(b))
print(sess.run(H, feed_dict={X: [8]}))
"""8시간 동안 장사꾼이 일했을때 매출량 예상"""
tf.Variable(): 초기값을 설정해주는 것입니다.
tf.random_uniform(shape, minval=0, maxval=none, seed=none): 난수 초기값입니다. shape은 개수를 의미하며, 최소값, 최대값, 초기값(seed)을 설정합니다.
tf.placeholder(): 구조를 설정해줍니다. tf.float32는 실수형에서 텐서의 배열을 설정해주는 것 입니다. 구조가 어떤지 모를때는 행열을 따로 입력하지 않습니다.
tf.reduce_mean(): 평균을 구합니다.
'데이터분석' 카테고리의 다른 글
텐서플로우(TensorFlow) 아키텍처(Architecture), 세션(Session) (0) | 2019.12.02 |
---|---|
텐서플로우(Tensor Flow) 변수와 상수, placeholder, 기본함수 (0) | 2019.12.01 |
로또875회당첨번호와 지난번 분석 번호 비교하기 (0) | 2019.09.08 |
(데이터분석)로또 번호 분석하기! 많이 나오는 번호는?(python) (0) | 2019.09.02 |
(데이터분석)로또 번호 웹크롤링 하기(python3) (0) | 2019.08.31 |