반응형
실습 1
tf04_train_test_split01.py
train, test 데이터 비율 직접 나누기
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
# 1. 데이터
x = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
y = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
# x = np.array([range(1, 21)])
# y = np.array([range(1, 21)]) => 일일히 입력하는 대신 range함수를 사용하면 편하다.
# print(x.shape) # (20,)
# print(y.shape) # (20,) => 1차원배열
# print(x) # [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
# train과 test 비율 나누기
x_train = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14])
y_train = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14])
x_test = np.array([15, 16, 17, 18, 19, 20])
y_test = np.array([15, 16, 17, 18, 19, 20])
# train : test = 14 : 6 (7 : 3 의 비율로 나눴다)
# 2. 모델구성
model = Sequential()
model.add(Dense(14, input_dim=1))
model.add(Dense(50))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x_train, y_train, epochs=100, batch_size=1)
# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
print('loss : ', loss)
result = model.predict([21])
print('21의 예측값 : ', result)
# 결과
# loss : 1.8189894035458565e-12
# 21의 예측값 : [[20.999998]]
tf04_train_test_split02.py
범위 설정으로 데이터 비율 나누기
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
# 1. 데이터
x = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
y = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
# x = np.array([range(1, 21)])
# y = np.array([range(1, 21)])
# print(x.shape)
# print(y.shape)
# print(x)
# x_train = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14])
# y_train = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14])
# x_test = np.array([15, 16, 17, 18, 19, 20])
# y_test = np.array([15, 16, 17, 18, 19, 20])
# [실습] x와 y 데이터를 파이썬 리스트 스플릿으로 분리하세요.
# 요렇게 스플릿으로도 표현 가능
x_train = np.array(x[:14])
y_train = np.array(y[:14])
x_test = np.array(x[14:])
y_test = np.array(y[14:])
print(x_test)
print(y_train)
print(x_test)
print(y_test)
# 2. 모델구성
model = Sequential()
model.add(Dense(14, input_dim=1))
model.add(Dense(50))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x_train, y_train, epochs=100, batch_size=1)
# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
print('loss : ', loss)
result = model.predict([21])
print('21의 예측값 : ', result)
# 결과
# loss : 5.9776855778181925e-05
# 21의 예측값 : [[20.989101]]
tf04_train_test_split03.py
train_data_split 이용하여 데이터 비율 나누기.
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
# 1. 데이터
x = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
y = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
x_train, x_test, y_train, y_test = train_test_split(
x, y, # x, y 데이터
test_size=0.3, # test의 사이즈. 보통 30%
train_size=0.7, # train의 사이즈. 보통 70%
random_state=100, # 데이터를 난수값에 의해 추출한다는 의미이며, 중요한 하이퍼파라미터임.
shuffle=True # 데이터를 섞어서 가지고 올 것인지를 정함. shuffle=True는 디폴트로 적용됨.
)
# 2. 모델구성
model = Sequential()
model.add(Dense(14, input_dim=1))
model.add(Dense(50))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x_train, y_train, epochs=100, batch_size=1)
# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
print('loss : ', loss)
result = model.predict([21])
print('21의 예측값 : ', result)
# 결과
# loss : 2.420316924656163e-08
# 21의 예측값 : [[21.000084]]
tf05_scatter.py
산점도 그래프 출력하기
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
# 1. 데이터
x = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
y = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
x_train, x_test, y_train, y_test = train_test_split(
x, y, # x, y 데이터
test_size=0.3, # test의 사이즈. 보통 30%
train_size=0.7, # train의 사이즈. 보통 70%
random_state=100, # 데이터를 난수값에 의해 추출한다는 의미이며, 중요한 하이퍼파라미터임.
shuffle=True # 데이터를 섞어서 가지고 올 것인지를 정함. shuffle=True는 디폴트로 적용됨.
)
# 2. 모델구성
model = Sequential()
model.add(Dense(14, input_dim=1))
model.add(Dense(50))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x_train, y_train, epochs=100, batch_size=1)
# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
print('loss : ', loss)
result = model.predict([21])
print('21의 예측값 : ', result)
y_predict = model.predict(x)
#### scatter visualization
import matplotlib.pyplot as plt
plt.scatter(x, y) # 산점도 그리기
plt.plot(x, y_predict, color='red')
plt.show()
# 결과
# loss : 6.721970748913009e-07
# 21의 예측값 : [[20.998983]]
tf06_R2score.py
결정계수
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
# 1. 데이터
x = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
y = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
x_train, x_test, y_train, y_test = train_test_split(
x, y, # x, y 데이터
test_size=0.3, # test의 사이즈. 보통 30%
train_size=0.7, # train의 사이즈. 보통 70%
random_state=100, # 데이터를 난수값에 의해 추출한다는 의미이며, 중요한 하이퍼파라미터임.
shuffle=True # 데이터를 섞어서 가지고 올 것인지를 정함. shuffle=True는 디폴트로 적용됨.
)
# 2. 모델구성
model = Sequential()
model.add(Dense(14, input_dim=1))
model.add(Dense(50))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x_train, y_train, epochs=100, batch_size=1)
# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
print('loss : ', loss)
result = model.predict([21])
print('21의 예측값 : ', result)
y_predict = model.predict(x)
#### R2score
from sklearn.metrics import r2_score, accuracy_score
r2 = r2_score(y, y_predict)
print('r2score : ', r2)
# result(1)
# loss: loss : 1.564977537782397e-05
# r2score : 0.9999995935707783
# 21의 예측값 : [[20.993484]]
tf06_R2_bad.py
강제로 성능 저하시켜보기.
# [실습]
# 1. R2score를 음수가 아닌 0.5 이하로 만들어보세요.
# 2. 데이터는 건드리지 마세요.
# 3. 레어어는 인풋, 아웃풋 포함 7개 (은닉층 5개 이상)이상으로 만들어주세요.
# 4. batch_size=1
# 5. 은닉층의 노드 개수는 (10개 이상) 100개 이하.
# 6. train_size = 0.7
# 7. epochs=100 이상
# [실습 시작!]
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
# 1. 데이터
x = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
y = np.array([1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
x_train, x_test, y_train, y_test = train_test_split(
x, y, # x, y 데이터
test_size=0.3, # test의 사이즈. 보통 30%
train_size=0.7, # train의 사이즈. 보통 70%
random_state=3, # 데이터를 난수값에 의해 추출한다는 의미이며, 중요한 하이퍼파라미터임.
shuffle=True # 데이터를 섞어서 가지고 올 것인지를 정함. shuffle=True는 디폴트로 적용됨.
)
# 2. 모델구성
model = Sequential()
model.add(Dense(20, input_dim=1))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x_train, y_train, epochs=100, batch_size=1)
# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
print('loss : ', loss)
result = model.predict([21])
print('21의 예측값 : ', result)
y_predict = model.predict(x)
#### R2score
from sklearn.metrics import r2_score, accuracy_score
r2 = r2_score(y, y_predict)
print('r2score : ', r2)
# result(1)
# loss: loss : 38.073455810546875
# r2score : 0.08040983957982561
# 21의 예측값 : [[9.523099]]
# 은닉층이 너무많으면 성능이 안 좋아짐
반응형
'[네이버클라우드] AIaaS 개발자 과정 > AI' 카테고리의 다른 글
[네이버클라우드캠프] 2023.5.9 AI(2) - 실습 2 (0) | 2023.05.09 |
---|---|
[네이버클라우드캠프] 2023.5.8 AI(2) - 파이썬 기초, 딥러닝 다층 퍼셉트론 실습 (0) | 2023.05.08 |
[네이버클라우드캠프] 2023.5.8 AI - 인공지능 개념 정리 (추가) (0) | 2023.05.08 |
[네이버클라우드캠프] 2023.5.8 AI(1) - Anaconda, Visual Studio Code 설치 (0) | 2023.05.08 |