본문 바로가기
AI

[Deep Learning] 딥러닝 보스턴 집값 예측, 퍼셉트론

by shur_ 2023. 9. 4.

 

import tensorflow as tf
import pandas as pd

# 데이터 준비

보스턴 = pd.read_csv('boston.csv')
보스턴.columns

독립= 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b', 'lstat']]
종속= 보스턴[['medv']]

print(독립.shape, 종속.shape)

 

# 모델 준비
 
X = tf.keras.Input(shape=[13]) #독립변수의 개수 13개
Y = tf.keras.layers.Dense(1)(X) #종속변수의 개수 1개
model = tf.keras.Model(X, Y)
model.compile(loss='mse')

 

13개의 입력으로부터 1개의 출력을 만들어낸다.

'Y = tf.keras.layers.Dense(1)(X)' 는 위의 수식을 만드는 것이다.

이 수식의 w와 b를 찾는 것이다.

 

우리가 만든 모형과 수식이 '뉴련'과 같은 역할을 한다. 이러한 모형을 '퍼셉트론(Perceptron)'이라고 한다.

w = weight 가중치 . b = bias 편향

 

# 데이터로 모델 학습

model.fit(독립, 종속, epochs = 500, verbose = 0)
model.fit(독립, 종속, epochs = 10)

 

 verbose 값을 False로 주면 학습 과정 출력 안함.

마지막 10번의 학습은 보여주도록 코딩.

 

 

model.predict(독립[:5])

위 결과에서 모델을 통한 예측 값을 확인해본다.

 

 

종속[:5]

실제 값과 비교해보자.

 

 

w, b = model.get_weights() # weight 가중치 bias 편향
print(w, b)

get_weights() 함수를 통해 weight와 bias를 확인한다.

12개의 w와 1개의 b를 확인할 수 있다.

 

즉 우리가 만든 모델의 수식을 찾아냈다.

 

# 수식 출력
# zip 사용

variables = ['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b', 'lstat']
weights = [f"{e[0]} * {v}" for e, v in zip(w, variables)]
print("y =", "\n  + ".join(weights), f"\n  + {b[0]}")

 

y = -0.08286475390195847 * crim + 0.09206408262252808 * zn + -0.0597853846848011 * indus + 2.901761531829834 * chas + 0.8819381594657898 * nox + 2.54052996635437 * rm + 0.05422786623239517 * age + -0.6408846378326416 * dis + 0.11448012292385101 * rad + -0.0064193508587777615 * tax + 0.37551942467689514 * ptratio + 0.019978608936071396 * b + -0.7009066939353943 * lstat + 1.3484210968017578


+

 

종속변수가 두개인 학습을 시킨다면 퍼셉트론 두개가 병렬로 연결된 상태다.

수식 두개가 필요하다. 첫 번째 수식에서 w 12개 b 1개, 두 번째 수식에서 w 12개 b 1개 총 26개의 숫자를 찾아야할 것이다.

댓글