MY MEMO

[MACHINE LEARNING] Multi Variable Linear Regression 본문

MACHINE LEARNING/Sung Kim - 실습

[MACHINE LEARNING] Multi Variable Linear Regression

l_j_yeon 2017. 4. 17. 16:47
multi variable일 때 Gradient descent를 구하는 방법에 관한 글이다.


위에 보면 x 한 가지가 아니라 여러 개의 x 데이터값을 이용해서 계산한다.

x의 데이터가 한종류가 아니라는 것 이외에는 코드가 모두 같다.


+) 1e-5는 0.0001(?)을 표현한 수라고 한다.


위의 코드를 돌려보면 아래와 같다


cost는 점점 줄어들고

Prediction은 y의 값과 비슷하게 돌아간다.


하지만 x의 데이터 값이 많을 때 모두 써줘야하는 건 너무 귀찮은 일이다.

따라서 아래처럼 x 데이터를 다르게 정의할 수 있다.



위보다 훨씬 더 간결하게 정의가 되엇다.

여기서는 placeholder 부분이 조금 다르다. None과 3 혹은 None과 1로 되어있다.


이 의미는 예제로 설명하면 편하다.

만약 데이터가

[[1,2,3],[4,5,6],[7,8,9], ...] 이렇게 있다고 하자

안의 데이터는 3개씩 있지만 3개씩 있는 데이터 묶음이 총 몇개 있는지는 알 수 없다.

따라서 None즉 있는 대로 다 가지고 오고 그 묶음안에는 데이터가 3개있다는 의미이다.


X의 데이터는 3개의 데이터의 묶음이 여러개 있고 Y는 1개 데이터의 묶음이 여러개 있으므로 위와 같은 코드로 나타낸다.


+) matmul(X,W) : X와 W를 곱한다.


하지만 이렇게 데이터를 나타내는 것은 훨씬 양이 많은 데이터를 가지고 올때 불편하다.

따라서 우리는 csv파일을 생성하여 파일을 불러와 저장된 데이터를 쓸 것이다. 



파일에서 데이터를 가져올 때 문제점이 있다 바로 어떻게 데이터를 구분할 것이냐 이다.

일단 우리는



위와 같이 코드를 짜서 파일을 불러온다. 여기서 주목해야할 부분은 delimiter이다.

delimiter를 ","로 지정한다. 즉 쉼표로 데이터를 구분한다는 것이다.


그리고 주목해야할 부분이 한개 더 있다.


- Slicing

xy즉 가져온 파일의 데이터 중 어떤 데이터가 x_data이고, 어떤 데이터가 y_data일까? 우리는 그것을 어떻게 나눌까?


x_data는 우리가 가져온 csv파일에서 처음부터 3번째까지이다. 즉 맨 마지막 y데이터를 제외한 부분이다.

y_data는 마지막 데이터 부분이다.

-1은 마지막이라는 뜻이다 (혼자 쓰이면) 하지만 함께 쓰인다면 마지막을 뺀다는 뜻이다.


위를 실행하면 아래와 같이 나온다.


나온 가정으로 내가 100,70,101의 점수를 받았을 때 내가 받을 점수는 아마 191점일것이다.




우리는 지금까지 파일을 로드하는 법을 알아보았다. 하지만 machine learning은 더욱 방대한 양의 데이터를 사용한다.

만약 이것보다 더 많은 파일을 로드해야한다면 어떻게 해야할까?

바로



Queue Runner이다.

Queue Runner란 여러개의 파일을 로드해야 할 때 파일을 전체 다 로드하지 않고 일부분씩 가져올 수 있도록 만든 것이다.

(내가 제대로 이해했다면)

일단 파일을 Queue로 쌓아놓고 읽은 후 Decode하여 Example Queue에 저장한다.

이후 사용시 조금씩 가지고 온다.


이를 코드로 표현하면 아래와 같다.


1. filename_queue에 파일을 모두 저장해야하므로 자신이 필요한 csv파일을 저장해 놓는다.

   shuffle은 섞는다 인데 파일을 가져오는 또다른 방법이라고 한다.

2. tf.TextLineReader()가 가장 기본적인 데이터를 가져오는 방법이라 한다.

3. 이후 decode해서 저장해놓는다.



여기서 batch_size는 한번에 얼마나 많은 양을 가져올 지 정하는 것이라고 한다.

이 이후에는 모두 같은 코드이다.


+)


위는 batch를 train시키는 코드이다.


+) coord.request_stop()이나 coord.join(threads)는 잘 모르겠다..


+) shuffle batch라는 것도 있다!



자른 batch를 일정하게 가져오는 것이 아니라 임의로 가져오는 것이다.



Comments