MLP란 무엇일까?
MLP(Multi-Layer Perceptron)는 여러 개의 퍼셉트론 뉴런을 여러 층으로 쌓은 다층신경망 구조, 즉 단층 퍼셉트론 형태에서 입력층과 출력층 사이에 하나 이상의 은닉층을 가지고 있는 신경망이다. 기존의 CNN에서 많이 활용되는 구조이며 입력층, 한 개 이상의 은닉층, 출력층으로 이루어진 전방향 신경망이다.
내가 하고 있는 프로젝트에서는 텍스트 분류를 해야하는데, 이를 위해 돌려볼 알고리즘 중 하나로 MLP를 선택했다. 그 이유는 MLP를 형성하여 이를 텍스트 분류를 할 때 사용하면, 텍스트가 어떤 주제(범주)에 속하는지를 더 높은 정확도로 분류해줄 수 있기 때문이다.

위 사진에서 볼 수 있듯이 긴 글이어도 MLP를 형성한다면 레이블링한 주제에 맞게 쉽고 정확하게 분류를 할 수 있다.
그럼 MLP가 어떻게 작동하는지 간단한 실습을 해보겠다.

첫번째 layer인 inputlayer는 3개가 들어온다고 표시를 해주고, 은닉층(hidden layer)은 unit이 4개로 되어있다.
위의 모델 summary에는 hidden layer 2개와 outputlayer를 표시해주고, param은 (input 뉴런 수 +1) * output 뉴런수 로 정의해준다.
그리고 퍼셉트론으로 해결할 수 없었던 XOR를 풀어본다.

이를 100번 실행해보면

이 나오는데, 손실 그래프를 봤을 때 loss가 크게 줄어들지 않는 것을 알 수 있다.
또다른 실습도 첨부하겠다.


코드는 다음과 같다:
from sklearn import datasets
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import confusion_matrix
cancer = load_breast_cancer()
cancer.keys()
X = cancer['data']
y = cancer['target']
X_train, X_test, y_train, y_test = train_test_split(X, y)
cancer.keys()
clf = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(5, 2), random_state=1)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(precision_score(y_test, y_pred, average='macro'))
print(recall_score(y_test, y_pred, average='macro'))
print(confusion_matrix(y_test, y_pred))
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import confusion_matrix
#cancer = load_breast_cancer()
#cancer.keys()
iris = datasets.load_iris()
iris.target
X = iris.data[:,:2] ## we only take the first two features.
y = iris.target
#X = iris['data']
#y = cancer['target']
X_train, X_test, y_train, y_test = train_test_split(X, y)
clf = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(5, 2), random_state=1)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(precision_score(y_test, y_pred, average='macro'))
print(recall_score(y_test, y_pred, average='macro'))
print(confusion_matrix(y_test, y_pred))
잘 봤어요~ 김현수교수