2018. 1. 2. 22:36ㆍML(머신러닝)/BASIC
특정 상황에서 가장 적합한 모델을 찾아야 할 경우
가장 적합한(Best) 라는 것은 대부분 "모델의 오류(error)를 최소화 하는" or "likelihood(우도)를 최대화하는" 것을 의미한다.
즉 어떤 최적합 문제에 대한 답을 내리는 것이다.
최적합 문제를 풀 때 경사하강법(gradient descent)이라 불리는 방법을 주로 사용한다.
def sum_of_squared(v) :
"""v에 속해 있는 항목들의 제곱합을 계산한다."""
return sum(v_i**2 for v_i in v)
이러한 함수 f가 있을 때 -> 최대화 즉 함수 f 를 최대화시키는 입력값 v를 찾아야 한다.
# gardient(경사,기울기) - 편미분 벡터
함수가 가장 빠르게 증가할 수 있는 방향을 나타낸다.
방법중 하나는 임의의 시작점을 잡은 후 gradient 를 계산하고 gradient 방향(출력값이 가장 많이 증가하는 방향)으로 조금씩 이동하는 과정을 여러번 반복
# 이러한 방법은 global minimum 하나의 전역 최솟값이 존재하는 경우 쓸만하다.
# 하지만 local minimum이 발생하는 경우 못나올 수 있다. 또는 최솟값이 없는 경우 영원히 계속 할 수 도 있다.
적절한 이동 거리 정하기
1. 이동거리를 고정
2. 시간에 따라 이동거리를 점차 줄임
3. 이동할 때 마다 목적 함수를 최소화 하는 이동거리로 정함
세번째가 좋아보이지만 cost가 너무 크다. 그래서 몇몇 정해진 이동 거리를 시도해보고 그중에서 목적 함수를 가장 최소화 하는 값을 고르는 방법 존재
f에 부적절한 값을 넣어 오류가 날 수 있으므로 safe란 함수 만들어서 오류 발생시 무한대로 반환한다.
def safe(f):
"""define a new function that wraps f and return it"""
def safe_f(*args, **kwargs):
try:
return f(*args, **kwargs)
except:
return float('inf') # this means "infinity" in Python
return safe_f
그 다음에 mini batch도 사용하는데 사용하는 이유는 " 반복문을 돌 때마다 데이터셋 전체를 살펴보기 때문이다"
SGD (Stochastic gradient descent) 에 대해서 공부를 하려다 보니 좋은 사이트를 알 게 됬다.
여기서 공부를 더 깊게 하시는 것을 추천한다...ㅎ
http://shuuki4.github.io/deep%20learning/2016/05/20/Gradient-Descent-Algorithm-Overview.html
'ML(머신러닝) > BASIC' 카테고리의 다른 글
지도 학습 알고리즘별 간단한 사용법 정리 (0) | 2018.01.06 |
---|---|
지도학습_ 커널 서포트 벡터 머신, 신경망 (0) | 2018.01.06 |
지도학습_k-최근접 이웃 , 선형모델(로지스틱,svm) , 나이브 베이즈 분류기 (0) | 2018.01.03 |
문제와 데이터 이해하기 (0) | 2018.01.03 |
기계학습 (0) | 2018.01.02 |