도순씨의 코딩일지
딥러닝 :: 선형 회귀 적용하기 본문
지금까지 예로 들었던 데이터들은 참(1) 또는 거짓(0)을 맞히는 문제, 아니면 여러 개의 보기 중 맞는 하나를 예측하는 문제였다. 이번에는 정답을 맞히는 것이 아닌 수치를 예측하는 모델을 만들어보도록 하자.
@ 데이터는 https://github.com/gilbutITbook/006958 여기서 다운로드 받으실 수 있습니다.
1. 데이터 확인하기
먼저 데이터를 확인해보자.
@ 코드
1
2
3
4
|
import pandas as pd
df = pd.read_csv("/Users/hansubin/Downloads/006958-master/deeplearning/dataset/housing.csv", delim_whitespace = True, header = None)
print(df.info())
|
cs |
delim_whitespace = True는 공백으로 구분된 파일을 읽을 때 사용한다.
@실행 결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
RangeIndex: 506 entries, 0 to 505
Data columns (total 14 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 506 non-null float64
1 1 506 non-null float64
2 2 506 non-null float64
3 3 506 non-null int64
4 4 506 non-null float64
5 5 506 non-null float64
6 6 506 non-null float64
7 7 506 non-null float64
8 8 506 non-null int64
9 9 506 non-null float64
10 10 506 non-null float64
11 11 506 non-null float64
12 12 506 non-null float64
13 13 506 non-null float64
dtypes: float64(12), int64(2)
memory usage: 55.5 KB
None
|
cs |
RangeIndex: 506 entries를 통해서 총 샘플의 수가 506개라는 것을 알 수 있다. 또 Data columns가 14개인 것을 보아 컬럼 수가 14개라는 것을 알 수 있다.
일부를 출력해서 데이터를 확인해보도록 하자.
@ 코드
1
|
print(df.head())
|
cs |
@ 실행 결과
1
2
3
4
5
6
7
8
|
0 1 2 3 4 5 ... 8 9 10 11 12 13
0 0.00632 18.0 2.31 0 0.538 6.575 ... 1 296.0 15.3 396.90 4.98 24.0
1 0.02731 0.0 7.07 0 0.469 6.421 ... 2 242.0 17.8 396.90 9.14 21.6
2 0.02729 0.0 7.07 0 0.469 7.185 ... 2 242.0 17.8 392.83 4.03 34.7
3 0.03237 0.0 2.18 0 0.458 6.998 ... 3 222.0 18.7 394.63 2.94 33.4
4 0.06905 0.0 2.18 0 0.458 7.147 ... 3 222.0 18.7 396.90 5.33 36.2
[5 rows x 14 columns]
|
cs |
2. 선형 회귀 실행
선형 회귀 데이터는 마지막에 참과 거짓을 구분할 필요가 없다. 따라서 출력층에 활성화 함수를 지정할 필요도 없다.
1
2
3
4
|
model = Sequential()
model.add(Dense(30, input_dim = 13, activation = 'relu'))
model.add(Dense(6, activation = 'relu'))
model.add(Dense(1))
|
cs |
모델의 학습이 어느정도 진행되었는지 확인하기 위해서 예측 값과 실제 값을 비교하는 부분을 추가하였다.
1
2
3
4
5
|
Y_prediction = model.predict(X_test).flatten()
for i in range(10):
label = Y_test[i]
prediction = Y_prediction[i]
print("실제 가격: {:.3f}, 예상가격: {:.3f}".format(labell, prediction))
|
cs |
flatten은 2차원 리스트를 1차원 리스트로 바꿔주는 역할을 한다.
전체 코드는 다음과 같다.
@ 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy
import tensorflow as tf
df = pd.read_csv("/Users/Downloads/006958-master/deeplearning/dataset/housing.csv", delim_whitespace = True, header = None)
# 시드값 설정
seed = 0
numpy.random.seed(seed)
tf.random.set_seed(seed)
dataset = df.values
X = dataset[:, 0:13]
Y = dataset[:, 13]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.3, random_state = seed)
model = Sequential()
model.add(Dense(30, input_dim = 13, activation = 'relu'))
model.add(Dense(6, activation = 'relu'))
model.add(Dense(1))
model.compile(loss = 'mean_squared_error', optimizer = 'adam')
model.fit(X_train, Y_train, epochs = 200, batch_size = 10)
# 예측 값과 실제 값의 비교
Y_prediction = model.predict(X_test).flatten()
for i in range(10):
label = Y_test[i]
prediction = Y_prediction[i]
print("실제 가격: {:.3f}, 예상가격: {:.3f}".format(label, prediction))
|
cs |
@ 실행결과
1
2
3
4
5
6
7
8
9
10
|
실제 가격: 22.600, 예상가격: 20.511
실제 가격: 50.000, 예상가격: 26.380
실제 가격: 23.000, 예상가격: 21.946
실제 가격: 8.300, 예상가격: 12.437
실제 가격: 21.200, 예상가격: 18.368
실제 가격: 19.900, 예상가격: 21.967
실제 가격: 20.600, 예상가격: 19.311
실제 가격: 18.700, 예상가격: 24.118
실제 가격: 16.100, 예상가격: 18.969
실제 가격: 18.600, 예상가격: 13.225
|
cs |
* 출처
조태호, 모두의 딥러닝(2017), 길벗
https://cnpnote.tistory.com/entry/PYTHON-공백으로-구분-된-값으로-파일을-읽는-방법
https://programmers.co.kr/learn/courses/4008/lessons/12738
'𝐂𝐎𝐌𝐏𝐔𝐓𝐄𝐑 𝐒𝐂𝐈𝐄𝐍𝐂𝐄 > 𝐃𝐄𝐄𝐏 𝐋𝐄𝐀𝐑𝐍𝐈𝐍𝐆' 카테고리의 다른 글
딥러닝 :: 순환 신경망(RNN) (0) | 2020.08.13 |
---|---|
딥러닝 :: 베스트 모델 만들기 (0) | 2020.08.12 |
딥러닝 :: 과적합 피하기 (0) | 2020.08.11 |
딥러닝 :: 다중 분류 문제, 상관도 그래프, 원핫코딩 (0) | 2020.08.10 |
딥러닝 :: 데이터 가공하기, 그래프로 표현하기 (0) | 2020.08.10 |
Comments