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

+ Recent posts