[스파르타코딩클럽] 가장 쉽게 배우는 머신러닝 2주차 개발일지

연두·2021년 7월 27일
0
post-thumbnail

논리 회귀 (Logistic Regression)


로지스틱 함수 (시그모이드 함수)

Reference https://ursobad.tistory.com/44

로지스틱 함수는 입력값(x)으로 어떤 값이든 받을 수가 있지만, 출력 결과(y)는 항상 0에서 1 사이의 값이 된다.

실제 많은 자연, 사회현상에서는 특정 변수에 대한 확률값이 선형이 아닌 S커브 형태를 따르는 경우가 많다. 이러한 S커브를 함수로 표현해낸 것이 바로 로지스틱 함수(Logistic function)이다. 딥러닝에서는 시그모이드 함수(Sigmoid function)라고 불린다.

가설

논리 회귀는 실질적인 계산은 선형 회귀와 똑같지만, 출력에 시그모이드 함수를 붙여 0에서 1 사이의 값을 가지도록 한다.
시그모이드 함수는 다음과 같이 생겼다.

🌞 시그모이드 함수
x(입력)가 음수 방향으로 갈 수록 y(출력)가 0에 가까워지고,
x(입력)가 양수 방향으로 갈 수록 y(출력)가 1에 가까워진다!
즉, 시그모이드 함수를 통과하면 0 에서 1 사이 값이 나온다!!!


H(x)=11+e(Wx+b)H(x) = \frac{1}{1 + e^{-(Wx + b)}}

손실함수

손실함수는 어렵고 복잡한 수식이다. 수식보다는 개념을 이해하도록 한다. 손실 함수는 아래의 그림처럼 예측한 라벨이 정답 라벨과 같을 떄 확률이 1(=100%)이 되어야 한다.

출처: https://machinelearningknowledge.ai/cost-functions-in-machine-learning/

이렇게 가로축을 라벨(클래스)로 표시하고 세로축을 확률로 표시한 그래프를 확률분포그래프라고 한다. 확률분포그래프의 차이를 비교할 때는 Crossentropy라는 함수를 사용한다.
간단하게 그래프로 개념을 이해하면, 임의의 입력값에 대해 우리가 원하는 확률 분포 그래프를 만들도록 학습시키는 손실함수이다.

🌞 Keras에서 이진 논리 회귀의 경우 binary_crossentropy 함수를 사용한다.


다항 논리 회귀

다항 논리 회귀와 One-hot encoding

❓ 대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 성적(A, B, C, D, F)을 예측하는 문제

위의 문제를 논리 회귀로 풀려면, 아래와 같이 클래스를 5개의 클래스로 나눈다. 이 방법을 다중 논리 회귀 (Multinomial logistic regression)이라고 부른다.

성적클래스
A0
B1
C2
D3
F4

One-hot encoding은 다항 분류(Multi-label classification)문제를 풀 때 출력값의 형태를 가장 예쁘게 표현할 수 있는 방법이다.

성적 클래스 분류 - One-hot encoding

성적클래스One-hot encoding
A0[1,0,0,0,0]
B1[0,1,0,0,0]
C2[0,0,1,0,0]
D3[0,0,0,1,0]
F4[0,0,0,0,1]

🌞 One-hot encoding 을 만드는 방법
1. 클래스(라벨)의 개수만큼 배열을 0으로 채운다.
2. 각 클래스의 인덱스 위치를 정한다.
3. 각 클래스에 해당하는 인덱스에 1을 넣는다.

Softmax함수와 손실함수

Softmax 함수
선형 모델에서 나온 결과(Logit)를 모두가 더하면 1이 되도록 만들어주는 함수

다 더하면 1이 되도록 만드는 이유
: 예측의 결과를 확률(Confidence)로 표현하기 위함이다. 우리가 One-hot encoding을 할 때에도 라벨의 값을 전부 더하면 1(100%)이 되기 때문이다.
출처: https://www.tutorialexample.com/implement-softmax-function-without-underflow-and-overflow-deep-learning-tutorial/
출처: https://www.programmersought.com/article/62574848686/

다항 논리 회귀에서 Softmax 함수를 통과한 결과 값의 확률 분포 그래프를 그려서 아래 그래프의 모양이라고 가정하자. 확률 분포의 차이를 계산할 떄는 Crossentropy 함수를 쓴다. 항이 여러개가 되었을 뿐 이진 논리 회귀와 차이는 없다. 우리는 데이터셋의 정답 라벨과 우리가 예측한 라벨의 확률 분포 그래프를 구해서 Crossentropy로 두 확률 분포의 차이를 구한 다음 그 차이를 최소화 하는 방향으로 학습을 시킬 것이다.

🌞 Keras에서 이진 논리 회귀의 경우 categorical_crossentropy 함수를 사용한다.


다양한 머신러닝 모델

Support Vector Machine (SVM)

구분하는 문제를 푸는 것은 분류 문제(Classification problem)이라고 부르고 분류 문제를 푸는 모델을 분류기(Classifier)라고 부른다.
강아지와 고양이를 분류하기 위해 아래와 같은 예를 들어보자.
강아지와 고양이를 나누는 모델을 만들기 위해 한개의 직선을 그어볼 것이다. 이 선과 고양이, 강아지 간의 거리를 계산한다. 그리고 거리가 가장 최대가 되는 직선을 그리면 구분이 잘 될 것이다.각 그래프의 축을 Feature라고 부르고
각 고양이, 강아지와 우리가 그린 빨간 벡터를 Support Vector라고 부른다. 그리고 그 벡터의 거리를 Margin이라고 부른다. 우리는 Margin이 넓어지도록 이 모델을 학습시켜 훌륭한 SVM을 만들 수 있다.

💥 예외상황 발생!
만약 충성심이 강한 개냥이가 등장한다면?
Feature의 개수를 늘려서 학습시키는 것이 일반적이다. 현재는 '귀의 길이', '충성심'의 2개 특성만 있지만, '목소리 굵기'라는 특성을 추가시켜 3차원 그래프를 그려 구분할 수 있다. 이것이 바로 분류 문제의 기초 개념이고 딥러닝을 더 낮은 차원에서 이해할 수 있는 방법이다.

기타 머신러닝 간단 모델

KNN
비슷한 특성을 가진 개체끼리 군집화 하는 알고리즘.

하얀 고양이가 새로 나타났을 때 일정 거리 안에 다른 개체들의 개수(K)를 보고 자신의 위치를 결정하게 한다.

Decision Tree
예, 아니오를 반복하며 추론하는 방식.
생각보다 성능이 좋아 간단한 문제를 풀 때 자주 사용한다.

Random forest
Decision Tree를 여러 개 합친 모델.


머신러닝에서의 전처리

전처리(Preprocessing)란?

🌞 넓은 범위의 데이터 정제 작업

필요없는 데이터를 지우고 필요한 데이터만을 취하는 것, null값이 있는 행을 삭제하는 것, 정규화(Normalization), 표준화(Standardization)등의 많은 작업들을 포함한다.

정규화 (Normalization)

정규화는 데이터를 0과 1사이의 범위를 가지도록 만든다.
같은 특성의 데이터 중에서 가장 작은 값을 0으로 만들고, 가장 큰 값을 1로 만들어준다.
X=XX최소X최대X최소X' = \frac{X - X_{최소}}{X_{최대} - X_{최소}}

정규화 예시

Name100점만점시험500점만점시험
실제점수5050
정규화점수0.50.1

표준화 (Standardization)

표준화는 데이터의 분포를 정규분포로 바꿔준다.
즉, 데이터의 평균이 0이 되도록 하고 표준편차가 1이 되도록 만들어준다.
X=XX평균X표준편차X' = \frac{X - X_{평균}}{X_{표준편차}}
데이터의 평균을 0으로 만들면 데이터의 중심이 Zero-centered 된다. 그리고 표준편차를 1로 만들어주면 데이터가 예쁘게 정규화 된다. 이렇게 표준화를 시키면 일반적으로 학습 속도 (최저점 수렴 속도)가 빠르고, Local minima에 빠질 가능성이 적다.
출처: http://cs231n.stanford.edu/2016/

아래의 그래프에서 정규화와 표준화의 차이를 대략 느낄 수 있다.
출처: https://www.analyticsvidhya.com/blog/2020/04/feature-scaling-machine-learning-normalization-standardization/


2주차 숙제

🔗 제출한 숙제

3주차 4주차도 화이팅 👍🏻

0개의 댓글