보스턴 집값 예측( 독립변수 : 종속변수 = 13 : 1 )코드를 다 구현하기 전에,
2단계인 모델의 구조를 만드는 코드에 대해서 자세히 알아보자.

2번째 줄은 13개의 입력으로부터 1개의 출력을 만드는 구조(위 수식)를 만드는 것이다.
X와 Y에 대한 값들을 통해 y = w1x1 + w2x2 + ... + w13x13 + b 의 수식을 만들게 되고,
이후 학습 과정은 입력되는 데이터들을 통해 이 수식의 w값들과 b값을 찾아내는 과정이다.
+ 이 때, 위 그림의 오른쪽 모형과 수식을 퍼셉트론이라고 하며, 각 w들을 가중치(weight)라고 하고, b(bias)를 편향이라고 한다
위 경우는 독립변수와 종속변수가 13 : 1인데, 12 : 2인 경우도 살펴보자.
하나의 결과를 만드는 데에는 수식 하나가 필요하다. 종속변수가 두 개일때는 수식이 두개가 필요하다는 것.

이 모양은 퍼셉트론 두개가 병렬로 연결된 모델이며, 찾아야 하는 가중치의 개수는 w 12개 x 2, 편향의 개수는 b x 2로, 찾아야 하는 값은 26개가 된다.
Q_여태 배운 내용에서는 뉴런이 1개로 이루어진 코드라고 했는데, 바로 위 처럼 종속변수가 2개인 경우에는 수식이 두개이므로 뉴런이 2개로 이루어진 코드인지 아니면 이것 또한 그냥 하나의 뉴런 코드이고 이걸 여러개 생성하는것이 뉴런이 여러개 되는건지.
실습
# 라이브러리 사용
import tensorflow as tf
import pandas as pd
---
# 1. 과거의 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
보스턴 = pd.read_csv(파일경로)
print(보스턴.columns)
print(보스턴.head())
Index(['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax',
'ptratio', 'b', 'lstat', 'medv'],
dtype='object')
crim zn indus chas nox ... tax ptratio b lstat medv
0 0.00632 18.0 2.31 0 0.538 ... 296 15.3 396.90 4.98 24.0
1 0.02731 0.0 7.07 0 0.469 ... 242 17.8 396.90 9.14 21.6
2 0.02729 0.0 7.07 0 0.469 ... 242 17.8 392.83 4.03 34.7
3 0.03237 0.0 2.18 0 0.458 ... 222 18.7 394.63 2.94 33.4
4 0.06905 0.0 2.18 0 0.458 ... 222 18.7 396.90 5.33 36.2
[5 rows x 14 columns]
---
# 과거의 데이터를 준비합니다 -2 (독립변수/종속변수 분리)
독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax',
'ptratio', 'b', 'lstat']]
종속 = 보스턴[['medv']]
print(독립.shape, 종속.shape)
(506, 13) (506, 1)
---
# 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')
---
# 데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=10)
Epoch 1/10
16/16 [==============================] - 0s 996us/step - loss: 25.9486
Epoch 2/10
16/16 [==============================] - 0s 1ms/step - loss: 26.2359
Epoch 3/10
16/16 [==============================] - 0s 1ms/step - loss: 26.0069
Epoch 4/10
16/16 [==============================] - 0s 893us/step - loss: 25.7854
Epoch 5/10
16/16 [==============================] - 0s 1ms/step - loss: 25.9335
Epoch 6/10
16/16 [==============================] - 0s 1ms/step - loss: 25.9713
Epoch 7/10
16/16 [==============================] - 0s 1ms/step - loss: 25.9654
Epoch 8/10
16/16 [==============================] - 0s 1ms/step - loss: 25.8405
Epoch 9/10
16/16 [==============================] - 0s 1ms/step - loss: 25.5130
Epoch 10/10
16/16 [==============================] - 0s 1ms/step - loss: 25.6521
<tensorflow.python.keras.callbacks.History at 0x7f4197011b38>
---
# 모델을 이용합니다
model.predict(독립[0:5]) # 전체 데이터가 500여개이므로, 그 중 0번째부터 5번째 이전까지 사용하겠다는 것.
array([[29.758816],
[25.010143],
[30.82426 ],
[30.039917],
[29.459476]], dtype=float32)
파이썬에서 [x:y] 같은 슬라이싱 기법은 x번째부터 y번째 이전까지 가져오겠다는 것이다.
참고 - twpower.github.io/119-python-list-slicing-examples
---
추가로, 만들어진 모델의 수식도 확인 가능하다.
# 모델의 수식 확인
model.get_weights()
[array([[-0.08968529],
[ 0.07270886],
[-0.05623049],
[ 3.3505297 ],
[ 1.5807014 ],
[ 4.2172647 ],
[ 0.01162136],
[-0.9383048 ],
[ 0.1505183 ],
[-0.00932971],
[-0.0279138 ],
[ 0.01629341],
[-0.560724 ]], dtype=float32), array([2.4452467], dtype=float32)]
위 뜻은, 만들어진 수식이 아래와 같다는 것.
집값 = -0.08968529 * x1 + 0.07270886 * x2 + -0.05623049 * x3 + 3.3505297 * x4 +
1.5807014 * x5 + 4.2172647 x6 + 0.01162136 * x7 + -0.9383048 * x8 +
0.1505183 * x9 + -0.00932971 * x10 + -0.0279138 * x11 + 0.01629341 * x12 +
-0.560724 * x13 + 2.4452467
출처 - opentutorials.org/
'[AI]' 카테고리의 다른 글
[TensorFlow] 지도학습 전체과정 3 (Feat. 딥러닝) (0) | 2020.12.15 |
---|---|
[TensorFlow] 딥러닝 학습원리 (0) | 2020.12.15 |
[TensorFlow] 지도학습 전체과정 (Feat. 딥러닝) (0) | 2020.12.15 |
[TensorFlow] 표를 다루는 도구, 판다스 (0) | 2020.12.15 |
[TensorFlow] 목표 : Tensorflow를 이용해 지도학습 문제 해결 (Feat. 딥러닝) (0) | 2020.12.15 |