이번 데이터는 보스턴의 집값에 대한 데이터 입니다. 레이블이 집값이기 때문에 분류가 아닌 회귀 문제입니다.
음... 인공 신경망은 분류와 선형 회귀가 큰 차이가 없습니다. 단지 출력층에서 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개의 은닉층을 추가하지 않은 코드가 있어서 진행해봤는데, 결과가 제대로 나오지않아 추가해봤더니 이렇게 잘 나옵니다. 이유는 저도 아직 경험이 많이 없어서 잘 모르겠습니다...ㅜㅜ
포스팅 끝!
'데이터 과학 관련 스터디 > 모두의 딥러닝' 카테고리의 다른 글
[모두의 딥러닝] 16장 이미지 인식의 꽃, CNN 익히기 (0) | 2020.08.15 |
---|---|
[모두의 딥러닝] 14장 베스트 모델 만들기 (0) | 2020.07.23 |
[모두의 딥러닝] 13장 과적합 피하기 (0) | 2020.07.14 |
[모두의 딥러닝] 12장 다중 분류 문제 해결하기 (0) | 2020.07.12 |
[모두의 딥러닝] 11장 데이터 다루기 (0) | 2020.07.11 |
댓글