본문 바로가기
데이터 과학 관련 스터디/모두의 딥러닝

[모두의 딥러닝] 15장 선형 회귀 적용하기

by inhovation97 2020. 7. 24.

이번 데이터는 보스턴의 집값에 대한 데이터 입니다. 레이블이 집값이기 때문에 분류가 아닌 회귀 문제입니다.

음... 인공 신경망은 분류와 선형 회귀가 큰 차이가 없습니다. 단지 출력층에서 0,1로 뱉는 활성화 함수를 지정해주지 않는다는 점이 차이점이예요. 마찬가지로 아주 간단합니다.

 

 

from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
import tensorflow as tf


# seed값 설정
seed=0
np.random.seed(seed)
tf.random.set_seed(3)

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(18,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,validation_split=0.3,epochs=200,batch_size=10,callbacks =EarlyStopping(monitor='val_loss',patience=100))
# 예측 값과 실제 값의 비교
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))

 

 

 

 

마지막 출력층 코드에 활성화 함수를 지정해주지 않았습니다. 

중간에 flatten이라는 함수는 저도 처음 본 함수입니다. 아무리 쉬운 책도 배울점이 있지요!

flatten함수는 다차원 배열의 함수를 1차원 배열로 바꿔주는 함수입니다.

가끔씩 for문을 이용하려 할 때, 1차원 배열이 아니라서 고민하다가 데이터프레임으로 만들고 돌린적이 있었는데 이런 함수가 있었네요!

지금 model.predict(X_test)의 예측값들은 값들이 전부 하나의 행을 차지해서 flatten함수로 1차원을 만들어 준 것입니다!

 

책에서는 18개의 은닉층을 추가하지 않은 코드가 있어서 진행해봤는데, 결과가 제대로 나오지않아 추가해봤더니 이렇게 잘 나옵니다. 이유는 저도 아직 경험이 많이 없어서 잘 모르겠습니다...ㅜㅜ

포스팅 끝! 

댓글