# 머신러닝 개요
1. 의의
- 이전 : 문제에 대한 해답을 찾기 위해, 알고리즘을 개발했었다
> 그러나, 모든 문제들에 대해 알고리즘을 개발 할 수 없을뿐만 아니라,
실생활에서는 알고리즘이 존재하지 않는 문제들이 존재한다
- 이후 (머신러닝 도입) :
> 문제와 해답을 이용해서 훈련을 하든
> 문제만 주어진 경우에 잘 분류를 하든
>> "어림짐작해서" 답을 구해내자!! : 가장 답을 구하기에 적합한 식을 고안해내는 것이 목표
2. 머신러닝의 목표
- 하이퍼 파라미터 : 트레이닝 이전에 값을 설정
- 매개변수 : 트레이닝을 통해 구해낼 값
>> 머신러닝을 통해, 최적의 매개변수 값을 구해내자!
3. 모델의 평가
- 구성 : 훈련 데이터 + 검증 데이터 + 테스트 데이터
> 검증 데이터 존재 이유 : 사실 명확하진 않음.
먼저 훈련 데이터를 통해 훈련을 한 뒤, 검증 데이터로 검증을 한다. 이때, 검증 하는 과정에서 또 한 번 모델이 훈련 된다.
따라서, 맨 마지막에 테스트 데이터에서 최종적으로 검증이 되는 것.
> 결국, 훈련 데이터와 검증 데이터 모두에서 fitting 은 일어나며, 테스트 데이터에서는 fitting 이 일어나지 않는다
> 훈련 데이터 = 시험지, 검증 데이터 = 모의고사, 테스트 데이터 = 수능
- 데이터 양이 많으면 그대로 검증 데이터 이용,
적으면 k-폴드 교차 검증 방식 이용
4. 머신러닝의 큰 갈래
- 지도학습과 비지도학습, 그리고 강화학습
1) 지도학습
- 분류 문제 : 0, 1, 2.. 같이, 이산적인 output 값을 가진다. 각각의 value 에 맞는 class 로 분류된다.
> 이진 분류, 다중 분류 문제 등
> Logistic Regression
- 회귀 문제 : 0.42.. 같이, 연속적인 output 값을 가진다. 각각의 output 값에 맞게, 매개변수 값을 변형해준다
> Linear Regression
> SVM 은 두 가지 문제 성질 모두 만족
2) 비지도학습
- Clustering 문제 등
3) 강화학습
5. 혼돈 행렬
- 의의 :
> 정확도를 구해도, 그 내면을 알지 못함
> 혼돈 행렬이라는 간단한 행렬을 도입해서, 정확도가 구해진 자세한 경위를 알 수 있게 된다!
(사실, 자세한 경위라고 하기에도 우스운 정도지만 그래도 어느 정도의 정보는 알게 된다)
- 정밀도, 재현률 : 혼돈 행렬을 통해 더 알 수 있게 되는 정보들
6. 선형 회귀 https://wikidocs.net/21670
- 식의 종류 :
1) 단순 선형 회귀 : 변수가 한 개
2) 다중 선형 회귀 : 변수가 여러 개
- 가설함수 : 가설함수의 y 값을 "예측값" 이라고 한다
- 손실함수 (= 비용함수, Cost Function)
- 정의 : 가설함수의 예측값과, 실제 데이터의 실제 값 사이의 오차들의 합을 구하는 함수.
> 어떤 문제인지에 따라 다른 손실함수가 달라진다
ex) 선형회귀에선 MSE, 로지스틱 회귀에선 Cross Entropy 를 쓴다.
- Optimizer - Gradient Descent :
- 의의 : 최적의 매개변수 W 값을 바로 구하는게 best 지만, 그게 힘들 때가 더 많다 (계산량이 존나 많아서)
> 이때, 각 지점에서의 미분 계수 값을 이용해서 W 값을 조금씩 변형시킨다면, 결국엔 최적 W 값을 구할 수 있을거라는 착안.
- 뭘 미분하는가?
> 최종 목적은, 손실함수를 최소화 하는 것.
> 따라서, 손실함수 그래프의 각 지점에서 미분계수를 구해야 한다!
> 그래서, W 값을 조금씩 수정해나가면 된다!
7. 로지스틱 회귀
- 의의 :
> 0, 1 두 가지의 output 을 갖는 data set 이 있다고 하자
> 이 data set 은, 특정 limit 을 넘으면 1 의 값을 갖고, 그 전까지는 0 의 값을 갖는다.
> 이런 data set 의 특성을 반영할 수 있는 함수가 없을까?
: Sigmoid Function !!
- 특성 :
1) 0~1 사이의 값을 갖는다
> 따라서, 이 값을 확률 값으로 매핑할 수 있다.
2) S 자 모양을 갖는다.
- 로지스틱 회귀의 목적 :
Sigmoid 함수 안에 들어가는 최적의 W, b 라는 매개변수 값을 찾는다!
- 의문점 1 : Sigmoid Function 은, 결국 어느 hinge 에서 y 값을 1 로 매핑할 것인지만 알면 되지 않나?? 그냥 ㄱㄴ 모양의 함수를 쓰면 안 되나??
어차피 hinge 값만 정확하면 되잖아!!
> 답 1) 이상적인 경우에는, 주어진 data set 이 모두 완벽하게 0, 1로 정확하게 매핑되겠지만, 현실세계의 data에선 그렇게 될 수 없다.
어떤 data 는 잘못된 y 값으로 매핑될 수도 있다.
따라서, 모든 경우에 대해서 완벽하게 매핑을 시키는 것이 불가능하므로, 확률적으로 매핑을 시키는게 가장 효율적이다.
그러기 위해선, 확률 값이 오직 0, 1 만 가져선 안된다. 0~1 사이의 값들이 연속적으로 존재하는 함숫값이어야 한다.
따라서, Sigmoid 함수를 쓸 수밖에 없다.
- 의문점 2 : b=0 인 경우엔, W 값이 뭐가 나오든 상관 없는거 아냐? 결국엔 중요한건 hinge 일 뿐인데? b=0 이면 hinge 의 위치가 0 인 지점으로 고정되잖냐!!!!
> 답 2) 일부는 맞는 말이다. 그러나, 만약에 hinge 가 되는 probability 를 0.5 가 아닌, 0.7 같은 값으로 바꿔버린다면?
그렇게 된다면, W 값이 정말 중요해진다.
따라서, b=0 이더라도 Optimization 은 여전히 중요하다! 최적의 W 값을 추적하는 과정이기 때문!
- 손실 함수 : 잘못된 classification에 대해 cost 를 주기 위해서, Cross Entropy 를 써야 한다
- Classification 문제에선 Cross Entropy 를 주로 손실함수로 많이들 사용한다.
- 인공 신경망과의 관계 : 인공신경망에서, 반드시 로지스틱 회귀를 통한 Classification 과, 해당 값을 Soft Max 시키는 과정이 필요하다.
8. Soft Max 회귀
- Soft Max 함수
> Multi-class 분류에 대해서 로지스틱 회귀를 한다면, 각각의 class 에 할당될 probability 를 output 으로 얻게 된다.
> 그러나, 나는 output들의 합=1 로 만들고싶다 : Soft Max 함수 적용!
- 의문점 : 왜 Soft Max 함수에서, 굳이 e 를 밑으로 하는 지수함수를 쓰는걸까?
> 위키에 따르면, 더 좋은 분포 값을 만들어내기 위함이라고 함 (자세한 사항은 모름.)
> 즉, 다른 값을 밑으로 해도 상관은 없다. 성능이 안 좋아질 뿐..
- 손실함수 :
- 예측값 : Soft Max 함수의 output 값
- 실제값 : 원 핫 벡터 값 (data set으로 주어지는 값임)
- 수식 :
두 값들 간의 차를 이용해서, 손실함수를 만들 수 있다.
- 큰 틀 : Cross Entropy
> why? 앞에서 했던 로지스틱 회귀와 마찬가지로, classification 문제이므로, 엔트로피를 적용하는게 가장 좋다 (고 한다)
> 정확한 이유는 모르겠으나, Soft Max 회귀의 경우에는 이 방식이 가장 효율적인 것 같다.