유방암 데이터 세트
cancer에는 569개의 샘플과 30개의 특성이 이며, 데이터는 실수 범위의 값이고, 양수이다.
박스 플롯으로 그림을 그려보면 위와 같다.
4, 14, 23, 24번째 값이 다른 값들에 비해 분포가 크다.
4, 14, 23, 24번째 특성의 인덱스를 리스트로 묶어 전달하여 특성을 살펴보니 area와 관련된 특성임을 알 수 있다.
타깃 데이터에는 212개의 음성값과 357개의 양성값이 있다는 것을 알 수 있다.
일반화 성능 : 훈련된 모델의 실전 성능
훈련 데이터 세트, 테스트 세트로 나누는 규칙
1. 테스트 세트보다 훈련 세트가 많아야 한다.
2. 훈련 데이터 세트를 나누기 전 양성, 음성 클래스가 한쪽에 몰리지 않도록 한다.
훈련 세트와 테스트 세트로 나누기
cancer 데이터 셋은 음성, 양성이 212, 357개다. 이 비율이 훈련 세트와 테스트 세트에도 유지되어야 한다.
train_test_split() 함수는 입력된 훈련 데이터 세트를 훈련 75%, 테스트 25%의 비율로 나눠준다.
strarify=y
훈련데이터를 나눌 때 클래스 비율을 동일하게 만든다. 일부 클래스 비율이 불균형한 경우 stratify를 y로 지정해야 한다.
test_size=0.2
데이터 세트를 75,25 비율로 나누는데 비율을 조절하고 싶은 경우 값을 지정한다.
0.2 -> 20%
random_state=42
무작위로 데이터 세트를 섞은 다음에 나누도록 한다.
나눈 결과를 확인해보면 4:1의 비율로 잘 나누어진 것을 확인할 수 있다.
로지스틱 회귀 구현하기
가중치와 절편을 미리 설정하지 않는 이유는 나중에 입력 데이터를 보고 특성 개수에 맞게 결정하기 위함이다.
forpass() 메소드에서는 가중치와 입력 특성의 곱을 모두 더하여 직선 방정식을 만들었다.
backprop() 메소드로 가중치와 절편에 대한 그레이디언트를 계산한다.
훈련 메소드 구현하기
activation() 메소드는 시그모이드를 계산한다.
fit() 메소드는 가중치와 절편을 정하고, 활성화 함수를 적용한다.
예측 메소드 구현하기
predict() 메소드는 이전에서 구현한 선형 함수, 활성화 함수, 임계 함수를 순서대로 통과시키면서 예측 값을 구한다.
로지스틱 회귀 모델 훈련시키기
LogisticNeuron 클래스 객체를 만들어 훈련 세트로 모델 훈련을 한 후, 예측값이 맞는지 확인해보면 약 82%의 정확도를 보이는 것을 알 수 있다.
로지스틱 회귀는 단일 신경층과 동일하다
로지스틱 회귀는 은닉층이 없는 신경망 즉, 단일층 신경망이다.
로지스틱 회귀는 경사하강법을 사용한다. 경사 하강법은 손실 함수의 결과값을 최소화하는 방향으로 가중치를 없데이트 하는 것이다.
init() 메소드에서 손실 함수의 결과값을 저장할 리스트 self.losses를 생성하고 결과값의 합을 샘플 개수로 나눈 평균값을 저장한다.
확률적 경사 하강법
1개의 샘플을 중복되지 않도록 무작위로 선택하여 그레이디언트를 계산하는 것
장점 : 계산 비용이 적다.
단점 : 가중치가 최적값에 수렴하는 과정이 불안정함.
배치 경사 하강법
전체 훈련 세트를 사용하여 한 번에 그레이디언트를 계산하ㅡㄴ 것
장점 : 가중치가 최적값에 수렴하는 과정이 안정적임.
단점 : 계산 비용이 크다.
미니 배치 경사 하강법
확률적 경사하강법과 배치 경사하강법의 절충안
전체 샘플 중 몇개의 샘플을 중복되지 않도록 무작위로 선택하여 그레이디언트를 계산하는 것
fit() 메소드는 가중치와 절편을 초기화 한 후, 모든 샘플에 대해 정방향을 계산하고 활성화 함수를 적용 및 오차 계산하여 가중치와 절편을 업데이트하는 것을 에포크만큼 반복한다.
score() 메소드는 정확도를 계산해주는 메소드이다.
단일층 신경망 훈련하기
SingleLayer로 객체를 만들고 신경망을 훈련한 후 정확도를 구해보면 약 92%로 높은 정확도를 보이는 것을 알 수 있다.
그래프를 그려보면 에포크가 진행됨에 따라 손실함수 값이 감소하고 있는 것을 알 수 있다.
사이킷런으로 로지스틱 회귀 수행하기
SGDClassifier 클래스에 로지스틱 회귀를 적용해보자.
max_iter로 반복 횟수를 100으로 지정한다.
반복할 때마다 로지스틱 손실 함수의 값이 tol에 지정한 값 만큼 감소되지 않으면 반복을 멈추도록 한다.
fit()로 모델을 훈련하고, score()로 정확도를 계산하면 약 83%의 정확도가 나온다.
predict로 테스트 세트에 대해 예측 값을 구하면 위와 같다.
'STUDY > 인공지능' 카테고리의 다른 글
[6주차] 신경망 알고리즘 벡터화 (0) | 2021.05.25 |
---|---|
[5주차] 규제 방법, 교차검증 (0) | 2021.05.17 |
[4주차] 검증세트, 전처리, 과대적합과 과소적합 (0) | 2021.05.11 |
[2주차] 손실함수와 경사하강법의 관계, 선형회귀를 위한 클래스 생성, 퍼셉트론, 아달린, 로지스틱 회귀, 시그모이드 함수, 로지스틱 손실 함수 (0) | 2021.04.02 |
[1주차] 코랩 사용법, 선형 회귀, 경사하강법 (0) | 2021.03.28 |