67 파이썬으로 신경망 모델 만들기
파이썬으로 콘크리트 강도를 예측하는 신경망 만들기
#1. 데이터 로드
#2. 결측치 확인
#3. 정규화
#4. 훈련데이터, 테스트 데이터 분리
#5. 모델 생성
#6. 모델 훈련
#7. 모델 예측
#8. 모델 평가
#9. 성능 개선
import pandas as pd
#1. 데이터 로드
df = pd.read_csv("c:\\data\\concrete.csv")
df.head()
df.shape #(1030, 9)
#2. 결측치 확인
df.isnull().sum()
#3. 정규화
x = df.iloc[:,:-1]
y = df.iloc[:,-1]
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
x_scaled = scaler.fit_transform(x)
#4. 훈련데이터, 테스트 데이터 분리
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x_scaled, y, test_size = 0.2, random_state = 10)
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape) #(824, 7) (206, 7) (824,) (206,)
#5. 모델 생성
from sklearn.neural_network import MLPRegressor #다층퍼셉트론 모듈 (수치예측)
model = MLPRegressor(random_state = 0)
#6. 모델 훈련
model.fit(x_train, y_train)
#7. 모델 예측
result = model.predict(x_test)
#8. 모델 평가
import numpy as np
np.corrcoef(result, y_test) #0.65128096
> 0.65의 상관계수 값이 출력됨. R보다 훨씬 못한 결과가 나옴.
성능을 개선시키기 위해 MLPRegressor의 hidden_layer_sizes 옵션을 주면 됨.(하이퍼 파라미터 조정)
MLPRegressor(random_state = 0) <- 2층 신경망이고 기본값은 은닉 1층의 뉴런의 갯수 100개
MLPRegressor(random_state = 0,hidden_layer_sizes = (200,50) <- 3층 신경망, 은닉1층의 뉴런 갯수 200, 은닉2층의 뉴런 갯수 50개
입력층(0층) ---> 은닉1층(200) ---> 은닉2층(50) ---> 출력층(3층)
#9. 성능개선
from sklearn.neural_network import MLPRegressor #다층퍼셉트론 모듈 (수치예측)
import numpy as np
model2 = MLPRegressor(random_state = 0, hidden_layer_sizes = (200,50))
model2.fit(x_train, y_train)
result2 = model2.predict(x_test)
np.corrcoef(result2, y_test) #0.78981519
ㅇ 파이썬에서 신경망 모델 생성시 조정할 수 있는 하이퍼 파라미터
1. hidden_layer_sizes :은닉층의 갯수와 뉴런의 갯수
2. activation : 활성화 함수(sigmoid, relu, logstic, identity, tanh)
3. solver : 경사하강법의 종류(adam, sgd, lbfgs)
4. max_iter : 책을 몇 번 볼지
#9-2. 성능개선
from sklearn.neural_network import MLPRegressor #다층퍼셉트론 모듈 (수치예측)
import numpy as np
model3 = MLPRegressor(random_state = 0, # seed값
hidden_layer_sizes = (200,50), # 은닉1층 200개, 은닉2층 50개
activation = 'relu', # 활성화함수
solver = 'adam', #경사하강법의 종류
max_iter = 1000) #반복
model3.fit(x_train, y_train)
result3 = model3.predict(x_test)
np.corrcoef(result3, y_test) #0.92989791
문제345. (오늘의 마지막 문제) 위의 model3의 성능을 더 올리는데 활성화 함수는 relu, solver = lbfgs, random_State = 0으로 했을 때 가장 적절한 hidden_layer_sizes = (i,j)를 찾으시오.
#9-4. 성능개선
from sklearn.neural_network import MLPRegressor #다층퍼셉트론 모듈 (수치예측)
import numpy as np
from itertools import product
from tqdm.notebook import tqdm
import pandas as pd
params_ik = [(i for i in range(100,401,100)),
[k for k in range(50,201,50)]]
params1 = list(product(*params_ik))
find = []
for i in tqdm(params1):
model4 = MLPRegressor(random_state = 0,
hidden_layer_sizes = i,
activation = 'relu',
solver = 'lbfgs',
max_iter = 1000)
model4.fit(x_train, y_train)
result4 = model3.predict(x_test)
find.append([i, np.corrcoef(result4, y_test)[1,0]] )
find_hidden = pd.DataFrame(find)
find_hidden.columns = ['hidden_layer_sizes', 'corrcoef']
find_hidden.sort_values(by = 'corrcoef', ascending = False).head(10)
+) 하이퍼 파라미터 최적화 모델을 찾아주는 GridSearchCV 사용, hidden_layer 2개인 경우
from sklearn.model_selection import GridSearchCV
from itertools import product
lst_ik = [(i for i in range(100,300+1,50)),
[k for k in range(10,100+1,10)]]
params3 = list(product(*lst_ik))
grid_params3 = {'hidden_layer_sizes' : params3,
'activation' : ['relu'],
'solver' : ['lbfgs'],
'max_iter' : [1000] }
model = MLPRegressor()
grid_cv = GridSearchCV(model, param_grid = grid_params3, n_jobs = -1)
grid_cv.fit(x_train, y_train)
print('최적 하이퍼 파라미터: ', grid_cv.best_params_)
# 최적 하이퍼 파라미터: {'activation': 'relu', 'hidden_layer_sizes': (150, 100), 'max_iter': 1000, 'solver': 'lbfgs'}
model6 = MLPRegressor(random_state = 0,
hidden_layer_sizes = (150,100),
activation = 'relu',
solver = 'lbfgs',
max_iter = 1000)
model6.fit(x_train, y_train)
result6 = model6.predict(x_test)
print('상관계수 : %f'%np.corrcoef(result6, y_test)[1,0])
# 상관계수 : 0.964282
'Study > class note' 카테고리의 다른 글
머신러닝 / R 로 신경망 모델 만들기(분류), 파이썬으로 신경망 모델 만들기(분류) (0) | 2022.02.22 |
---|---|
머신러닝 / 하이퍼 파라미터 최적화(grid search), 파생변수 추가 (0) | 2022.02.22 |
머신러닝 / R 로 신경망 모델 만들기 (0) | 2022.02.21 |
머신러닝 / 퍼셉트론 R과 파이썬으로 구현하기 (0) | 2022.02.17 |
[스터디] 로지스틱스회귀 스터디 (0) | 2022.02.16 |