일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- orm
- 페이지네이션
- 머신러닝
- 웹프로그래밍A-Z기초
- 스파르타코딩클럽
- 터미널
- HTML
- 코딩교육
- predict
- 내일배움캠프
- 장고
- network
- Wil
- 디스코드봇
- MySQL
- paginator
- 파이썬
- 기초문법
- 스파르타코딩클럽후기
- 선형회귀
- cs
- Django
- vscode
- Python
- error
- 파이널프로젝트
- Model
- musicbot
- git
- JavaScript
- Today
- Total
lution88
# 논리회귀 Logistic regression 본문
- 논리회귀 logistic regression
머신러닝에서 입력값과 범주 사이의 관계를 구하는 것을 논리회귀라고 한다.
논리회귀가 필요한 이유는 선형회귀로 풀수 없는 문제를 풀 수 있기 때문이다.
예)) 공부한 시간을 가지고 해당 과목 이수여부를 예측하고자 했을때.
해당 데이터를 그래프로 표현한다면 아래와 같다.
선형회귀를 사용하여 만든 그래프는 쭉 뻗기만하고 이수여부의 정확도가 떨어진다고 할 수 있다.
논리회귀는 선형회귀와 똑같지만, 출력에 논리함수(=시그모이드 함수)를 붙여 값이 0과 1사이를 가지도록 한다.
논리함수 logistic function 를 사용하여 만든 그래프는 이수여부를 보다 명확하게 구분할 수 있고
선형회귀보다 더 잘 예측할 수 있게 된다.
임계치 threshold 를 정해서 임계치를 넘으면 (1) pass / 못 넘으면 (0) fail 로 구분한다.
논리회귀에서도 손실함수는 선형회귀와 마찬가지로 최소화 하는 방향으로 가게 된다.
결국 논리회귀는 0이나 1의 값이 나와야 되는데
정답값이 0이면 확률분포 그래프가 0에 가깝게 나와야 되고,
정답값이 1이면 확률분포 그래프가 1에 가깝게 나와야 된다.
논리회귀는 선형이 아니라 확률분포 그래프로 이해하는게 쉽다.
정답이 0인 경우 내가 예측한 값이 가설로부터 나왔을 때그것을 0에 가깝게 만들어 줘야 한다.
0일 확률이 100% / 1일 확률이 0% 가 되게 만들어 주는 그래프 형태로 만들어준다.
이렇게 만들기 위해 crossentropy 라는 손실함수를 사용하고, 이것은 확률분포의 차이를 줄여주게 만든다.
파란색 그래프를 빨간색 그래프처럼 만들기 위해 노력하는 함수가 crossentropy 고,
이 crossentropy 함수를 통해서 예측값과 실제값간의 거리를 줄여서
모델의 학습이 잘 되도록 하는 것이다.
- 다항 논리 회귀 Multinomial logistic regression
클래스의 개수가 여러개인 경우 사용하는 방법이다.
One Hot Encoding 이라는 방법이 필요하다.
다항 논리 회귀의 예)
공부한 시간을 가지고 해당 과목의 성적(A, B, C, D, F)를 예측하기.
위 문제를 논리회귀로 풀려면 클래스를 5개로 나누어야 한다.
이 방법을 다중 논리 회귀라 한다.
- One-hot Encoding
: 다항 분류 문제에서 출력값의 형태를 가장 예쁘게 표현하는 방법으로,
여러개의 항을 0과 1로만 표현한다.
- 원핫인코딩 만드는 방법
- 1) 클래스의 개수만큼 배열을 0으로 채운다.
- 2) 각 클래스의 인덱스 위치를 정한다.
- 3) 각 클래스에 해당하는 인덱스에 1을 넣는다.
단항 논리 회귀에서는 sigmoid function을 써서 0이냐 1이냐, 이수냐, 미이수냐 이렇게만 구분했지만,
다항 논리 회귀에서는 sigmoid function을 써서 0과 1로만 표현할 수 없이 3개 이상의 클래스를 구분해야 되니까
소프트맥스 softmax 라는 함수를 사용하게 된다.
소프트맥스란 어떤 linear regression 모델을 써서 값이 나왔을 때 비슷한 가중치를 만들어 주면서
모든 값을 더했을 시 확률이 1이 되도록 만들어 주는 함수이다.
다 더하면 1이 되도록 만드는 이유는 예측의 결과를 확률로 표현하기 위함인데
우리가 one-hot encoding을 할 때에도 라벨의 값을 전부 더하면 1(100%)가 되기 때문이다.
가로축은 클래스(라벨)이 되고 세로축은 확률이 되는데, 확률분포의 차이를 계속할 때는 crossentropy 함수를 쓴다.
항이 여러개가 되었을 뿐 차이는 이진 논리 회귀와 차이가 없다.
우리는 데이터셋의 정답 라벨과 우리가 예측한 라벨의 확률분포 그래프를 구해서 crossentropy로 두 확률 분포의 차이를 구한 다음, 그 차이를 최소화하는 방향으로 학습을 시킨다.
논리회귀 정리
단항 논리 회귀에서는 sigmoid 함수를 써서 0이냐 1이냐로만 나누고
CrossEntropy를 써서 확률분포 그래프의 차이를 계산하여 최소화한다.
Keras 에서 단항 논리 회귀의 경우 binary_crossentropy 손실함수를 사용한다.
다항 논리 회귀에서는 sigmoid 대신 softmax를 쓰고 CrossEntropy를 쓴다.
그래서 확률 분포 차이를 구해서 최소화 한다.
차이점은 라벨의 개수가 몇개냐, 클래스의 개수가 몇개냐만 다르다.
Keras 에서 다항 논리 회귀의 경우 categorical_crossentropy 손실함수를 사용한다.
'개발일지 > # 머신러닝' 카테고리의 다른 글
# 전처리 pre-processing (0) | 2022.01.10 |
---|---|
# 다중 선형 회귀 실습 Multi-variable linear regression (0) | 2022.01.09 |
# 캐글-colab을 이용한 선형회귀 실습 (0) | 2022.01.09 |
# 선형 회귀 와 경사하강법 (0) | 2022.01.09 |
# 머신러닝이란? (0) | 2022.01.07 |