보스턴 집값 예측 딥러닝 - boseuteon jibgabs yecheug dibleoning

오늘은 딥러닝 실습시 가장 많이 사용하는 사이킷런에서 제공하는 보스턴 집값을 이용하여 예측하는 모델을 만들어 보도록 하겠습니다.

지도학습의 실습과정은 다음과 같습니다.

1. 과거의 데이터를 준비합니다.(과거의 데이터에서 원인과 결과 즉 독립변수와 종속변수를 찾아 냅니다.)

2. 모델의 구조를 만듭니다. (레모네이드 판매량이 온도에 따라 달라지는데 이때 온도를 독립변수, 판매량을 종속변수로 하는 모델을 만들어 봅니다.)

3. 데이터로 모델을 학습합니다.

4. 모델을 이용합니다.

https://colab.research.google.com/

실습은 코랩을 이용해서 진행하겠습니다.

#보스턴 주택 데이터셋
from sklearn import datasets
보스턴 = datasets.load_boston()

print(보스턴.keys())
보스턴 집값 예측 딥러닝 - boseuteon jibgabs yecheug dibleoning

키값을 확인해 보면 위와  같이 data, target, feature_names,DESCR,filename,data_module 가 있습니다.

키값의 의미

data : 학습해야 할 feed용 데이터

target : 라벨로 각 데이터의 결정값

feature_names : 데이터셋의 column 명

DESCR : 데이터셋에 대한 설명

filename : dataset을 다운로드 받는 경로

print(보스턴['feature_names'])
보스턴 집값 예측 딥러닝 - boseuteon jibgabs yecheug dibleoning

columns 명을 확인 해 보면 위와 같이 13개의 특성이 있는 것을 확인 할 수 있습니다.

print(보스턴['DESCR'])
보스턴 집값 예측 딥러닝 - boseuteon jibgabs yecheug dibleoning

DESCR을 확인해 보면 각 특성에 대한 설명을 확인해 볼 수가 있습니다.

CRIM : 자치시별 1인당 범죄율

ZN : 25000 평방피트를 초과하는 거주지역의 비율

INDUS : 비소매 상업지역이 점유하고 있는 토지의 비율

CHAS : Charles 강의 경계에 위치한 경우 1 , 아니면 0

NOX  : 10 ppm 당 농축 일산화 질소

RM : 주택 1가구당 평균 방의 개수

AGE : 1940년 이전에 건축된 소유주택의 비율

DIS : 5개의 보스턴 직업센터까지의 접근성 지수

RAD :  방사형 도로까지의 접근성 지수

TAX : 10000달러당 재산세율

PTRATO : 자치시별 학생/교사비율

B : Bk는 자치시별 흑인의 비율

LSTAT : 모집단의 하위계측의 비율

MEDV : 본인 소유의 주택가격(중앙값)(단위:$1000)

이때 집값을 예측하는 모델을 만들어 봅시다.

import pandas as pd
독립 = pd.DataFrame(보스턴['data'],columns=보스턴['feature_names'])
종속 = pd.DataFrame(보스턴['target'],columns=['target']) 
print(독립.head())
print(종속.head())
보스턴 집값 예측 딥러닝 - boseuteon jibgabs yecheug dibleoning
import tensorflow as tf
###########################
# 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')

여기서 X = tf.keras.layers.Input(shape=[13]) 의 의미는 독립변수의 갯수가 13개 이므로 13이며

Y = tf.keras.layers.Dense(1)(X) 의 의미는 종속변수의 갯수가 1개 결과값을 출력하는 것을 의미합니다.

model.compile(loss='mse') 는 손실함수를 평균제곱오차(mean Squared Error)를 사용하겠다는 것을 의미합니다.

이렇게 만든 모델은 다음과 같은 형태의 모델이 만들어 집니다.

보스턴 집값 예측 딥러닝 - boseuteon jibgabs yecheug dibleoning

이것을 수식으로 표현하면 y = w1x1 + w2x2 + .... + w13x13 + b 와 같습니다.

여기서 

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

이 부분이 이러한 수식을 만드는 것이고 

model = tf.keras.models.Model(X, Y)

이 부분이 w와 b를 찾는 부분입니다.

이러한 부분이 뉴런 하나를 만드는 것이고 이렇게 만드는 이론을 퍼셉트론(Perceptron) 이라고 합니다.

w는 가중치(weight) b는 편향(bias)라고 부릅니다.

###########################
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=1000, verbose=0)

여기서 epochs=1000의 의미는 1000번 학습하겠다는 의미이며 verbose=0 은 학습중 아무것도 출력하지 않는 것을 의미합니다.

verbose = 0 : 아무것도 출력하지 않는 상태

verbose = 1 : 훈련의 진행도를 보여주는 진행막대

verbose = 2 : 미니 배치마다 손실정보를 출력

###########################
# 4. 모델을 이용합니다
print(model.predict(독립[5:10]))
# 종속변수 확인
print(종속[5:10])
보스턴 집값 예측 딥러닝 - boseuteon jibgabs yecheug dibleoning
# 모델의 수식확인
model.get_weights()
보스턴 집값 예측 딥러닝 - boseuteon jibgabs yecheug dibleoning

이 의미는 w1~w13 까지의 값과 b의 값이 훈련을 통해 계산이 된 값을 의미합니다.


위의 보스턴 집값은 회귀를 이용해서 숫자를 예측하는 모델을 만들어 보았습니다.

이렇게 만들어진 모델이 약간의 오차가 있는 것을 확인 할 수 있는데요~

이번 시간에는 이렇게 회귀모델을 만들어 보면서 개념을 이해 하는 것에 의의를 두시면 될것 같습니다.

<참고>

생활코딩 - https://opentutorials.org/course/4570/28974