Sklearn에서 제공하는 인공신경망 라이브러리이다.
분류의 경우
MLPClassifier
sklearn.neural_network.MLPClassifier(hidden_layer_sizes=(100,), activation='relu', *, solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08, n_iter_no_change=10, max_fun=15000)
주요 하이퍼 파라미터
| 파라미터 | 초기값 | 설명 |
| hidden_layer_sizes | 100 | hidden layer의 크기를 설정한다. tuple로 전달할 수 있으며, tuple의 i번째 element가 i번째 hidden layer의 크기가 된다. tuple, length = n_layers - 2 |
| activation | relu | hidden layer 활성화 함수 'identity', 'logistic', 'tanh', 'relu'를 사용할 수 있다. ‘identity’ : 선형함수 no-op activation, f(x) = x ‘logistic’ : sigmoid 함수 f(x) = 1 / (1 + exp(-x)). ‘tanh’ : f(x) = tanh(x). ‘relu’ : f(x) = max(0, x) |
| solver | adam | optimizer 종류. 'lbfgs', 'sgd', 'adam'을 사용할 수 있다. - ‘lbfgs’ : quasi-Newton( 0 또는 함수의 극대값과 극소값을 찾는 방법)의 최적화 도구 (작은데이터셋) - ‘sgd’ : 경사하강법 - ‘adam’ : 확률적 기울기 기반 optimizer (수천개이상일때) |
| batch_size | auto | mini-batch 크기를 설정min(200, n_samples) |
| learning_rate | constant | learning rate scheduler 종류 설. 'constant', 'invscaling', 'adaptive'를 사용가능. (solver 가 sgd일때만 사용) |
| max_iter | 200 | training iteration을 수행할 횟수 (=epoch) |
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv("data.csv")
X = df.iloc[:,:-1]
y = df.iloc[:,-1]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3, random_state=123, stratify=y)
# 1. 기본함수 성능
from sklearn.neural_network import MLPClassifier
model = MLPClassifier().fit(X_train, y_train)
model.score(X_train, y_train), model.score(X_test, y_test)
(0.7128571428571429, 0.7)
# 2. 하이퍼 파라미터 튜닝
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
model = MLPClassifier(max_iter = 10000)
scaler = StandardScaler()
sets = [('scaler',scaler),('model',model)]
pipe = Pipeline(sets)
parameters = {'model__hidden_layer_sizes':[10, 50,100],
'model__solver': ['lbfgs', 'sgd','adam'],
'model__activation' : ['tanh','relu'],
}
grid = GridSearchCV(pipe, parameters, cv=5)
grid.fit(X_train, y_train)
grid.score(X_train, y_train), grid.score(X_test, y_test)
(0.7628571428571429, 0.7533333333333333)
MLPRegressor
sklearn.neural_network.MLPRegressor(hidden_layer_sizes=(100,), activation='relu', *, solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08, n_iter_no_change=10, max_fun=15000
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
df = pd.read_csv('data.csv')
X = df.iloc[:,:-1]
y = df.iloc[:,-1]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = 0.3, random_state=123)
# 1. 기본함수 R2 성능
from sklearn.neural_network import MLPRegressor
model0 = MLPRegressor().fit(X_train, y_train)
model0.score(X_train,y_train), model0.score(X_test, y_test)
(0.5326865504448246, 0.5529725574291056)
# 2. 하이퍼 파라미터 튜닝
from sklearn.pipeline import Pipeline
from sklearn.model_selection import RandomizedSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPRegressor
model = MLPRegressor()
scaler = StandardScaler()
sets = [('scaler',scaler),('model',model)]
pipe = Pipeline(sets)
gridparams = {
'model__hidden_layer_sizes':[(100,100,100),(64,64,64)],
'model__activation':['relu','identity', 'tanh'],
'model__solver':['lbfgs', 'sgd', 'adam'],
}
cv = RandomizedSearchCV(pipe, gridparams, cv=5, verbose=2)
cv.fit(X_train, y_train)
cv.score(X_train,y_train), cv.score(X_test, y_test)
(0.7436301746077818, 0.7385911830485477)'딥러닝' 카테고리의 다른 글
| 자동미분(automatic differentiation) (0) | 2025.07.19 |
|---|---|
| Transformer Section2 (1) | 2025.01.02 |
| Transformer Section1 (1) | 2024.12.31 |
| 파이토치(Pytorch) 개요 (2) | 2024.11.20 |
| 인공신경망(ANN) (1) | 2023.08.10 |
