이번 포스팅에서는 수식 표기(mathematical notation)를 영어로 어떻게 읽는지 정리한 표를 소개하겠습니다. 

통계, 기계학습, 딥러닝 공부할 때 수식이 나올 때면 '이걸 어떻게 읽어야 하나?'하고 궁금했던 적이 있을 것입니다. 한글로 된 책을 읽거나 강의를 들을 때면 '저렇게 읽는게 맞나? 저렇게 읽은 것을 듣고서 거꾸로 수식으로 정확하게 옮길 수 있나?' 하는 의문을 가진 적도 있을 것이구요. 

수식을 영어로 읽는 법을 알고 있으면 많은 도움이 되겠다는 생각에 한번은 정리를 해봐야지...하고 미루고 있던 차에요,  'Deep Learning' (by Ian Goodfellow, Yoshua Bengio, and Aaron Courville, The MIT Press) 책에서 깔끔하게 정리된 자료를 찾았습니다. 


1. 수와 배열 (Numbers and Arrays)


2. 집합과 그래프 (Sets and Graphs)


3. 인덱싱 (Indexing)


4. 선형대수 연산 (Linear Algebra Operations)


5. 미적분 (Calculus)


6. 확률과 정보 이론 (Probability and Information Theory)


7. 함수 (Functions)


8. 데이터셋과 분포 (Datasets and Distributions)

* source:  'Deep Learning' (by Ian Goodfellow, Yoshua Bengio, and Aaron Courville, The MIT Press)

Posted by R Friend R_Friend

댓글을 달아 주세요

혼합모델 군집화(mixture model clustering)의 혼합 모델에는 어떠한 분포도 가능하지만 일반적으로 정규분포(Gaussian normal distribution)을 가장 많이 사용하며, 다음번 포스팅에서는 가우시안 혼합 모델(Gaussian misture model, 줄여서 GMM) 군집화를 다루겠습니다. .

 

혼합모델 군집화(mixture model clustering)에 들어가기에 앞서, 이번 포스팅에서는 정규분포(Gaussian normal distribution)에 대해서 먼저 몸풀기 차원에서 짚어보고 넘아가겠습니다.  준비운동 안하고 혼합모델 군집화에 바로 투입됐다가는 자칫 머리에 쥐가 나거나 OTL 하게 되는 불상사가 예상되기 때문입니다. ^^; 

 

이번 포스팅은 쉬어 가는 코너, 한번에 다 몰라도 좌절하지 않기 코너, 생각날 때 찾아보고 복기하는 코너로 여기면 좋겠습니다.

 

기계학습, 다변량 통계분석 책을 보다 보면 수식, 표기법 때문에 많이 어려워했던 기억이 있을 겁니다.  가장 기본이 되고 많이 사용하는 개념, 수식, 표기법을 중심으로 소개해보겠습니다.

 

 

1) 모집단(Population) vs. 표본집단(Sample)

 

알고자 하는 '전체 객체, 성분, 관측치를 포함하는 집단'을 모집단이라고 하며, 보통은 시간, 비용 상의 이슈로 인해서 모수(parameter)가 알려지지 않은(unknown) 경우가 많습니다.

 

모집단의 특성을 알기 위해 시간과 비용을 감당할 수 있는 범위 내에서 모집단으로 부터 모집단을 잘 대표할 수 있도록 표본(sample)을 추출해서 분석을 하게 됩니다.

 

 

모집단과 표본집단을 알았으니, 각 집단의 기대값과 공분산, 상관행렬, 상관계수는 어떻게 표기하는지 비교해서 살펴보겠습니다.

 

 

2) 모집단(Population)의 기대값과 공분산, 상관행렬, 상관계수

 

성분들이 확률변수로 이루어진 p x 1 확률벡터 X에 대한 평균 벡터(mean vector), 공분산 행렬(covariance matrix), 상관행렬(correlation matrix), 상관계수(correlation coefficient) 는 아래와 같습니다. 

 

공분산 행렬(covariance matrix)을 'Σ' 로 표기한다는 점 유념하시기 바랍니다.  다변량 정규분포 확률분포를 표기할 때 'Σ'가 나옵니다.  (* 주의 : 모두 summation 하라는 뜻이 아님 -.-").

 

 

 

위의 모집단(population)에 대한 표기법을 아래의 표본집단(sample)에 대한 표기법과 비교를 해가면서 유심히 살펴보시고 기억해놓으면 좋겠습니다. 

(강의 듣다보면 혼동해서 잘못쓰는 강사나 교재도 가끔 있음 -_-;) 

 

 

 

(3) 표본집단의 기대값과 공분산, 상관행렬, 상관계수

 

모집단으로부터 n개의 확률표본 X1, X2, ..., Xn에 대해 각 n x p 확률벡터 Xi = (Xi1, Xi2, ..., Xip)' , i = 1, 2, ..., n 의 표본 평균 벡터(sample mean vector), 표본 공분산 행렬(sample covariance matrix), 표본 상관행렬(sample correlation matrix), 표본 상관계수(sample correlation coefficient)는 아래와 같습니다.

 

표본 상관행렬의 우상(rigth upper)과 좌하(left down)의 값은 상호 대칭으로 같습니다. (가령, r12r21은 같은 값을 가짐)

 

 

 


 

 

정규분포는 변수의 개수(1개, 2개, p개)에 따라서 '일변량 정규분포 (univariate normal distribution)', '이변량 정규분포 (bivariate normal distribution)', 다변량 정규분포 (multivariate normal distribution)'로 구분할 수 있습니다.

 

일변량/이변량/다변량 정규분포 확률밀도함수(probability density function)의 표기법과 수식, 그리고 그래프를 살펴보도록 하겠습니다.

 

 

(4) 일변량 정규분포 (univariate normal distribution) vs. 다변량 정규분포 (multivariate normal distribution)

 

일변량 정규분포의 확률변수 X에 대한 확률밀도함수(probability density function) 식은 기억하기가 좀 복잡하고 어려운데요, 자꾸 보다보면 어느샌가 익숙해지고, 더 자주 보다보면 자기도 모르게 기억될 날이 올겁니다. (기억을 했다가도... 인간은 위대한 망각의 동물인지라 두어달만 안보면 다시... ㅋㅋ)

 

 

위의 표기에서 일변량 정규분포 대비 다변량 정규분포의 확률밀도함수의 어디가 서로 다른지 유심히 살펴보시기 바랍니다.  특히 다변량 정규분포의 확률밀도함수 표기법이 통계를 전공하지 않았거나, 선형대수 기본을 모르면 매우 생소하고 어렵게만 느껴질 것 같습니다. (왜 저런거냐고 묻는 댓글 질문은 정중히 사양해염... -_-*)

 

 

 

(5) 이변량 정규분포 (bivariate normal distribution)

 

3차원 이상 넘어가면 사람 머리로 인식하기가 곤란하니, 시각화로 살펴보기에 그나마 가능한 2개의 변수를 가지는 2차원의 '이변량 정규분포(bivariate normal distribution)'의 확률밀도함수(probability density function)에 대해서 알아보겠습니다.  위의 다변량 정규분포의 확률밀도함수 식에서 p = 2 를 대입하면 됩니다.

 

[ 이변량 정규분포 확률밀도함수 - 식 1 ]

 

 

 

위의 이변량 정규분포의 확률밀도함수를 다시 정리해보면 아래와 같습니다.

 

[ 이변량 정규분포 확률밀도함수 - 식 2 ]

 

 

 

'이변량 정규분포 확률밀도함수   식 2'를 보면 이건 뭐... 외계어가 따로 없습니다.  도대체 이렇게 복잡하면서도 쓰임새가 어마무시 많은 요물단지 정규분포를 정리한 천재들이 누구인지 궁금하시지요?

 

위키피디아를 찾아보니, 위대한 수학자 가우스(carl Friedrich Gauss)가 정규분포를 발견했고(그래서 영어로 Gaussian Normal Distribution 이라고 함), 라플라스(Marquis de Laplace)가 그 유명하고 중요하며 시험문제로 반드시 나오는 '중심극한의 정리(Central Limit Theorem)'를 증명하였습니다. 피어슨(Karl Pearson)이 20세기 들어서 '정규분포(Normal Distribution)'이라고 명명하는 것을 확산시키는데 일조했다고 나오네요.  가우스, 라플라스, 피어슨... 역시 천재 거물들 맞군요.

(Normal distribution 이외의 분포는 그럼 비정상(Abnormal) 이라는 소리? -_-?)

 

 

 

 

(* source : https://en.wikipedia.org/wiki/Normal_distribution)

 

 

 

수식으로만 봐서는 저게 뭔가 싶으실텐데요, R의 base 패키지에 내장되어 있는 persp() 함수를 가지고 위의 '이변량 정규분포 - 식 2'를 사용하여 3D plot 으로 그려보겠습니다.

 

persp() 의 3D plot에 manipulate 패키지를 접목해서 동적(interactive plotting)으로 상하(phi), 좌우(theta) 로 돌려가면서 살펴보겠습니다. 

 

아래 첫번째 그래프의 노란색으로 표시해 놓은 단추를 누르면 interactive plot 의 slider 가 나타납니다.  theta(좌~우), phi(상~하)를 조절해가면서 3-D 그래프를 돌려서 보시면 '아, 이변량 정규분포 확률밀도함수가 이런거구나. 느낌 오네~' 하실겁니다.

 

 

##---------------------------------------
## (Gaussian) Mixture Model Clustering
##---------------------------------------

 

# bivariate nomral probability density function
mu1 <- 0   # setting the expected value of x1
mu2 <- 0   # setting the expected value of x2

 

s11 <- 3   # setting the variance of x1
s12 <- 4  # setting the covariance between x1 and x2
s22 <- 3   # setting the variance of x2

 

rho12 <- s12/(sqrt(s11)*sqrt(s22)) # setting the correlation coefficient between x1 and x2
rho12

 

x1 <- seq(-5, 5, length = 50) # generating the vector series x1
x2 <- seq(-5, 5, length = 50) # generating the vector series x2


# multivariate normal density function
gaussian_func <- function(x1, x2){
  term1 <- 1/(2*pi*sqrt(s11*s22*(1-rho12^2)))
  term2 <- -1/(2*(1-rho12^2))
  term3 <- (x1 - mu1)^2/s11
  term4 <- (x2 - mu2)^2/s22
  term5 <- 2*rho12*((x1 - mu1)*(x2 - mu2))/(sqrt(s11)*sqrt(s22))
  term1*exp(term2*(term3 + term4 - term5))
}


# calculating the density values
z_score <- outer(x1, x2, gaussian_func)
head(z_score)

 

 

##------------
# 3-D normal distribution density plot : persp() of {base} package
# with interactive plotting with Manipulate package in RStudio

 

install.packages("manipulate")
library(manipulate)

 

manipulate(persp(x1, x2, z_score,
                 theta = theta_x, # theta gives the azimuthal viewing direction
                 phi = phi_x, # phi gives the colatitude viewing direction
                 main = "Two dimensional Normal Distribution"), 
           theta_x = slider(10, 90, initial = 35), 
           phi_x = slider(10, 90, initial = 10))

 


 

# click the button at yellow circle position

 

[ theta : 35,   phi : 10 ]

 


 

[ theta : 60,   phi : 10 ]

 


[ theta : 80,   phi : 10 ]


[ theta : 90,   phi : 10 ]


 

[ theta : 35,   phi : 30 ]


[ theta : 35,   phi: 50 ]


 

[ theta : 35,   phi: 70 ]


 

[ theta : 35,   phi: 90 ]

 

 

 

 

마지막 그림이 phi = 90 으로서, 꼭대기 상단에서 비행기 타고 내려다본 그림인데요, 이걸 2-D 의 등고선 그림(contour plot)으로 그려보면 아래와 같습니다.

 

 

# 2-D contour plot
contour(x1, x2, z_score, xlab = "x1", ylab = "x2",
        main = "Bivariate(2 dimensional) Normal Distribution : contour plot")

 

 

 

 

 

참고로, 일변량 정규분포 그래프는 http://rfriend.tistory.com/102 의 이전 포스팅을 참고하세요.

 

[Reference]

1. 김재희, 'R 다변량 통계분석', 교우사, 2011

2. Wikipedia :  https://en.wikipedia.org/wiki/Normal_distribution

 

 

이번 포스팅에서 살펴본 '다변량 정규분포'에 대한 기본기를 바탕으로 해서, 다음번 포스팅에서는 '가우시언 혼합 분포 군집화 (Gaussian Mixture Model Clustering)'에 대해서 알아보겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요.

 

Posted by R Friend R_Friend

댓글을 달아 주세요

  1. 심교훈 2019.04.01 11:10 신고  댓글주소  수정/삭제  댓글쓰기

    정말 유용한 글 감사합니다!

지난 포스팅에서는 지도학습(Supervised Learning)에 있어서

  - 과적합(Over-fitting)이란 무엇인가?

  - 과적합을 파악하고 피하기 위한 방법은? (How to avoid over-fitting?)


에 대하여 알아보았습니다.

 

이번 포스팅에서는 과적합 이야기 세번째로, Bias-Variance Trade-off, 다른 말로는 Bias-Variance Delimma 에 대해서 소개하도록 하겠습니다.  지난번 소개한 과적합에 나왔던 내용과 핵심은 똑같은데요, Bias와 Variance 용어와 수식을 사용해서 과적합(Over-fitting), 과소적합(Under-fitting)을 다른 view로 풀어보겠습니다.  학습(Training)과 과적합(Over-fitting)에 대해서 정확히 이해하는 것이 매우 매우 중요하므로 이번에 한번 더 복습하는 셈 치면 좋겠습니다.


 

먼저, Wikipedia에서 정의하고 있는 Bias와 Variance의 뜻부터 살펴보겠습니다.

 

  • Bias : Bias는 학습 알고리즘에서 잘못된 가정으로 부터 나오는 에러이다.  높은 bias는 학습 알고리즘이 설명변수(독립변수)와 목표변수(종속변수) 간의 연관성있는 관계를 놓치게 한다.
    ("The bias is error from erroneous assumptions in the learning algorithm. High bias can cause an algorithm to miss the relevant relations between features and target outputs (underfitting).")
  • Variance : Variance는 훈련 데이터 내의 작은 변동에 대한 민감성으로부터 나오는 에러이다. 높은 variance는 의도한(일반화) 학습결과를 내기보다는 훈련 데이터 내의 무작위 소음을 모델링함에 따라 과적합을 야기한다.
    ("The variance is error from sensitivity to small fluctuations in the training set. High variance can cause overfitting: modeling the random noise in the training data, rather than the intended outputs.")

    - From : Wikipedia

 

 

Wikipedia 설명 내용이 좀 어려울 수도 있는데요, 아래 그림을 참고하시면 이해하는데 도움이 될 것 같습니다.

 

Bias는 쉽게 말하면 Truth 값으로 부터 평균이 얼마나 떨어져 있느냐는 척도입니다.  아래 예시 그림에서, Truth 평균으로 부터 Observed 평균이 가까운 (1)번과 (3)번은 Bias가 작고, 평균의 거리가 먼 (2)번과 (4)번은 Bias가 큽니다.

 

Variance는 통계학에서 말하는 '분산', 그 분산입니다.  편차 제곱의 합을 자유도로 나누어준 값이요. (= 표준편차(standard deviation)을 제곱한 값).  아래 그림 예시에서, 퍼진 정도가 좁은 (1)번과 (2)번은 variance가 작고, 퍼진 정도(산포)가 큰 (3)번과 (4)번은 variance가 큽니다.  

 

 

 

군대 다녀오신 분들은 신병교육대랑 자대 배치 후 첫 사격에서 '영점 사격'을 했을 텐데요, '영점 사격' 할 때는 Bias보다 Variance가 중요합니다.  Variance가 작아야지 가늠쇠를 조절해서 Bias를 줄일 수 있거든요.  Bias가 작아도 Variance가 크다면 그건 스나이퍼 기질이 없다는 거고(영점조정을 할 수 없으므로 대책이 없음 -_-;), PRI(피터지고, 알통배고, 이갈리는....) 얼차레 꾀나 받았을 거라고 필자는 감히 예상해봅니다.  (여담으로, 필자는 군대 시절 '스나이퍼' 소리 들었음 ^^v)

 

 

통계학 시간에 정규분포(Normal Distribution)에 대해서 배우셨을 텐데요, 위의 그림에서 소개한 (1) Bias : Low,  Variance : Low,  (2) Bias : High,  Variance : Low,  (3) Bias : Low,  Variance : High, (4) Bias : High,  Variance : High 의 4개 유형을 정규분포 확률밀도함수 그래프로 그려보면 아래와 같습니다.

 

 

 

 

Bias, Variance에 대해서 이제 이해하셨으리라 믿고요, Bias-Variance Trade-off 로 넘어가보겠습니다.

Bias-Variance Trade-off 란

 - Bias를 작게 하려면 Variance가 높아지고 (아래 그림의 오른쪽 Over-fitting 상황),

 - Variance를 작게 하려면 Bias가 커지는 (아래 그림의 왼쪽 Under-fitting 상황)

Delimma 를 말합니다. 

 

즉, Bias와 Variance를 동시에 작게 하기가 불가능하다는 뜻입니다. 

 

Bias 를 작게(Bias : Low) 한다고 계속 Training을 시키면 데이터 셋에 있는 Noise까지 통째로 암기를 해버리는 과적합(over-fitting)에 빠져서, 즉 온갖 x변수를 죄다 가져다 써서 유연성을 높이는 대신에 모델 복잡도를 확 높여버려서, 새로운 데이터에 모델을 적용시키면 제대로 예측이나 분류를 못하고 틀리게(variance : high) 됩니다.

 

 

 

이런 딜레마 상황에서 우리는 Bias를 작게 하는 데 몰빵을 한다거나 (Over-fitting), 혹은 Variance를 작게 하는데 몰빵(Under-fitting)할 수는 없는 법이고, 결국은 Bias와 Variance의 적절한 균형점(위 그림의 optimum model complexity, ie, sweet zone)을 찾게 됩니다. 

 

어떻게 찾느냐구요?  지난번 포스팅에서 소개한 Cross-validation 기법을 사용합니다.  데이터 셋을 Training set, Validation set, Test set으로 나누어서 -> Training set으로 훈련시켜 모형을 만들고 (iteration....) --> Validation set을 사용해서 over-fitting 시작하는 지점을 탐지해서 적정 시점에 훈련을 중지시킨 후에 (Over-fitting 방지) --> Test set으로 최종 모델의 성능을 평가합니다.

 

 

위의 그림, 그래프로 직관적으로 이해할 수 있도록 설명하였다면, 좀 어렵더라도 통계 수식으로 풀어보면 아래와 같습니다.  'Variance of the fit'과 (Bias of the fit)^2 은 trade-off 관계에 있으므로, 둘 모두를 동시에 작게 할 수는 없습니다.

 

 

 

[Reference]  “The Bias-Variance Tradeoff ,Cross-Validation and Over-fitting in Prediction”, 
               Professor. George S. Easton

 

 

과적합을 피하는데 샘플을 많이 확보한다거나, 독립변수의 수를 줄이는 것 또한 도움이 됩니다.  나중에 (회귀분석 포스팅 후반부에) 변수 선택기법으로 LASSO (The Least Absolute Shrinkage and Selection Operator) 소개하면서 Bias, Variance 개념 사용하니 잘 알아두시면 좋겠습니다.

 

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ♡~' 단추를 꾸욱~ 눌러주세요. ^^

 

Posted by R Friend R_Friend

댓글을 달아 주세요

  1. 가을하늘 2016.06.08 09:29  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 잘보고 갑니다

  2. 커피한잔 2016.06.08 15:25  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 잘보고 갑니다

  3. 커피한잔 2016.06.11 20:16  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 잘보고 갑니다

  4. 1465913417 2016.06.14 23:10  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 잘보고 갑니다

  5. kjh 2016.08.25 15:10  댓글주소  수정/삭제  댓글쓰기

    좋은자료 감사합니다

지난번 포스팅에서는 과적합(Over-fitting)이란 무엇인지, 그리고 과적합이 왜 문제인지에, 과적합이 아니라 데이터에 내재한 구조, 관계, 규칙을 일반화(generalization)하여 적정적합을 시킬 수 있도록 학습하는 것이 왜 중요한지에 대하여 알아보았습니다.

 

그렇다면 이번 포스팅에서는 어떻게 과적합을 파악하고 피할 수 있는지(How to detect and prevent over-fitting)에 대하여 소개하도록 하겠습니다. 그것은 바로 'Validation Set'을 활용하는 방법(Cross-Validation)입니다.

 

기계학습, 데이터마이닝 초심자라면 과적합(Over-fitting)을 정확히 이해하기 힘들 수도 있구요, 과적합을 이해했다고 하더라도 Training set vs. Validation set vs. Test set 으로 데이터셋을 나누어서 훈련시키는 과정에서 검증하고, 마지막 모형 결과를 테스트하는 구조, 절차를 이해하는게 처음에는 좀 힘들 수도 있을 것 같습니다.  (제가 처음 배울 때에 이걸 잘 이해를 못했었어요... ^^;;) 

 

이걸 제대로 이해하지 못하면 분석가가 가지고 있는 데이터셋을 몽땅 집어넣어서 예측이나 분류 모델을 만들다가 과적합(over-fitting)의 함정에 빠지는 위험에 맞닥뜨리게 됩니다. 

 

 

 

 

 

1) Training with all original data set

 

가지고 있는 데이터셋을 몽땅 넣어서 예측 혹은 분류 모델을 훈련 시키면 이게 과소적합(under-fitting)인지, 적정적합(generalized-fitting)인지, 과적합(over-fitting)인지를 가늠하기가 힘듭니다. 

 

아래의 그림에 나오는 것처럼 training model의 error rate이 낮으면 낮을 수록 더 좋은 모델인 것일까요?

 

문제는 훈련을 시키면 시킬 수록 Error rate는 계속 줄어드는 경향이 있으므로 결국은 과적합(over-fitting)으로 귀결된다는 점입니다.  중간에 적정적합 구간에서 훈련을 중단시키지 않으면 말이지요.  그런데 가지고 있는 모든 데이터를 Training set 으로만 활용하면 어디서 훈련을 중단시켜야 할지 도무지 알 수가 없답니다.  바로 이 문제의식에서 Validation set의 필요성이 시작합니다.

 

 

 

 

 

 

2) Training Set vs. Validation Set

 

과적합을 탐지하고 방지하기 위해서, 보유하고 있는 데이터셋을 Training set (50%~60%), Validation set (20%~25%), Test set (20%~25%) 의 3개의 set으로 구분을 한 후에, (저는 보통 Training : Validation : Test set = 60% : 20% : 20% 로 분할)

 

 - (1) Training set 을 가지고 예측 혹은 분류 모델을 훈련시키고

 

 - (2) Validation set을 가지고서 (1)번의 Training set을 가지고 훈련 중인 모델이 혹시 과적합(over-fitting)의 유혹에 빠지고 있는 건 아닌지, 아니면 훈련 더해야 하는데 농땡이 치다가 과소적합(under-fitting)인 것은 아닌지 검증, 감시를 하면서 최적의 적정적합(generalized-fitting) 구간을 찾아 모델을 선택한 후 (즉, 모델의 coefficients, weights 결정)

 

 - (3) Test set을 사용해서 (1)번과 (2)번의 협동작업으로 도출한 최종 모델(final model)에 대해서 성적을 매기는 작업을 하게 됩니다.

 

Validation set과 Test set을 혼동하는 분도 있을 것 같습니다.  (제가 그랬습니다....  ^^;)  Validation set은 과적합 방지용, Test set은 최종 모델 평가용도 입니다.

 

아래 그림은 Training set으로 만든 예측 혹은 분류 모델에 Validation set 데이터를 적용해서 예측 혹은 분류 error 를 측정한 그래프입니다.  Training set으로 모델을 만들면 반복(iterarion)을 계속할 수록 error rate은 계속 줄어드는데요, 이 모델을 처음 보는 데이터셋인 Validation set 에 적용을 하게 되면 error rate이 처음에는 줄어들다가 어느 순간 부터는 방향을 바꾸어서 증가하게 됩니다(보통은 Training set의 error보다 Validation set의 error가 조금씩 높음).  바로 이 변곡점이 과적합(over-fitting)이 시작되는 지점으로 합리적으로 의심을 할 수 있습니다

 

이 변곡점을 지나서도 계속 훈련을 시키게 되면 '데이터에 내재한 구조, 관계, 패턴'을 학습해서 '일반화(generalization)'하는 것이 아니라 training set을 통째로 외우게 됨에 따라 --> 처음 보는 데이터셋인 Validation set에 대해서는 자꾸 틀린 답을 내놓게 되어 Validation set의 error rate은 거꾸로 올라가게(나빠지게) 되는 것입니다.

 

 

 

 

3) k-fold Cross Validation

 

데이터셋을  Training set (50%~60%), Validation set (20%~30%), Test set (20%~30%)으로 나누게 되면 모델 훈련에는 Training set (50%~60%)만이 사용이 됩니다.  나머지 Validation set과 Test set으로 빼놓은 데이터가 아깝다는 생각이 들지요? 

 

특히, 확보한 데이터의 개수가 작은 경우에는 문제가 심각해질 수 있습니다.  데이터가 충분하지 못한 상태에서 그걸 3개의 훈련, 검증, 테스트 셋으로 나누면 분할된 데이터셋에 무슨 데이터가 들어갔느냐에 따라 모형이 심하게 영향을 받을 수가 있습니다. 

 

이런 경우에 k-fold Cross Validation 기법을 사용하면 좋습니다. k-flod Cross Validation기법은 Traning set을 k 등분한 후에 --> (k-1) 개의 fold (= (k-1)/k 구성비) 는 Training set으로 사용하고, 나머지 1개의 fold (1/k 구성비)은 validation set으로 사용하며, --> Validation set 에 해당하는 fold를 round를 거듭하면서 바꿔주게 됩니다.  말로 설명하면 좀 이해하기 어려울 수도 있는데요, 아래의 5-fold Cross Validation 예시 그림을 참고하시기 바랍니다.  4개 fold의 Training set 과 1개 fold의 Validation set을 이용해서 모형 훈련을 시키는 것을 5 round 시행하여 분류 모형(classifier)을 선택하고, Test set을 가지고 이 최종모형을 평가하는 data flow 예시입니다.

 

 

 

k-fold Cross Validation을 극단으로 가져가면 k를 데이터 관측치 수 n 만큼 하는 경우도 있는데요, 이를 leave-one-out Cross Validation (LOOCV) 이라고 합니다.  보유하고 있는 데이터를 fully 활용할 수 있는 장점이 있고, 특히 데이터 샘플 수가 작을 경우 유용하겠지요.  다만, leave-one-out Cross Validation은 연산 비용이 높다는 점은 염두에 두어야 하며, 샘플 사이즈가 크다면 보통은 10-fold Cross Validation을 많이 사용하는 편입니다.

 

 

참고로, re-sampling methods 를 tree 형식으로 정리해놓은 자료가 있어서 소개합니다.  아래 구분 tree에서 색깔 칠해놓은 부분이 이번 포스팅에서 소개한 방법이 되겠습니다.  색 안칠해진 부분도 많고, 공부해야 할 것이 참 많지요? ^^"

 

* Source : “Performance Evaluation for Learning Algorithms”, Nathalie Japkowicz, School of Electrical Engineering & Computer Science University of Ottawa

 

 

다음번 포스팅에서는 이번 포스팅과 직접 관련된 bias-variance trade-off 에 대해서 소개하겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 ~ 눌러주세요. ^^

 

Posted by R Friend R_Friend

댓글을 달아 주세요

  1. 최유정 2016.05.11 19:40  댓글주소  수정/삭제  댓글쓰기

    어떤 논문읽다가 hold-out이라고 써있는 것도 봤는데 간단하게 설명해 주실수 있나요??
    항상 글 잘읽고 있습니다 감사합니다~

  2. kjh 2016.08.25 14:41  댓글주소  수정/삭제  댓글쓰기

    (제가 제대로 이해한건지...) 그냥 특별한 평가기법없이 하는게 일반적인 모델평가방법이 train으로 모델훈련하고 test set 으로 평가하는 홀드아웃이라고 보면 되는건가요?

  3. kenny17 2016.09.05 15:39  댓글주소  수정/삭제  댓글쓰기

    좋은 포스팅 감사합니다~! 정말 쉽게 잘 설명해주셨네요, 한 가지 궁금한점이 있어 글을 남깁니다.
    http://www.louisaslett.com/Courses/Data_Mining_09-10/ST4003-Lab4-New_Tree_Data_Set_and_Loss_Matrices.pdf
    해당 파일의 2.3 Train and Test Subsets 이라는 단락을 보시면 "we don’t need to explicitly create a validate set as the rpart() function handles this internally" 라고 설명해두었습니다.
    rpart() 함수가 내부적으로 처리하기 때문에 validate set을 생성할 필요가 없다고 되어있습니다. 어떤 설명이 맞는지 헷갈려서 질문드립니다.

    • R Friend R_Friend 2016.09.05 15:44 신고  댓글주소  수정/삭제

      kenny17님, rpart 알고리즘 안에 validation set 을 자동생성/평가하는 로직이 포함되어 있으므로 분석자가 명시적으로(별도 R script 작성) validation set을 생성하는 작업을 하지 않아도 된다는 뜻입니다.

      rpart 알고리즘은 컴퓨터가 알아서 validation set 나누어서 훈련한다는 뜻이예요.

  4. kenny17 2016.09.05 16:01  댓글주소  수정/삭제  댓글쓰기

    정말 빠른 답변 감사합니다~^^ 다름이 아니라 인공신경망 모델을 통한 분류 문제를 풀고 있는데요, http://www.louisaslett.com/Courses/Data_Mining_09-10/ST4003-Lab7-Neural_Networks_for_Classification.pdf
    해당 문서 2.2 단락에 보시면 validation set을 생성하지 않고 train set과 test set으로만 인공신경망 모델을 학습, 평가를 하게됩니다. 인공신경망 모델에서는 rpart 함수를 사용하지 않는데도 validation set을 사용하지 않길래, 헷갈려서 질문드렸습니다.
    validation set이 중요한 것 같긴한데, R에서 인공신경망에 관련된 예제들을 보면 무시하고 진행하는 경우가 많아 기준이 애매모호합니다. 어떻게 하는것이 좋을까요?

    • R Friend R_Friend 2016.09.05 16:08 신고  댓글주소  수정/삭제

      정석은 overfitting을 피하기 위해 validation set 을 두어서 적정 시점에 훈련을 중지시키는 것입니다.

      특히 neural network은 overfitting 조심해야 합니다.

      R caret package 구글링해보세요. 최적 매개변수 조합 탐색, 앙상블 쉽게 할수 있게 도와주는 패키지예요.

    • kenny17 2016.09.05 16:19  댓글주소  수정/삭제

      답변 감사합니다. 포스팅에서도 언급하셨듯이 Validation set으로 적정 시점에서의 훈련을 중지시킨다는 말씀이 Neural network 같은 구조에서는 학습된 모델에서 validation set을 통해서 어떻게 적정 시점을 찾을 수 있나요? train set 으로 학습된 모델을 validation set 과 test set 에 각자 적용하였을 때 비슷한 결과가 나오는지 확인하면 될까요?

    • R Friend R_Friend 2016.09.05 16:21 신고  댓글주소  수정/삭제

      training set의 error rate은 내려가는데 반대로 validatioa set의 error rate은 올라간다면 그 지점이 overfitting 시작되고 있다는 신호입니다.

    • kenny17 2016.09.05 16:38  댓글주소  수정/삭제

      답변 감사합니다. 조금 더 공부를 해보도록 하겠습니다. 항상 좋은 포스팅 올려주셔서 감사합니다. 많은 도움이 되고 있어요.

  5. Rtoup 2016.11.08 09:38  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 좋은 포스팅 감사합니다. Validation dataset의 역할을 이해하기 쉽도록 잘 정리해주셨네요. 한가지 질문을 드리자면 해당 글에 나오는 error rate이 분류 또는 예측의 에러율을 의미하는 건가요? 아니면 모델 학습의 에러율을 의미하나요? 포스팅 내에서도 Iteration이 증가하면 error rate이 감소한다는 것은 무슨말인지 알겠는데, 모델을 처음 보는 데이터셋인 Validation set 에 적용을 하게되면 어느순간부터 error rate이 증가한다는 것이 무슨말인지 이해가 잘 안됩니다. Training dataset으로 학습한 모델을 Validation dataset을 대상으로 분류 또는 예측을 시행한다는 의미인가요?

    • R Friend R_Friend 2016.11.08 09:47 신고  댓글주소  수정/삭제

      안녕하세요 Rtoup님,
      error는 분류나 예측 error를 말하는 것입니다.

      training set을 가지고 model fitting을 하구요, 그 model을 validataion set에 적용해서 test error를 추정하게 됩니다.

      training set을 대상으로 model fitting을 시키면 시킬수록 error 는 계속 줄어들게 되는데요, 이게 어느 지점을 넘어가면 overfitting이 됩니다.

      validation set은 model fitting에 사용이 안된 dataset 이다 보니 만약 training set에 너무 과적합이 된 모형이라면 validation set에 모형 적용해서 평가를 해보면 training set에 대해 모형 과적합이 일어나는 시점부터 validation set에 대한 모형 적용 결과가 error rate이 올라가기 시작합니다. (본문이랑 같이 말을 반복하는 느낌이네요...^^;)

    • Rtoup 2016.11.08 10:19  댓글주소  수정/삭제

      그럼 정리해보자면, Training set을 사용해서 모델의 반복(Iteration)수를 100부터 2000회로 늘려간다고 하였을 때, 먼저 각 조건마다 Validation set에 적용해서 분류 또는 예측의 error를 추정을 합니다. 그리고 어느 지점부터 Validation set의 overfitting이 발생하게 되면 해당 지점을 참고하여 Training set의 적합한 Iteration을 선정하고 이를 추후 Test set에 적용한다고 보면 될까요?

    • R Friend R_Friend 2016.11.08 10:25 신고  댓글주소  수정/삭제

      네, 그렇습니다.
      regression 이라면 복잡도를 줄이거나(변수 선택, 차수 축소),
      decision tree 라면 node pruning 이 될 수도 있겠고요.

    • Rtoup 2016.11.08 10:46  댓글주소  수정/삭제

      감사합니다. 저는 Neural Network 모델을 통해 분류 예측을 테스트해보려고 하는데, 모델 성능에 영향을 주는 여러 가지 요소(히든 노드 수, Iteration, decay 값 등)를 함께 고려하여 Validation set을 활용하여 모델의 적정 학습 변수를 선택하는 것이 좋을까요? 아니면 각 요소들을 개별적으로 값을 변화시키면서 적정 학습 변수를 찾는 것이 좋을까요?

    • R Friend R_Friend 2016.11.08 11:07 신고  댓글주소  수정/삭제

      caret package를 사용하시면 최적 모형 탐색이 좀더 수월해요.

    • Rtoup 2016.11.08 11:18  댓글주소  수정/삭제

      좋은 조언 감사합니다.^^

    • R Friend R_Friend 2016.11.08 14:52 신고  댓글주소  수정/삭제

      도움이 되었다니 잘됐네요. ^^ 관측치 개수가 많으면 많을수록 과적합 방지에 도움이 되니 참고하시구요.

    • Rtoup 2016.11.08 20:01  댓글주소  수정/삭제

      해당 포스팅에서 코멘트 후 모델 복잡도(히든 노드 수) 및 Iteration 값들을 Training set에서 변경시키면서 Validation set으로 예측 에러를 확인해보았는데, overfitting의 문제가 나타나지 않는 것 같습니다. 꽤나 값들을 크게 변경하였는데도 말이죠. 이러한 경우도 발생할 수 있는건가요?

    • R Friend R_Friend 2016.11.08 20:08 신고  댓글주소  수정/삭제

      관측치 개수가 아주 많고, 변별력이 뛰어난 변수가 있다면 가능할수도 있겠지요. 교과서 에 실린 깨끗한 데이터라면 모를까, 비즈니스현장의 현실 데이터에서는 과적합 이슈가 거의 따라다닌다고 봐야할거 같아요.

    • 2016.11.08 20:19  댓글주소  수정/삭제

      비밀댓글입니다

    • R Friend R_Friend 2016.11.08 21:20 신고  댓글주소  수정/삭제

      k-fold cross validation 사용해서 적합한 모델이 과적합 아닌거 같다면, 그 모델을 "Test set(unused data, future data)"에 적용해 보면 최종적으로 모델이 과적합된건지 여부를 판단 가능할거 같습니다.

      예전에 이메일 공개했다가 제가 좀 버거웠던적이 있어서요, 이멜이나 메신저는 공개안해요. 이해해주세요. ㅜ.ㅜ

    • Rtoup 2016.11.10 20:57  댓글주소  수정/삭제

      네 알겠습니다. 그럼 혹시 신경망 모델에서 모델의 반복수(Iteration)에 따라 학습 에러율은 계속해서 줄어들고 예측 에러율도 함께 줄어들다가 어느 지점부터 에러율의 감소가 되지 않고 유지되는 구간이 발생하면 이것도 Overfitting으로 볼 수 있을까요? 해당 구간부터 계속 학습을 진행하여도 예측 에러율이 크게 향상하거나 하지는 않습니다.

    • R Friend R_Friend 2016.11.10 21:09 신고  댓글주소  수정/삭제

      네. 그 변곡점(수렴) 시작 지점에서 training 멈추면 됩니다.

    • Rtoup 2016.11.11 20:37  댓글주소  수정/삭제

      Validation set에 적용한 분류 예측 오차율이 학습이 진행됨에 따라 더 이상 오르지도, 내리지도 않고 일정 값에 수렴하는 경우도 Overfitting으로 봐도 맞는건가요? 대부분의 기계학습에서 Overfitting은 학습 데이터에 너무 편향되어 일정 구간부터 오차율이 증가하는 경우를 말하는 것 아닌가요?

    • R Friend R_Friend 2016.11.11 21:53 신고  댓글주소  수정/삭제

      네, 과적합을 말씀하신대로 정의해요. 맞습니다.

      최적학습지점(or parameter)을 찾을때 validation set (CV)의 에러율이 가장 낮은 지점으로 하므로 더이상 validation set 에러율에 개선이 없으면 학습을 중단합니다. 더이상 학습할 이유가 없기때문에요. 학습중단시키는 여러방법, 기준 중의 하나예요.

  6. ML초보자 2016.11.18 16:58  댓글주소  수정/삭제  댓글쓰기

    HOG+SVM 패러다임을 보행자 검출을 위해서 직접 구현하였습니다. 그리고 데이터 set은 positive의 경우 약 3천장 정도 확보를 하였고(동일 인물이어도 약간의 모션과 스케일이 다른 샘플을 포함), negative의 경우 약 2만장 정도 확보를 하였습니다. k-fold로 교차 검증을 적용하려고 하는데 궁금한 점이 있습니다.
    1. k는 몇개정도가 적합할까요? 이 때 positive sample과 negative sample의 비율은 1:1로 해야
    할지, 아니면 negative의 비율을 좀 더 많이(예: P:N = 1:3) 해야 할지 궁금하네요. 또한 k는 랜덤하게 개수만 맞춰서 구성하면 되는지 궁금합니다.
    2. 에러율의 경우 어떻게 계산을 하는지요? 그냥 각 샘플에 대한 분류에러를 sum해서 전체 개수로 나눠주는 방식 을 취하면 되는지요? 이 때 false positive에 대한 에러율만 구해서 접근하면 되는지 궁금합니다.
    3. 만약 k를 4로 가정했을 경우 test set은 600장이 되고, 2400장에 대해 검증 set과 훈련 set을
    나눠서 학습을 시키게 될텐데 이 때 최종 테스트 set을 위한 훈련 set은 검증 set에 대해 에러율이 가장 낮았던 분류기를 선택하면 되는건지 또한 궁금합니다.

    • R Friend R_Friend 2016.11.19 21:06 신고  댓글주소  수정/삭제

      제가 분석하려고 하시는 문제에 대해서 정확하게 알지 못하므로 댓글에 남겨주신 내용에 기반해서 조심스레 답글 남겨봅니다.

      1) k-fold Corss-Validation(CV)에서 k로 보통 5나 10을 많이 사용합니다. 그런데 분류 문제의 경우 voting 을 해서 많이 나오는 쪽으로 분류를 하므로 k 가 짝수 이면 동수로 voting이 나와서 곤란한 상황이 벌어질 수 있습니다. 그래서 분류 문제는 보통 k를 5나 9로 합니다.

      Positive vs. Negative 구성비율이 심하게 un-balanced 인 경우 보통은 분석의 주 대상이 되는 희소한 사건인 Positive(가령, 불량품, 암 질병 등) 를 over-sampling 합니다. 저는 보통 P:N 을 1:3 또는 1:2로 하는데요, 학문적인 근거가 있는지는 잘 모르겠습니다. ^^; 희소사건에 대해 over-sampling 해서 모델링했을 때의 test error와, 나중에 population에 적용했을 때의 error 가 차이가 날 수 밖에 없는데요, 이게 구성비율 가지고 미리 추정을 해볼 수 있을겁니다. (모집단 적용 시의 에러율이 많이 올라갈텐데요, 원래 그런것이고요, 이걸 가지고 모델이 성능이 안좋네...이렇게 단정 지으면 안된다는 뜻에서 하는 말임.)


      2) 분류 모델의 성능 평가 시에는 confusion matrix 를 가지고
      - 정확도(accuracy)
      - 민감도(sensitivity, recall rate)
      - 특이도(specificity)
      - 오류율(mis-classification rate)
      등의 지표를 사용합니다. 특히, 심하게 un-balanced sample일 경우에는 정확도 지표는 안 좋은 지표입니다. 이럴 때는 민감도나 특이도를 분석 목적에 따라 같이 보는게 맞다고 생각합니다.
      이 외에 Kappa statistic, F measure 등을 사용하기도 하고, 민감도와 특이도를 가지고 가중 평균한 지표를 개발해서 사용하기도 해요. 분석 목적이 뭐냐, 데이터가 어떻게 생겼냐에 따라서 분석가가 선택하면 됩니다. 위 지표 정의는 구글링 해보시기 바랍니다. (언젠가 포스팅할려고 하는데요... 시간 내기가 쉽지 않네요. 광화문에도 가야 하고... ㅜ_-)

      R carrot package 사용하시면 모델 성능 평가, 최적 모델 탐색 편해요.

      3. 네, 맞습니다. CV 에서 가장 낮았던 분류기를 사용해서 test set 적용해서 최종 모델 성능평가 하시면 됩니다.

  7. 2016.12.02 20:03  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • R Friend R_Friend 2016.12.04 20:58 신고  댓글주소  수정/삭제

      변수 선택, 모수 추정에 cross validation 사용하는거 맞습니다.

      가령, LASSO(Least Absolute Shrinkage and Selection Operator) 에 cross validation 사용해서 최적의 tuning parameter lambda 를 찾고, 회귀계수가 '0'인 변수는 설명변수에서 탈락, '0'이 아닌 회귀계수의 변수들의 선형조합으로 회귀모형이 적합되는 것이지요.

  8. 김민주 2018.03.04 17:20  댓글주소  수정/삭제  댓글쓰기

    올려주신 포스팅 모두 잘보고 있습니다!!! 정말 많이 배워가요~
    이번 포스팅 보고 저도 실습을 하던중이었는데
    혹시 caret패키지 함수들에 대해 궁금한 점 여쭤봐도 될까요?

    전체 데이터를 trainD, testD로 나누고 다음과 같이 caret패키지 함수들을 실행했습니다.

    > ctrl <- trainControl(method="repeatedcv", number=10, repeats=5, ...)
    > fit.knn <- train(종속변수~., data=trainD, method="knn", trControl=ctrl, ...)

    이렇게 실행을 하면 10-folds-cv를 총 5번 반복하는 것인데
    결과로 fit.knn$results를 보면 아래와 같이 나옵니다.

    k Accuracy Kappa AccuracySD KappaSD
    1 5 0.8040680 0.5777070 0.03166686 0.06604365
    2 7 0.8078609 0.5854467 0.03287892 0.07075771
    3 9 0.8047474 0.5753960 0.03181233 0.06953454

    튜닝할 파라미터가 k이고 디폴트로 3개(알아서 5, 7, 9)만 실행해주었다고 합니다.
    그리고 최종 모델로 k가 7인 모델을 선정했다고 합니다.
    R Friend님이 말씀하신 대로 Accuracy의 변곡점이 k=7인 모델이기 때문인 것 같습니다.(맞나요??ㅎㅎ;;)

    그런데 궁금한 점은 k=5, 7, 9일때 각각의 Accuracy가 어떻게 나온건지입니다.
    예를 들어, k=5 일때 Accuracy(0.8040680)는
    10-folds-cv를 5번 반복하여 나온 50개의 Accuracy 평균인건가요??

    • R Friend R_Friend 2018.03.04 17:51 신고  댓글주소  수정/삭제

      안녕하세요 김민주님,

      말씀해주신대로 k=5, 7, 9 일때의 각 50개 knn 모델들의 Accuracy 평균이 가장 큰 k 를 찾아줍니다. (만약 평가기준을 오분류율로 했다면 오분류율이 가장 작은 k를 찾아주구요).

    • 김민주 2018.03.04 18:17  댓글주소  수정/삭제

      그렇군요~ 주말에 쉬시는데 빠른 답변 감사드립니다^^

지난번 포스팅에서는 기계학습(machine learning)의 정의와 3가지 유형 (supervised learning, unsupervised learning, reinforcement learning)에 대해서 알아보았습니다.

 

이번 포스팅에서는 학습의 일반화(generalization)와 과적합(overfitting), 혹은 과잉적합에 대해서 알아보도록 하겠습니다.  이번 포스팅은 기계학습의 3가지 유형 중에서 지도학습(supervised learning)에 대해 한정한 내용이긴 합니다만, 기계(컴퓨터)가 학습한다고 했을 때의 핵심이 되는 아주 아주 중요한 개념이므로 분석 기법/알고리즘으로 들어가기 전에 짚어보고 넘어가고자 합니다.

(기계학습 공부하는 대학원생이라면 '과(잉)적합(Over-fitting)에 대해서 논하시오'라는 문제가 중간고사에 무조건 나온다에 500원 걸겠습니다. ㅎㅎ)

 

기계학습의 정의에서 보면 과거의 대량의 data인 Experience (E) 로 부터 예측/추정이나 분류 등의 Task(T)를 어느 수준 이상의 정확도(Performance, P)로 향상시킬 수 있다면 기계(컴퓨터)가 해낼 수 있다면 컴퓨터가 학습을 하고 있다고 말할 수 있다고 했었습니다.  이때 중요한게 하나 있는데요, 훈련 데이터셋(Training Data Set)에서 뿐만이 아니라 컴퓨터가 본적이 없는 새로운 데이터 셋(Test Data Set, or New Data Set)에 대해서도 예측/추정이나 분류 모델이 잘 working 하느냐가 오늘의 포스팅의 주제입니다.

 

가령, 훈련 데이터(Training Data Set)를 가지고 지난 학기 기계학습 수업의 Pass와 Fail한 학생을 분류하는 모형을 만들었는데요, 그게 훈련 데이터에 너무나도 과도하게 적합이 된 나머지, 올해 신입생을 대상으로 한 새로운 데이터 셋(Test Data Set)에 대해서는 분류가 잘 맞지가 않는 경우 과(잉)적합(Overfitting)이 되었을 가능성이 아주 많다고 의심해볼 수 있습니다. .

 

아래 그림에 과소적합(Under-fitting), 적정적합, 과(잉)적합(Over-fitting) 분류 예를 가상으로 만들어서 들어보았습니다.   상단의 그림은 훈련 데이터셋(Training set)을 가지고 분류 모델을 만든 것이구요, 하단 그림은 새로운 데이터인 테스트 데이터셋(Test set)에 다가 훈련 데이터셋으로 만든 분류 모델을 적용해 본 그림입니다.

 

(1) 상단 좌측의 과소적합(Under-fitting)의 경우 훈련 데이터셋을 대상으로 훈련이 부족하여 파란점과 빨간점을 잘 분류를 못하고 있습니다. (정확도 65%). 

 

중간고사 앞두고 시험공부 하라고 했더니 기계학습 서문 서너페이지 읽다 말고는 태양의 후예 재방송 보느라 농땡이 친 학생이 여기에 해당이 되겠습니다.  이런 학생은 하단 좌측의 테스트 데이터셋에 보면 아시겠지만 처음보는 새로운 시험문제가 나오는 중간고사에서 좋은 점수를 받을리가 없겠지요. (정확도 60%)

 

(2) 상단 가운데의 적정적합(Generalized-fitting)의 경우 훈련 데이터셋을 대상으로 파란점과 빨간점을 분류하라고 시겼더니 비록 일부 오분류가 있기는 합니다만 전반적으로 적절하게 제법 분류를 해냈습니다.(정확도 90%)  그리고 훈련데이터로 만든 분류 모델을 하단의 가운데에 신규 데이터셋인 테스트 셋에 적용해 보았더니 역시 약간 오분류가 늘어나기는 했지만 그래도 85%의 정확도로 꽤 높은 분류 성과를 냈습니다. 

 

수업시간에 선생님께서 문제풀이를 하면서 '이론'과 '원리'를 가르쳐주실 때 정신 바짝 차리고 공부 잘하고 복습도 잘한 학생이 여기에 해당이 됩니다. '원리'를 깨우쳐서 '일반화(generalization)'을 했기 때문에 중간고사에서 응용문제가 나와도 그걸 풀 수 있는 힘이 있는 것입니다.

 

(3) 상단의 오른쪽에 있는 과(잉)적합(Over-fitting)은 훈련 데이터셋(Training Set)을 대상으로 파란점과 빨간점을 100% 정확하게 기가 막히게 잘 분류를 해놨습니다.  모델이 삐뚤빼뚤 비선형으로 해서 아주 복잡하게 생겼지요?  이 분류 모델을 새로운 데이터셋, 즉 테스트 셋(Test set)에 적용해서 분류를 시켜봤더니, 글쎄 정확도가 65%로 곤두박질을 쳤습니다.

 

중간고사 이틀 남겨놓고 코피 터지게 벼락치기로 '달달 외워서' 공부한 학생이 여기에 해당되겠습니다.  공부를 하면서 '원리'에 대해서도 생각을 해보고 음미도 해봤어야 하는건데요, 너무 의욕이 앞선 나머지, 아니면 공부하는 전략이 부족하고 미련해서 인지, 예제 문제 자체를 토씨하나 안틀리고 달달 외워버린 경우입니다 (아마 자신감 100% 만땅 이었겠죠?).  이렇게 교과서 문제를 너무나 과하게 통째로 외워버리다 보니 중간고사에 약간 문제를 비튼 '응용문제'가 나오자 당황하고 문제를 잘 못푼 학생을 생각하시면 됩니다. (성적은 중하위권...?) 

 

 

[ 과소적합(Under-fitting) vs. 적정적합(Generalized-fitting) vs. 과잉적합(Over-fitted) ]

 

 

 

 

기계학습이 지향하는 학습 수준은 당연히 일반화(generalization)가 된 적정수준의 학습 입니다.  과소적합(under-fitting)도, 과(잉)적합(over-fitting)도 아니구요.  특히 과적합(over-fitting)은 기계학습 분석가가 조심해야 합니다.  왜냐하면 훈련 데이터를 가지고 모형을 만들 때 과적합(over-fitting)을 하게 되면 성과(정확도)가 아주 좋게 나오거든요.  그러면 이 분석가는 자기가 대단한 일, 큰 일을 한 줄로 알고 착각하게 됩니다.  과적합(over-fitting)이 아마추어 분석가만 저지르는 실수로 생각할 수도 있습니다만, 지진을 예측하는 과학자도 실수하고, 일본 후쿠시마의 핵 원자로가 폭발한 원인 제공자가 바로 과적합이라는 사실을 아시나요? Nate Silver의 신호와 소음(The Signal and The Noise)에 실린 내용을 아래에 인용해 봅니다.

 

"그러나 자료의 이상적 관계를 알지 못할 때 우리는 탐욕에 사로잡히기도 한다. 이런 탐욕의 결과로 나타난 과잉적합 사례를 보면, 모든 측정점을 연결하는 복잡한 함수를 만들었다. 그러다 보니 아래위로 마구 오르내리는, 현실에서 있음직하지 않은 곡선이 나타났다. 이렇게 될 때 우리는 측정점들에 내재된 진정한 관계에서 한참 멀어지고 말며, 결국 우리 예측은 한층 엉뚱한 곳을 향하고 만다.

 

(중략)... 우리는 우리가 접할 수 있는 증거에서 그 구조를 추론해내야 한다. 이 과정에서, 자료가 한정되어 있고 소음이 많을 때 그리고 자료 안에 내재하는 근본 관계에 대해 이해가 부족할 때, 사람들은 대개 과잉적합의 오류를 범한다

 

(중략)... 과잉적합은 이중적 불운을 나타낸다. 이 모델은 연구논문에서는 '더 나은 것'으로 보이지만 실제 현실에서는 '더 나쁜' 성적을 거둔다. 과잉적합 모델은 후자의 특성 때문에 결국 실제 현실에서 예측하는데 동원될 경우 호된 대가를 치룬다. 이 모델은 또한 전자 때문에 겉보기에는 더 인상적이다. 매우 정확하고 또 뉴스 가치가 있는 예측을 할 수 있으며 과거에 사용된 여러 기법보다 훨씬 나은 듯 보인다. 그렇기에 이런 모델은 학술지에도 좀 더 쉽게 발표가 되고 또 고객들에게 환영을 받는다. 반면 좀 더 정직한 모델은 시장에서 내몰린다. 그러나 과잉적합 모델은 신호가 아닌 소음에 적합하도록 만들어진 만큼 결국 정확성, 다시 말해 과학성을 훼손할 수 밖에 없다.

 

- 출처 : 신호와 소음(The Signal and The Noise), Nate Silver

 

지진을 예측하는데 최고난이도의 수학으로 어마무시하게 복잡하고 정교한 모델을 만든 케일리스-보르크 지진학자가 있었다고 합니다.  '신호와 소음'에 소개된 성적표에 의하면, "이 모델은 믿을 수 없을 만큼 복잡한 방정식들을 동원해 소음에 물든 자료들에까지 적합하게 만들어졌다. 그리고 결국은 대가를 치러야 했다. 스물여섯 개 예측을 했지만 세 개 밖에 적중하지 못했다. 데이비드 보먼은 자기도 비슷한 문제를 안고 있다는 사실을 인식하고, 결국은 자신의 모델을 폐기하고 만다". 라고 하는군요.  케일리스-보르크든 데이비드 보먼이든, 훈련 데이터로는 아마 기가 막히게 정확하게 예측을 했었을 것이고 흥분을 했을 겁니다.  나중에 현실 세계에서 초라한 성적표를 받고 나서야 과적합(over-fitting)이었다는 걸 알기 전까지는 말이죠.

 

과적합은 소음(Over-fitting due to Noise), 부족한 사례(Over-fitting due to Insufficient example), 과도하게 복잡한 모형 개발(unnecesarily complex model)로 인해서 생기는데요, 기계학습 분석가에게는 참 조심하고 주의를 기울여야할 주제입니다.

 

오컴의 면도날(Occam's Razor )에 의하면 복잡한 모델보다는 단순한 모델을 선택(선호)하라고 합니다.  Variable, Feature를 있는 것 모두 때려 집어넣고 모델 만들지 말고 똘똘한 Variable, Feature를 선별해서 가능한 단순하게 만들라는 것입니다.  복잡한 비선형 모델보다는 선형모델을 더 선호하라는 것이구요.  오컴의 면도날은 과적합(over-fitting)을 아주 싫어한다고 말할 수 있겠습니다.

 

다음번 포스팅에서는 과적합을 어떻게 피할 수 있나에 대해서 알아보도록 하겠습니다. 

(Training Set vs. Test Set error rate, cross validation, Prunning, Smaple size up)

 

많은 도움이 되었기를 바랍니다.

 

도움이 되었다면 아래의 '공감 ♡'를 꾸욱~ 눌러주세요. ^^

 

Posted by R Friend R_Friend

댓글을 달아 주세요

기계학습(Machine Learning)에 대한 최근의 관심이 뜨겁습니다.  R을 활용해서 기계학습 하는 방법을 블로그에 연재해보려고 합니다. 


저는 예전에 데이터마이닝(Data Mining) 책에서 k-NN (k Nearest Neighbor), Decision Tree, ANN (Artificial Neural Network), Association Rules, k-Means Clustering 등을 배웠었습니다.  그때와 비교하면... 최근에는 데이터마이닝이라는 용어 대신에 기계학습(Machine Learning)이라는 용어를 더 선호하는것 같고(유행?), 앙상블(Ensemble), 특히 Random Forest!!!, SVM(Support Vector Machine)!!, (이세돌과 알파고의 대국 이후) Deep Learning!!!!! 등이 많이 회자되고 있으며, 상용툴 SAS나 SPSS 사용하던걸 오픈소스 R, Python, 더 나아가서는 Big Data 시스템에서 분산병렬처리 적용(Spark MLlib, H2O, Tensor flow 등) 도 활발하게 활용 중이네요.  ANN(Artificial Neural Network)은 블랙박스 모델이어서 설명력이 부족하여 저는 실전에서는 안써봤는데요, 구글이 고양이, 개 이미지를 인식하는데 성공한거라든지(feature selection, feature extraction 없이 지가 알아서 학습을 척척...헐...), 알파고가 이세돌 이겼다든지 해서 최근에 기계학습, 인공지능 한다하는 커뮤니티에서는 Deep learning이 정말 Hot 한거 같아요. 


기계학습으로 할 수 있는 것들이 무척 많습니다. 상품/컨텐츠 추천, 신용카드 사기거래 탐지, 암 유발 DNA 패턴 탐지, 음성/영상/이미지 인식, 스팸 이메일 분류, 주가 예측, 날씨 예측, 구매행동 기반 고객세분화, 제조업 불량 패턴 분류 및 원인 자동 분석, 최근 뉴스에 종종 나오는 자율주행 자동차....등 이미 우리 실생활에 헤아리기 힘들 만큼 깊숙이 스며들어 기계학습이 사용되고 있습니다. 



서두가 길었는데요, 기계학습이 무엇인지부터 얘기를 시작해보겠습니다. 

위키피디아에서 좀 찾아보니 Arthur Samuel과 Tom M. Mitchell 이 정의해놓은 것이 있네요. 


Arthur Samuel 은 기계학습을 정의하기를 "컴퓨터에게 명시적으로 프로그래밍 하는 것 없이 배울 수 있는 능력을 주는 학문 분야"라고 했네요. 

(In 1959, Arthur Samuel defined machine learning as a "Field of study that gives computers the ability to learn without being explicitly programmed".)


Tom M. Mitchell 은 기계학습을 정의하기를 "컴퓨터 프로그램이 어떤 유형의 과업(T, Task)들에 대해 성과평가 지표(P, Performance measure)의 관점에서 경험(E, Experience)으로 부터 배워서, 만약 성과평가 지표(P)의 값이 향상이 된다면 컴퓨터 프로그램은 학습을 할 수 있다"고 말할 수 있다고 합니다. 

(Tom M. Mitchell provided a widely quoted, more formal definition: "A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E".)


- from Wikipedia -



좀더 부언설명을 하자면, Arthur Samuel 이 말한 것 중에 보면 기계학습은 명시적으로 프로그래밍하는 것이 아니라고 했는데요, 명시적으로 프로그래밍하는 것을 들라면 전문가 시스템(Expert System)을 있겠습니다.  전문가 시스템 하나 만들려면 업 전문가(domain expert)와 프로그래머가 긴 시간을 들여 협업해야 하므로 비용이 많이 드는 한계가 있지요. 


Tom M. Mitchell 은 Experience, Task, Performance measure를 가지고 기계학습을 정의했는데요, Arthur Samuel의 정의보다는 기계학습에 필요한 요소에 대해서 좀더 자세하게 설명하였습니다. Experience는 Data 로 보면 되겠습니다. 예전엔 데이터가 귀했지만 요즘은 데이터가 넘쳐나서 그걸 어떻게 제 시간에 처리하느냐가 문제가 되어버렸습니다.  Task 는 예측, 분류, 패턴 발견, 그룹핑 등을 들 수 있겠네요.  Performance measure 는 컴퓨터가 학습을 잘 하고 있는지 아닌지 평가, 판단, 제어할 때 사용하는 지표들인데요, 정확도, 민감도, 오분류율, recall rate ... 등을 훈련 집단, 테스트 집단과 비교해가면서 훈련을 진행하게 됩니다. 


컴퓨터의 아버지, 2차 세계 대전 시 독일군의 암호 이니그마를 풀었던 천재 수학자 Alan Turing은 제안하기를 "기계가 생각을 할 수 있는가?"라는 질문을 "우리가 할 수 있는 일들을 기계가 할 수 있는가?"라는 질문으로 바꾸어야 한다고 했는데요, Tom M. Mitchell의 기계학습 정의와도 일맥상통하는 면이 있습니다. 

(Alan Turing's proposal in his paper "Computing Machinery and Intelligence" that the question "Can machines think?" be replaced with the question "Can machines do what we (as thinking entities) can do?", from Wikipedia)



기계학습은 과업을 학습하는데 필요한 신호와 피드백(signal and feedback)에 따라서 크게 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning), 강화학습(Reinforcement Learning)의 3개 유형으로 구분할 수 있습니다. 





지도학습(Supervised Learning)은 훈련 데이터(Training Data)로 부터 예측/추정(prediction, estimation), 분류(classification) 함수를 만들어 내는 기계학습 방법입니다.  독립변수(x1, x2, ...)들과 종속변수(y)를 가지고 있고, 선생님의 지도 하에 독립변수와 종속변수 간에 관계를 일반화하는 학습을 하게 됩니다.  Y값을 가지고 있으니 학습이 끝나고 나면 성적표가 적나라하게 나옵니다.  과거의 데이터를 가지고 학습을 시키고 나면, 학습 모델에 새로운 데이터에 적용해서 예측/추정, 분류 등의 과업을 수행합니다. 



반면에 비지도학습(Unsupervised Learning)은 관찰한 데이터로 부터 숨겨진 패턴/규칙을 탐색, 찾아내는 기계학습 방법입니다.  비지도학습에서는 종속변수(y) 값이 없습니다. 선생님도 없습니다.  그냥 Input 변수 (x1, x2, ...) 만 주고 컴퓨터보고 수많은 데이터 속에 숨겨져 있는 패턴을 찾으라고 합니다. 연관/순차규칙 분석(association rule, sequence analysis), 군집화(clustering, affinity grouping), 차원 축소(dimension reduction), 네트워크 분석(network analysis, link analysis) 등이 비지도학습에 속합니다.  비지도학습은 Y값이 없으니 학습이 끝나고 나서 몇 점을 받았는지 객관적으로 평가하기가 애매하며 분석가의 주관이 들어갑니다.  비지도학습은 데이터로 숨겨진 패턴/규칙을 발견하고 나면 그걸로 끝납니다. 비지도학습은 지도학습처럼 새로운 데이터에 학습모델을 적용하는거 없습니다. 

(영상, 이미지 처리/분석을 비지도학습에 넣기는 했는데요, 데이터마이닝이나 머신러닝 책들에서는 보통 언급을 안하더군요. feature extraction 하는데 유용하게 쓰곤 하는데요, 성격상 비지도학습에 넣어도 괜찮은거 같아서 일단 넣어봤습니다) 

 


비지도학습은 분석의 초기에 탐색적분석(EDA, Exploratory Data Analysis) 단계에서 많이 사용되곤 합니다.  비즈니스 과업의 많은 경우 비지도학습과 지도학습을 서로 연계해서 사용하는 경우가 많습니다. 




* 그림 출처 : http://prooffreaderswhimsy.blogspot.kr/2014/11/machine-learning.html




과업의 종류별로 지도학습과 비지도학습의 대표적인 알고리즘을 소개하면 아래와 같습니다 (통계기법도 포함함).  분석기법/알고리즘은 과업의 종류와 데이터의 특성에 맞게 적합한 것을 선별하면 됩니다.  앞으로 R 기계학습 패키지를 가지고 하나씩 예제를 들어가면서 소개하도록 하겠습니다. 


 


강화학습(Reinforcement Learning)은 위키피디아에서 소개하고 있는 내용을 번역해서 소개하는 걸로 하겠습니다.  이세돌과 바둑 대결했던 알파고와 구글의 무인자동차에 적용된 기계학습 기법이 강화학습인만큼 소위 뜨고 있는 핫한 분야인거 같습니다.  위키피디아에서 소개하길, 


강화학습(Reinforcement Learning)은 명시적으로 선생님이 가르치는 것 없이도 동적으로 변화하는 환경과 상호작용하면서 특정 목적(예: 자동차 운전)을 수행할 수 있는 컴퓨터 프로그램을 말합니다. 

(Reinforcement learning: A computer program interacts with a dynamic environment in which it must perform a certain goal (such as driving a vehicle), without a teacher explicitly telling it whether it has come close to its goal.)   


또다른 예로는 대전 게임하는 방법을 배우는 것을 들 수 있습니다. 강화학습은 장기관점의 보상(long-term reward)을 최대화하기 위해서 agent가 변화하는 환경 속에서 무슨 행동을 취해야 하는지에 대해서 주목합니다. (Another example is learning to play a game by playing against an opponent. Reinforcement learning is concerned with how an agent ought to take actions in an environment so as to maximize some notion of long-term reward.). 


강화학습 알고리즘은 세상(환경)의 상태(변화)에 따라 agent가 취해야 할 행동을 매핑(선택)하는 정책을 찾는 시도를 합니다.  강화학습은 지도학습과는 달리 정확한 input/output 쌍의 데이터라든지 최적의 행동 집합을 필요로 하지 않습니다. (Reinforcement learning algorithms attempt to find a policy that maps states of the world to the actions the agent ought to take in those states. Reinforcement learning differs from the supervised learning problem in that correct input/output pairs are never presented, nor sub-optimal actions explicitly corrected.)


* 출처 : 위키피디아(https://en.wikipedia.org/wiki/Machine_learning)



우리가 보통 (강한) 인공지능(AI, Artificial Intelligence) 이라고 말할 때 생각하는 기계학습은 강화학습(Reinforcement Learning)과 많이 관련이 있어보이지요?  Deep Learning이 Feature selection을 사람이 개입해서 해주지 않아도 알아서 해주니 Deep Learning + 강화학습(Reinforcement Learning)이 강한 인공지능의 핵심으로 부상하고 있는거 같습니다.  제약조건(constraints) 을 만족하는 하에서 최대화(maximization) 혹은 최소화(minimization)하는 최적화(optimization)가 역동적으로 변화하는 환경에 대응해서 실시간으로 계산해서 적용하고 실시간으로 피드백 받는 동적인 시스템을 생각하면 되겠습니다. 


많은 도움 되었기를 바랍니다. 


다음번 포스팅에서는 일반화(Generalization)과 과적합(Over-fitting)에 대해서 알아보겠습니다. 


이번 포스팅이 도움이 되었다면 아래의 '공감 ♡'를 꾸욱~ 눌러주세요. 



Posted by R Friend R_Friend

댓글을 달아 주세요

  1. 최유정 2016.05.02 15:45  댓글주소  수정/삭제  댓글쓰기

    semi supervised learning에 대해서도 설명해주실수있나요??

    R사용할때 즐겨찾기 해놓고 평소 자주들어오는데 저도 평소 관심있던 기계학습에 대해서 앞으로 글쓰신다고 하니 기대됩니다!

    • R Friend R_Friend 2016.05.03 23:17 신고  댓글주소  수정/삭제

      안녕하세요 최유정님.
      Semi supervised learning 은 supervised learning과 unsupervised learning의 중간 혹은 짬뽕으로 보시면 되겠습니다.

      하나의 예를 들어볼께요. 1천만 고객을 확보한 의류 K쇼핑몰의 이용고객을 대상으로 니즈 세분화를 하려는 마케터가 있다고 해보겠습니다. 니즈별로 고객을 분류(classification)하는 supervised learning을 하려면 Y값, 즉 종속변수의 label 값이 있어야지 되는데요, 니즈라는 이 Y값을 확보하려면 Survey를 해야 한다고 해봅시다. 근데 Survey가 비용이나 시간이 아주 많이 듭니다. 1천만 전 고객을 대상으로 Survey하는 것은 현실적으로 불가능합니다. 이럴 때 성/연령별대 별로 그리고 고객등급별로 층화무작위추출(stratified random sampling)을 1000명 해서 ID를 붙여서 survey를 진행합니다. survey 항목에는 고객 니즈를 파악할 수 있는 정성적인 질문들을 하겠지요. 이걸 가지고 unsupervised learning의 하나인 K-means clustering 을 수행해서 5개의 패션 니즈 세분군을 만들었다고 해보겠습니다. 이들 1000명은 고객ID를 붙여서 survey를 했기때문에 구매 Transaction DB, Web/Mobile click-stream data, Profile data가 DB에 고스란히 쌓여 있습니다. 이들 DB를 가지고 survey한 1000천명의 (unsupervised learning을 통해 도출한) 5개 니즈 세분군을 Y값 label로 놓고 => 이를 가장 잘 분류(classfication)할 수 있는 supervised learning인 Decision Tree 모형을 개발했다고 합시다. => 이 Decision Tree 모형은 survey 데이터가 아닌 구매데이터, 웹/모바일 클릭스트림 데이터, Profile 데이터에 기반한 decision tree 의 분류 rule이므로 1천만명 전사 고객에게 Projection 시킬 수 있습니다.

      요약하면, 비용과 시간이 많이 드는 survey + K-means clustering(unsupervised learning)으로 니즈 세분화 => Decision Tree로 분류 (supervised learning), 이런 식으로 짬뽕해서 쓰는게 semi supervised learning 의 예가 되겠네요.

    • 최유정 2016.05.04 14:41  댓글주소  수정/삭제

      감사합니다! 예시를 보니 이해가 한번에 되네요 ㅎㅎ 기계학습에 대한 글 많이 올려주세요! 매일 들어와서 보고있습니다~

  2. K 2016.07.01 11:49  댓글주소  수정/삭제  댓글쓰기

    질문드려봅니다.
    "영상으로 부터 feature을 추출하는 용도로 사용하기 때문에 영상, 이미지 처리/분석을 비지도학습에 넣어도 될 것 같다"라고 이해했는데요.
    그럼 이 feature을 지도학습하여 이미지를 식별하는 용도로 사용하게 되는 것인지요?
    그리고 실험자가 의도에 맞는 feature 을 추출할 수 있는 것인가요?

    • R Friend R_Friend 2016.07.01 23:41 신고  댓글주소  수정/삭제

      네, 그렇습니다. 지도학습에서 가장 중요한게 똘똘한 feature(파생변수 포함)를 (1) 잘 수집/만들고 (2) 잘 선별하는 것인데요, 신호/영상/이미지 처리 관련 알고리즘 활용해서 (1) feature 잘 만드는 부분에 있어서 유용하게 쓸 수 있습니다. (예: classification 모델로 필기체 인식)

      (사족: deep learning은 layer를 층층히 쌓아서 많은 데이터로 훈련시키면 분석가의 개입없이도 feature 생성, 선별을 블랙박스 안에서 지가 혼자 알아서 하는지라...앞으로 딥러닝이 확산되면 feature 생성, 선별에 목숨거는 분석가의 노고를 덜어줄거 같기도 합니다. 딥러닝은 언제 공부를...ㅠ.ㅠ)

  3. 2016.07.21 22:51  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • R Friend R_Friend 2016.07.21 23:06 신고  댓글주소  수정/삭제

      R, SAS/Eminer, SPSS/Clementine 모두 통계, 기계학습, 시각화 툴입니다. 비슷한 툴로 Matlap, Octave, KXEN 등도 있습니다.

      저는 SAS랑 SPSS 둘다 쓰다가 최근 3년전부터는 R만 쓰고 있습니다. 요즘에 주변에 프로젝트들 보면 R이 대세입니다.

      R 좋은 점은 아래 글 참고하세요.
      http://rfriend.tistory.com/m/post/2

      저도 문과출신인데요, 문과생이 빅데이터 하기에는 힘든 점이 많습니다. 통계/확률, 수학, 최적화, 선형대수, 미적분, 프로그래밍... 넘어야할 산이 아주 많습니다. 비전공자가 독학하기엔 버거운게 사실입니다.

      다행인 점은 공부할 소스는 넘쳐난다는 것입니다. 수많은 책들, coursera 등의 mook 무료강의...
      제가 쓰는 블로그도 세상에 뭔가 조그만 도움이라도 되었으면 하는 바램입니다. ^^

    • 2016.07.23 20:25  댓글주소  수정/삭제

      비밀댓글입니다

  4. kjh 2016.08.24 23:13  댓글주소  수정/삭제  댓글쓰기

    앙상블, 랜덤포레스트, 강화학습,
    다양한 신경망 기법들 등에 대해 쉽게 잘 설명해주는 책이 있을까요? 소개좀 부탁드립니다!

    • R Friend R_Friend 2016.08.26 14:40 신고  댓글주소  수정/삭제

      알고리즘 원저자의 논문을 참고해보세요.

      1) Leo Breiman, "Random Forests", Statistics department university of California, 2001

      2) Y.Freund, Robert E. Shapire, "A short introduction to boosting"

      3) Shapire, "The boosting approach to machine learning : an overview"

      4) Paul Viola, Michael Jones, "Rapid Object detection using a boosted cascade of simple feautres"

      5) Paul Viola, Michael J.Jones, "Robust Real-Time Face Detection"

      6) Robert Tibshirani, "Regression Shrinkage and Selection via the Lasso", 1996

      강화학습은 카이스트 김세현교수님의 "경영과학" 책으로 최적화 에 대해 학습하시면 도움이 많이 될듯합니다. 강화학습 관련 원서 pdf 무료 다운로드는 http://www.intechopen.com/books/reinforcement_learning 접속해보세요.

      신경망은 최근 눈부신 발전을 이루고 있는데 제가 follow-up을 못하고 있어서요 도움이 못되겠네요. 구글링해보시기 바랍니다.

    • kjh 2016.08.27 12:48  댓글주소  수정/삭제

      감사합니다!!!!!!

  5. mjk 2017.02.01 16:56  댓글주소  수정/삭제  댓글쓰기

    글 너무 잘보고 있습니다!!
    관련분야 공부를 하다가 궁금해졌는데요.
    데이터 마이닝과 기계학습의 차이점이 무엇인가요??

    • R Friend R_Friend 2017.02.02 18:25 신고  댓글주소  수정/삭제

      mjk님, 반갑습니다.

      데이터마이닝과 기계학습의 차이를 정확히 잘 모르겠습니다.

      제가 데이터마이닝을 처음 공부하기 시작했던게 1999년, 2000년에 'Data Minning Techniques', 'Mastering Data Mining' 원서를 가지고 했었는데요, 그때 공부했던 분석기법들이 요즘 서점가면 쫙 깔려있는 '000 기계학습', '000 머신러닝' 책들에 나오는 분석기법과 큰 차이가 없습니다. (Artifitial Neural Network이 Deep Learning으로 환골탈퇴한것 빼곤요...)

      그래도 굳이 차이점을 생각해보자면, 'Data Mining'이라는 명칭만 놓고 보면 '숨겨진 패턴, 관계를 찾아내는(캐내는) knowledge discovery' 뉘앙스가 강해서요, 연관규칙분석, 군집분석, link analysis 등과 같은 '비지도학습'의 분석기법들이 주로 연상이 됩니다.

      반면, 'Machine Learning'은 Y값을 두고 X 설명변수를 사용해서 예측, 혹은 분류 모델을 적합시키고 performance를 평가하는 '지도학습', '강화학습' 쪽으로 연상이 됩니다.

      학문적으로 데이터마이닝과 기계학습을 구분해서 정의해놓은게 있을거 같기는 한데요, 한번 구글링 해보시면 좋겠네요.

      현장에서는 거의 같은 뜻으로 혼용해서 쓰는것 같구요, 요즘은 유행(?)을 따라 기계학습과 인공지능, 딥러닝을 더 많이 쓰고 혼용해서 쓰는것 같아요. (엄밀히 말하면 딥러닝은 기계학습의 부분집합, 기계학습은 인공지능의 부분요소)

  6. zzkl27 2019.07.22 03:37  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 통계학과 학생입니다. 이블로그에서 머신러닝을 많이 배우고있습니다.
    제가 곧 취업을 해야하는데 공부한 기록을 블로그에 올리려고합니다. 제가 이블로그를 보며 공부를 하고있는데 기록을 하면 이 블로그의 내용이 올라갈것 같습니다. 출저는 url로 남기려고하는데 괜찮으시면 이 블로그의 글을 가져가도 되는지 허락을 받고싶습니다.

    • R Friend R_Friend 2019.07.22 08:57 신고  댓글주소  수정/삭제

      일부 포스팅에 대해 부분 인용 & 출처 기입이면이면 괜찮습니다만, 블로그 전반에 대해 제 블로그 내용을 대부분 복사 & 붙이기하는 것은 삼가주세요.