Study/생활코딩 머신러닝야학

[생활코딩 머신러닝야학] 텐서플로우 Day3

growingtree 2020. 8. 19. 21:57
728x90

출처 : https://ml.yah.ac/

 

7. 두번째 딥러닝 - 보스턴 집값 예측

https://opentutorials.org/module/4966/28976

 

두번째 딥러닝 - 보스턴 집값 예측 - Tensorflow 1

수업소개 보스턴 집값을 예측하는 딥러닝 모델을 텐서플로우를 이용하여 만들어 보고, 모델을 구성하는 퍼셉트론에 대해 이해합니다. 강의  수식과 퍼셉트론  실습  소스코드 colab |  backend.

opentutorials.org

요약정리

1. 보스턴 집값 예측

 

저번시간에 본 모델(lemonade)은 굉장히 간단한 구조의 모델이었다. 이번에는 조금 더 복잡한 구조의 모델을 보자.

 

boston 데이터셋을 사용한다.  

boston.csv 의 일부 

데이터셋에서 행(row)은 타운 하나를 의미한다. boston 안에 있는 마을 하나를 나타내는 것이다. 열(column)은 각 타운의 특성을 나타낸다. boston 데이터는 총 506개의 마을과 14개의 특성으로 이루어져있다. 

<각 column 의미 >

CRIM : 범죄율

CHAS : 찰스강 근처(강변) 여부 ( 근처면 1, 아니면 0)

RM : 평균 방의 개수

AGE : 노후주택의 비율

TAX : 재산세 세율

PTRATIO : 학생/교사 비율

LSTAT : 하위계층의 비율

MEDV : 집값 

전체 columns 중에서 14번째 medv 열이 가장 중요한데, medv열은 해당 마을의 주택들 가격의 중앙값을 나타낸다. 

 

* 중앙값이란?

값들을 작은 값부터 큰 값 순으로 나열했을 때 제일 가운데에 있는 값이 중앙값이다. 흔히 평균값(전체 총합 / 전체 개수)을 전체를 대표하는 값으로 쓰이는데, 평균값이 종종 대표성을 잃을 때가 있다.

예를들어 회사 사원들의 평균연봉을 구했는데 사원들의 실제로 받는 연봉에 비해서 터무니없이 높게 나오는 경우가 있다. 이런 경우는 어떤 값이 너무 커서 전체 평균값을 높이는 일이 생긴 것이다. 사원연봉 데이터에 사장연봉이 끼었다거나 이사의 연봉이 있다면 아무래도 평균값이 상승하지 않을까? 이렇게 평균의 대표성을 잃게하는 값을 바로 이상치(outlier) 라고 한다. 이때 평균값 말고 다른 대표값을 사용하는데 한 예로 중앙값이 있는 것이다. 

 

 

boston 데이터에서는 1~13번째 열이 14번째 열에 영향을 준다.

정리하면, 원인에 해당하는 독립변수는 1~13번째 열이되고, 결과에 해당하는 종속변수는 14번째 열이다. 

출처 : https://www.youtube.com/watch?time_continue=329&v=OOxIUjdEtsc&feature=emb_title

 

 

2. 수식과 퍼셉트론 (Perceptron) 

 

저번 시간에 본 지도학습의 전체과정을 정리해보자 

 

1. 과거의 데이터를 준비

import pandas as pd
import tensorflow as tf

bostonfile = '/content/boston.csv'
boston = pd.read_csv(bostonfile)
print(boston.columns)
boston.head()

independ = boston[['crim','zn','indus','chas','nox','rm','age','dis','rad','tax','ptratio','b','lstat']]
depend = boston[['medv']]
print(independ.shape, depend.shape)
# 분리하고 나서 shape 확인해보기 꼭 눈으로 확인하는 작업이 필요하다.
# shape는 내가 지금 사용하려는 데이터가 어떤 상태인지를 확인하는 작업임 

2. 모델의 구조 만들기

X=tf.keras.layers.Input(shape=[13])
Y=tf.keras.layers.Dense(1)(X)
model=tf.keras.models.Model(X,Y)
model.compile(loss='mse')

3. 데이터로 모델을 학습하기

model.fit(independ,depend,epochs=500)

4. 모델을 이용하기

model.predict(independ[0:5])

# 모델의 수식확인
model.get_weights()

 

이번 전체 코드에서 우리가 주목할 부분은 2. 모델의 구조 만들기 이다. 

 

모델의 구조를 어떻게 짜면 어떻게 돌아가는지 확인해보자.

X=tf.keras.layers.Input(shape=[13])
Y=tf.keras.layers.Dense(1)(X)
model=tf.keras.models.Model(X,Y)
model.compile(loss='mse')

보스턴 데이터의 독립변수는 위에서 정의했듯, 13개이다. 그림으로 나타내면 총 13개의 입력변수가 있는 것이다. 종속변수는 medv 한 개이므로 출력층은 1개로 나타낼 수 있다.

출처 : https://www.youtube.com/watch?time_continue=329&v=OOxIUjdEtsc&feature=emb_title

보스턴 데이터를 가지고 13개의 입력을 받아 1개의 출력을 만드는 것으로 정리할 수 있다. 

이를 수식으로 표현하면  y= w1x1 + w2x2 + ...... +w13x13 +b 이렇게 나타낼 수 있다.

Y=tf.keras.layers.Dense(1)(X)

dense layer에서 위와 같은 수식을 만드는 것이고 모델은 수식에서 들어갈 w와 b의 값을 찾는 과정을 거친다 

 

뉴런은 두뇌안에 있는 세포의 이름이고 인공신경망에서 뉴런 역할을 하는게 모형과 수식이다. 이 모형에는 퍼셉트론(Perceptron)이라는 이름이 있다. 또 수식에서 등장하는 w와 b에도 각각 이름이 있는데, w는 가중치(weight) 라하고 b는 편향(bias)라고 한다.

 

만약에 종속변수 12개에 독립변수 2개인 경우면 입력과 출력은 어떻게 되는 것일까? 답은 입력이 12개에 출력이 2개가 된다.  이럴 땐 수식이 2개가 필요한데, 퍼셉트론이 두 개가 병렬로 연결되어있는 것이다. 이런 경우 w(weight)가 12개 *2 (한 퍼셉트론 당 w가 12개고, 퍼셉트론이 지금 2개이므로 2배해줘야함) + b(bias)가 1개 *2  해서 총 26개의 답을 찾아야 한다. 

 

3. 실습

이번강의에서는 딥러닝 모델이 어떻게 동작하고 내부가 어떻게 구성되어있는지를 이해하는것이 중요하다. 

 

import pandas as pd
import tensorflow as tf

# 과거의 데이터를 준비한다 
bostonfile = '/content/boston.csv'
boston = pd.read_csv(bostonfile)
print(boston.columns)
boston.head()
independ = boston[['crim','zn','indus','chas','nox','rm','age','dis','rad','tax','ptratio','b','lstat']]
depend = boston[['medv']]
print(independ.shape, depend.shape) 
# 분리하고 나서 shape 확인해보기 꼭 눈으로 확인하는 작업이 필요하다.
# shape는 내가 지금 사용하려는 데이터가 어떤 상태인지를 확인하는 작업임 

# 모델의 구조를 만든다
X=tf.keras.layers.Input(shape=[13])
Y=tf.keras.layers.Dense(1)(X)
model=tf.keras.models.Model(X,Y)
model.compile(loss='mse')

# 데이터로 모델을 학습(fit) 시킨다
model.fit(independ,depend,epochs=100)

# 모델이용하기
model.predict(independ[0:5]) #0부터 5개의 값만 가져오기  
# 왜 여긴 independ 를 사용하는거지 
depend[0:5]
# 모델의 수식 확인
model.get_weights()

 추가로 개발환경이 Google Colaboratory라는 웹에서 진행되다보니, 내 컴퓨터에 저장된 데이터셋을 사용하기 어려웠다. 로컬에 저장된 경로로 알려줘도 에러가 뜨길래 그냥 이 수업은 파일url로 진행이 되는건가보다 했는데 강사님께서 방법을 알려주셨다!

간단히 이해하면 사용자가 Google Colaboratory를 사용하기 위해서 구글이 임의로 서버를 임대해준 것이다. 우리는 이 서버에 파일을 업로드하고 사용하면 되는 것이다

왼쪽에 폴더 모양 아이콘을 클릭한 다음, 파일을 업로드하면 끝! 매우 간단하다.

 

 

8. 학습의 실제 

https://www.opentutorials.org/module/4966/28977

 

학습의 실제 - Tensorflow 1

수업소개 딥러닝 워크북에서 손으로 모델을 학습시켜 보며 딥러닝이 학습하는 원리를 배웁니다. 강의 "파일" > "사본 만들기"를 하시면 직접 해볼 수 있습니다. 

www.opentutorials.org

수식을 만들어두고 종속변수의 값을 가장 근접하게 하기위해 가중치를 바꾼다. 

근데 가중치는 어떻게 바꾸는거지? 어떻게 학습하는거지?

 

이에 대한 과정을 스프레드시트를 통해 실습하며 딥러닝의 원리를 학습 

 

 

반응형