• 선형 회귀 분석

    2017. 6. 23. 22:00

    by. 위지원


    텐서플로우 첫걸음 - 조르디 토레스 지음을 보고 공부한 내용


    선형회귀분석이란?


    -변수들 사이의 관계를 분석하는 데 사용하는 통계학적 방법

    -알고리즘 개념이 복잡하지 않고 다양한 문제에 폭넓게 적용 가능

    -독립변수 xi,상수항 b 종속변수 y사이의 관계를 모델링 하는방법


    -단순회귀 : 두 변수 사이의 관계

     다중회귀 : 여러 변수 사이의 관계




    1.numpy package import


    import numpy as np


    2.좌표 값 생성 ( 학습 데이터 )


    num_points = 1000

    verctors_set=[]


    for i in xrange(num_points):

    x1 = np.random.normal(0.0,0.55)

    y1=x1*0.1+0.3+np.random.normal(0.0,0.03)

    vectors_set.append([x1,y1])


    x_data=[v[0] for v in vectors_set]

    y_data=[v[1] for v in vectors_set]


    ++코드 설명++

    1) y=0.1*x*03 관계를 가지는 데이터를 생성

    2) normal 메서드를 이용하여 정규분포를 따르는 약간의 변동 값을 더해 직선과 완전히 일치하지 않게 함 ( 더 현실적이고 흥미롭게 만듬 )




    datalab에서 실행한 화면




    3. 비용함수와 경사 하강법 알고리즘

     1) 입력 함수 x_data로부터 출력 값 y_data를 만들 수 있는 최적의 매개변수 w,b를 찾도록 텐서플로 코드를 만드는 것이 목적

     2) w와 b로 모델을 표현 [y_data=x_data*W+b]

     3) w와 b를 찾기 위해서는 w,b값을 계속해서 수정해야 하는데 반복이 일어날때마다 개선되고 있는지 확인하기 위해 얼마나 좋은

        직선인지를 측정하는 비용함수(오차함수)를 정의

     4) 비용함수는 w,b를 매개변수로 받아서 얼마나 데이터에 잘맞는지를 기초하여 오차 값을 리턴,이가 작을 수록 좋고 정확한 모델

     5) 비용함수로 '평균제곱오차'를 이용 : 실제 값과 알고리즘이 반복마다 추정한 값 사이의 '거리'를 오차로 하는 평균 값


    3-1.변수 정의


    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


    3-2.비용함수 만들기 (평균제곱 오차) : 실제 값 y와 y=w*x+b로 계산한 y_data사이의 거리를 제곱한것의 평균을 구함


    loss=tf.reduce_mean(tf.square(y-y_data))


    3-3.경사하강법 이용

    optimizer = tf.train.GradientDescentOptimizer(0.5)

    train=optimizer.minimize(loss)


    ++코드설명++

    1) loss값을 최소화 하기 위한 최적의 알고리즘으로 경사하강법 이용 tf.train.GradientDescentOptimizer

    2) 경사하강법이란 매개변수로 된 함수가 주어지면 초기 시작점에서 함수의 값이 최소화되는 방향으로 매개변수를 변경하는 것을 반복적으로 수행하는 알고리즘

    3) 경사하강법은 기울기를 음의 방향쪽으로 진행하면서 반복적으로 최적화를 수행 

    4) '0.5'는 학습속도로 텐서플로가 각 반복 때마다 얼마나 크게 이동할 것인가를 제어 

        너무 크면 최솟값을 지나침

        너무 작으면 반복회수가 많아짐

        그러므로 적절한 학습속도를 선택하는 것이 중요



    4.알고리즘 실행


    init=tf.initialize_all_variables()


    sess=tf.Session()

    sess.run(init)


    ++코드설명++

    1) 앞써 정의한 변수를 초기화하고 세션을 생성하고 run메서드에 train 매개변수를 넣어 호출

    2) tf.Session()을 생성함으로써 프로그램은 텐써플로 라이브러리와 상호작용

    3) run메서드를 호출할때 비로소 심벌릭 코드가 실제 실행


    5.훈련의 반복


    for step in xrange(훈련횟수):

    sess.run(train)


    print(sess.run(w),sess.runt(b))



    6.결과 ( 8번 반복했을 때 )






    '2017년 > machine learning' 카테고리의 다른 글

    머신런닝에관해 좋은글  (0) 2017.08.21
    텐서플로우 선형회귀에 대해 알아보자  (0) 2017.08.16
    tensorflow csv file 불러오기  (0) 2017.08.07
    텐써플로우 큐  (0) 2017.08.01
    머신런닝 기초  (0) 2017.06.27

    대화의 장 💬