728x90
반응형
퍼셉트론 모델
📍 퍼셉트론(Perceptron)
- 인공신경망의 한 종류
- 주로 이진분류 또는 다중분류에 사용되는 초기 인공신경망 모델
- 종속변수가 연속형인 회귀에서는 사용되지 않음(분류에서만 사용)
- 퍼셉트론에는 단층 퍼셉트론과 다층 퍼셉트론이 있음 - 주로 다층 퍼셉트론이 성능이 좋음
📍 단층 퍼셉트론(Single-Layer perceptron, SLP), 인공신경망 층
- 입력층과 출력층으로만 구성되어 있음
- 주로 이진 분류에 사용됨(성능이 낮은 경우, 다층 퍼셉트론으로 사용)
- 선형 활성화 함수(linear)를 사용
📍 다층 퍼셉트론(Multi-Layer perceptron, MLP), 심층신경망 층
- 입력층, 은닉층(1개 이상), 출력층으로 구성됨
- 주로 다중 분류에 사용됨(이진분류도 가능)
- 단층 퍼셉트론보다 높은 성능을 나타냄
- 여러 층(입력, 은닉, 출력)으로 이루어져 있다고 해서 "다층"이라고 칭함
- 은닉층에는 비선형 활성화 함수를 사용함(linear를 제외한 나머지, Sigmoid, RelU 등)
- 발전된 모델들이 현재 사용되는 모델들이며 계속 나오고 있음
퍼셉트론 분류데이터 사용
- 라이브러리 정의
import padnas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler ''' 단층 퍼셉트론 모델 ''' from sklearn.linear_model import Perceptron ''' 다층 퍼셉트론 모델 ''' from sklearn.neural_network import MLPClassifier ''' 최적의 하이퍼파라미터 찾기 ''' from sklearn.model_selection import GridSearchCVR ''' 성능평가 ''' from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix ''' 시각화 ''' import matplotlib.pyplot as plt import seaborn as sns
- 데이터 불러들이기
- 독립변수와 종속변수로 분류하기
- 정규화하기
- 훈련 : 검증 : 테스트 = 6 : 2 : 2 로 분리하기
4가지 모두 이전과 동일하므로 코드 생략
단층 퍼셉트론
- 단층 퍼셉트론 모델 생성하기
perceptron_model = Perceptron(random_state=42) perceptron_model
- 하이퍼파라미터 튜닝할 매개변수 범위 설정
param_grid = { ### 학습률 : 보폭 "alpha" : [0.0001, 0.001, 0.01], ### 반복 횟수(epoch) "max_iter" : [100, 500, 1000] } param_grid
- GridSearchCV 객체 생성
grid_search = GridSearchCV(perceptron_model, param_grid, cv=3, scoring="accuracy") grid_search
- 최적의 하이퍼파라미터 찾기
grid_search.fit(X_train, y_train)
- 최적의 하이퍼파라미터 출력
grid_search.best_params_
- 최적의 모델
best_model = grid_search.best_estimator_ best_model
- 최적의 모델로 훈련시키기
best_model.fit(X_train, y_train)
- 훈련 및 검증 정확도 확인하기
score_train = best_model.score(X_train, y_train) score_val = best_model.score(X_val, y_val) score_train, score_val
과대/과소는 일어나지 않았지만, 모델자체의 성능이 낮음
- 정밀도, 재현율, f1, 매트릭스 확인
''' 정밀도, 재현율, f1, 매트릭스 확인 ''' ''' 예측하기 ''' y_pred = best_model.predict(X_test) ''' 정밀도 ''' pre = precision_score(y_test, y_pred) ''' 재현율 ''' re = recall_score(y_test, y_pred) ''' f1-score ''' f1 = f1_score(y_test, y_pred) ''' 평가 매트릭스(혼동행렬) ''' cm = confusion_matrix(y_test, y_pred) pre, re, f1, cm
보통 재현율과 f1은 유사하게 나옴.
재현율 = 1은 위험한 오류가 없다는 뜻.
f1이 낮게 나온것은 긍정적 오류가 존재한다는 뜻
매트릭스 상에서 0을 0으로 맞춘게 하나도 없음 > 문제 - 혼동행렬 시각화 - 방법 1
plt.figure(figsize=(8, 4)) plt.title("Confusion_matrix") sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=["0", "1"], yticklabels=["0", "1"]) ### cbar=False 설정시 오른쪽 막대 바 사라짐 plt.show()
- 혼동행렬 시각화 - 방법 2
from sklearn.metrics import ConfusionMatrixDisplay disp = ConfusionMatrixDisplay(confusion_matrix =cm) disp.plot()
다층 퍼셉트론
- 다층 퍼셉트론 모델 생성하기
mlp_model = MLPClassifier(random_state=42) mlp_model
- 튜닝할 하이퍼파라미터 설정하기
param_grid = { ### hidden_layer_sizes : 은닉계층 정의 # - (10,) : 은닉계층 1개 사용, 출력크기 10개를 의미함 # - (10, 10) : 은닉계층 2개 사용, 각각의 출력 크기가 10개라는 의미 # - (10, 11, 12) : 은닉계층 3개 사용, 각각의 출력 크기는 10, 11, 12 "hidden_layer_sizes" : [(10,), (50,), (100,)], "alpha" : [0.0001, 0.001, 0.01], "max_iter" : [1000] } param_grid
- GridSearchCV 객체 생성
grid_search_mlp = GridSearchCV(mlp_model, param_grid, cv=3, scoring="accuracy") grid_search_mlp
- 최적의 하이퍼파라미터
grid_search_mlp.fit(X_train, y_train)
- 최적의 하이퍼파리미터 출력
grid_search_mlp.best_params_
- 최적의 모델
best_model_mlp =grid_search_mlp.best_estimator_ best_model_mlp
- 훈련 및 검증 정확도 확인하기
score_train = best_model_mlp.score(X_train, y_train) score_val = best_model_mlp.score(X_val, y_val) score_train, score_val
- 정밀도, 재현율, f1, 매트릭스 확인
''' 예측하기 ''' y_pred = best_model_mlp.predict(X_test) ''' 정밀도 ''' pre = precision_score(y_test, y_pred) ''' 재현율 ''' re = recall_score(y_test, y_pred) ''' f1-score ''' f1 = f1_score(y_test, y_pred) ''' 평가 매트릭스(혼동행렬) ''' cm = confusion_matrix(y_test, y_pred) pre, re, f1, cm
- 혼동행렬 시각화
plt.title("Confusion_matrix") sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=["0", "1"], yticklabels=["0", "1"]) ### cbar=False 설정시 오른쪽 막대 바 사라짐 plt.show()
728x90
반응형
'Digital Boot > 인공지능' 카테고리의 다른 글
[인공지능][DL] Deep Learning - 순환신경망(RNN), 장기기억 순환신경망(LSTM), 게이트웨이 반복 순환신경망(GRU) (1) | 2024.01.08 |
---|---|
[인공지능][DL] Deep Learning - 심플 순환신경망(Simple RNN) (1) | 2024.01.05 |
[인공지능][DL] Deep Learning 실습 - DNN 분류데이터 사용 (1) | 2024.01.05 |
[인공지능][DL] Deep Learning - 심층신경망 훈련 및 성능향상 (2) (2) | 2024.01.04 |
[인공지능][DL] Deep Learning - 심층신경망 훈련 및 성능향상 (1) | 2024.01.03 |