과대적합(Over fitting) 과소적합(Under fitting)

 

머신러닝에서 학습과정은 패턴을 발견하기 위해 모델링을 만드는 단계라고 있다. 일반적으로 모델을 만들 때에는 데이터를, 트레이닝 데이터 (training) 테스트 데이터(test) 나누어 사용한다.  트레이닝 데이터를 반복적으로 학습함으로써 테스트 데이터 또는 실제 데이터와 가장 유사한 결과를 만들어 내는 것을 목표로 하고 있다.

하지만 트레이닝 데이터와 테스트 데이터가 비슷하다면 모델의 정확도는 매우 높게 나올 것이다. 하지만 모델이 복잡하다면 트레이닝 데이터와 테스트 데이터의 결과는 다르게 나타날 확률이 높다. 일반적으로 트레이닝 데이터는 실제 데이터를 샘플링 하거나 특정 패턴을 인식시키기 위한 데이터로 트레이닝 데이터에 최적화 되어있으면 실제 데이터에서 오차가 발생할 확률이 크다. 그래서 트레이닝 데이터에 대해서는 높은 정확도를 나타내지만 새로운 데이터에 대해서 예측을 하지 못하는 것을 과대적합(Overfitting )이라고 하며, 반대로 트레이닝 데이터 조차도 정확한 결과를 도출하지 못하면 과소적합(Underfitting)이라고 한다. 과대적합과 과소적합 사이에서 최적화된 절충점을 찾아 모델을 만드는 것이 매우 중요하며 트레이닝 데이터에서 생성된 모델이 일반 데이터에 대해 정확하게 예측되는 모델을  일반화(Generalization) 되었다라고 한다.

 

아래 그림은 과소적합(Under fitting) 과대적합(Over fitting) 이해를 돕기 위해 그림으로 나타낸 것이다.  과소적합의 경우 데이터를 충분히 반영하지 못해(샘플 개수가 충분하지 않는 경우)  잡음이 많이 섞여 있으며, 과대적합의 경우 불필요한 잡음(noise) 과도하게 모델링에 반영한 상태이다. 우리는 어느정도 오류(noise) 허용할지 결정하면서 최적의 모델 값을 도출해야 한다.

 

 

과대적합이나 과소적합의 문제를 최소화하고 정확도를 높이는 가장 좋은 방법은 많고 다양한 데이터를 확보하고, 데이터에서 다양한 특징(feature)들을 찾아서 학습에 사용하는 것이다. , 트레이닝 데이터에 따라, 생성된 모델의 정확도가 결정되므로 트레이닝 데이터 세트를 만드는 것이 중요하다.

 

 

 

[참고자료]

https://brunch.co.kr/@gimmesilver/44

https://ko.d2l.ai/chapter_deep-learning-basics/underfit-overfit.html

 

 

2020-03-18/ Sungwook Kang / http://sungwookkang.com

 

 

인공지능,  Artificial Intelligence, 머신러닝, Machine Learning, 딥러닝, Deep Learning, 과대적합, 과소적합, Over fitting, Under fitting

[Review] 2020-03-17 알고리즘 스터디 – 12 Week Challenge

 

SQL AngelesLA 한인 IT 커뮤니티 그룹으로 다양한 IT 기술을 공부하며 회원들의 소통을 공유 합니다. 현재 다양한 스터디를 운영하고 있으며 각종 공지를 위한 포럼, 그룹채팅을 운영하고 있습니다. 커뮤니티는 회원제로 운영되고 있으며 참여의 제한은 없습니다. 스터디 참여를 원하시거나 교류를 원하시는 분은 아래 홈페이지에서 상세 내용을 확인할 수 있습니다.

·         문의메일 : Leo.Sungwook.Kang@gmail.com

·         KAKAO : SQLMVP

·          SQL Angeles 공식 홈페이지 : http://SQLAngeles.com

·          공식 Facebook 그룹 : https://www.facebook.com/groups/SQLAngeles/

 

오늘은 SQL Angeles에서 준비한 12주 프로젝트로, 온라인 알고리즘 스터디의 11주차를 진행하였습니다. SQL Angeles의 온라인 미팅은 최대 100명이 참여할 수 있으며 상시 스터디원을 모집하고 있습니다.

 

온라인 미팅은 PC 뿐만 아니라, 태블릿, 스마트폰에서도 참여가 가능하기 때문에 앞으로도 많은 참여 부탁 드립니다.

 

11주차 스터디 주제는 K-nearest neighbors 로 진행 하였습니다.

·          Week 1: Introduction to algorithms (1/7/2020)

·          Week 2: Selection sort (1/14/2020)

·          Week 3: Recursion (1/21/2020)

·          Week 4: Quicksort (1/28/2020)

·          Week 5: Hash tables (2/4/2020)

·          Week 6: Breadth-first search (2/11/2020)

·          Week 7: Dijkstra's algorithm (2/18/2020)

·          Week 8: Greedy algorithms (3/3/2020)

·          Week 9-10: Dynamic programming (3/10/2020)

·          Week 11: K-nearest neighbors

·          Week 12: Basic codding interview skills

 

 

오늘의 주제는 K-nearest neighbors 입니다. 패턴 인식에서, k-최근접 이웃 알고리즘(또는 줄여서 k-NN)은 분류나 회귀에 사용되는 비모수 방식이다.[1] 두 경우 모두 입력이 특징 공간 내 k개의 가장 가까운 훈련 데이터로 구성되어 있다. 출력은 k-NN이 분류로 사용되었는지 또는 회귀로 사용되었는지에 따라 다르다.

 

k-NN 분류에서 출력은 소속된 항목이다. 객체는 k개의 최근접 이웃 사이에서 가장 공통적인 항목에 할당되는 객체로 과반수 의결에 의해 분류된다(k는 양의 정수이며 통상적으로 작은 수). 만약 k = 1 이라면 객체는 단순히 하나의 최근접 이웃의 항목에 할당된다.

k-NN 회귀에서 출력은 객체의 특성 값이다. 이 값은 k개의 최근접 이웃이 가진 값의 평균이다.

k-NN은 함수가 오직 지역적으로 근사하고 모든 계산이 분류될 때까지 연기되는 인스턴스 기반 학습 또는 게으른 학습의 일종이다. k-NN 알고리즘은 가장 간단한 기계 학습 알고리즘에 속한다. (출처 : https://ko.wikipedia.org/wiki/K-%EC%B5%9C%EA%B7%BC%EC%A0%91_%EC%9D%B4%EC%9B%83_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

 

 

오늘은 알고리즘 스터디의 마지막 수업을 진행하였습니다. 원래 12주 코스로 커리큘럼을 만들었으며, 마지막 12주차에서는 코딩 인터뷰 스킬에 대해서 다루려고 하였으나, 현재 참여하는 인원에서는 코딩 인터뷰에 대한 니즈가 크기 않아서 12주차는 취소를 하게 되었습니다.

 

역시나 명강사님 답게 이해하기 쉽게 설명해 주셨습니다. 또한 오늘 주제와 직접적인 연관은 없지만, 간접적으로 머신러닝에 대한 이야기, 통계 이야기 등을 해주시면서 지루하지 않은 시간으로 만들어 주셨습니다.

 

다음 스터디에도 항상 발전하는 스터디가 되기를 기대하면서 오늘 하루도 고생 많으셨습니다.

 

2020-03-17 / http://sqlangeles.com

 

 

LA 한인 SQL 스터디 모임, LA IT 모임, OC IT 모임, SQL 스터디, 개발 스터디, SQL Angeles, IT 커뮤니티, OC IT 커뮤니티, 알고리즘 스터디, 온라인 스터디

 

[Review] 2020-03-16 비개발자를 위한 데이터 스터디 – 7 Week Challenge

 

SQL AngelesLA 한인 IT 커뮤니티 그룹으로 다양한 IT 기술을 공부하며 회원들의 소통을 공유 합니다. 현재 다양한 스터디를 운영하고 있으며 각종 공지를 위한 포럼, 그룹채팅을 운영하고 있습니다. 커뮤니티는 회원제로 운영되고 있으며 참여의 제한은 없습니다. 스터디 참여를 원하시거나 교류를 원하시는 분은 아래 홈페이지에서 상세 내용을 확인할 수 있습니다.

·         문의메일 : Leo.Sungwook.Kang@gmail.com

·         KAKAO : SQLMVP

·          SQL Angeles 공식 홈페이지 : http://SQLAngeles.com

·          공식 Facebook 그룹 : https://www.facebook.com/groups/SQLAngeles/

 

오늘은 SQL Angeles에서 준비한 7주 프로젝트중 4주차로 [비개발자를 위한 데이터 스터디]라는 주제와 함께 UI/UX, Artist, 그래픽 디자이너, SW QA, 사회학자, 오디오 레코딩 전문가, 통계학자, 마케터 등 다양한 분야의 분들과 모여서 스터디를 진행 하였습니다.

 

1(2/24/2020)

아이스브레이킹

데이터베이스는 무엇이며, 데이터는 어떻게 저장되는가?

 

2(3/2/2020)

database 용어 정리

database 연결하기

[select * from tablename where id = 1 and name = ‘누구누구’ order by id desc;] 이해하기

 

3, 4(3/9/2020, 3/16/2020)

조인이란?

INNER / OUTER 차이 이해하기

 

5

통계를 위한 count, sum, min, max 사용하기

group by ?

having 으로 group 결과 제한하기

 

6

SQL함수 활용하기

MS-SQL 함수에는 어떤게 있을까?

함수를 검색하는 방법

 

7

서브쿼리란?

IN / EXISTS 이해하기

서브쿼리를 다른 테이블과 조인하기

 

7

심화학습

SQL 퀴즈

 

 

오늘은 4주차 모임으로, 기존 강의 계획으로는 group by에 대한 내용 시간이지만, 지난주 2시간의 강의로는 JOIN에 대해서 이해하기는 너무 어렵다고 하여, 4주차에도 JOIN에 대해서 한번 더 진행하였습니다.

이번 4주차 모임은 시국이 시국인만큼 여러 위험요소를 제거하기 위해 온라인으로 진행하였습니다. 그동안 SQL Angeles에서는 온라인 스터디 진행을 위해 꾸준히 준비를 하고 있었으며, 일부 스터디에서는 이미 온라인으로 진행하고 있어, 오프라인 스터디를 온라인으로 전환하는데 크게 어렵지 않았습니다. 온라인 스터디에도 여전히 높은 참석률을 보여주셨습니다. (22명중 16명 참석)

 

온라인 스터디를 진행하기 위해 발표용 랩탑과 방송을 모니터링하기 위한 아이맥, 그리고 기타 발표시 자료를 참고할 랩탑을 준비하였습니다. 성능 좋은 아이맥을 놔두고 왜 랩탑으로 방송을 했을까 라는 의문이 들기도 하실텐데, 랩탑의 터치스크린과 펜 지원 기능이, 발표시 설명을 돕기 위한 다양한 부가 기능으로 사용할 수 있기 때문입니다.

 

 

발표자료는 파워포인트로 슬라이드를 만들고, 온라인 강의는 ZOOM이라는 솔루션을 하였습니다. SQL Angeles에서는 최대 100명까지 온라인 스터디에 참여할 수 있는 유료 솔루션을 보유하고 있으며, 다양한 강좌를 온라인으로 운영하고 있습니다. 발표 슬라이드에서 중요한 부분이나 추가 설명을 해야 하는 부분은 노트 기능을 이용하여 그림을 그려가면서 설명하였습니다.

 

셀프 조인의 대한 개념적인 설명과 셀프 조인이 사용되는 케이스를 예를들어 설명하였습니다. 흔히 매출에 대한 리포트를 만든다고 할 때 YoY, MoM, DoD (전년, 전월, 전일) 비교를 할 때, 셀프 조인을 사용하여 쉽게 계산할 수 있습니다.

 

 

이론이 끝나고 실습 시간입니다. SQL Angeles에서 준비한 데이터베이스 서버에 접속하여, 방금 배운 이론을 실습 합니다. 조인 쿼리를 제작하기 전에, 간단히 데이터 구조를 살펴보고, 데이터의 흐름을 이해하기 위해 ERD 까지 그려보았습니다.

 

데이터를 보고 분석한 ERD를 가지고 조인을 통해 퀴즈를 풀어보았습니다.

 

 

실습 중간에 질문은 언제나 환영이며, 배운 이론을 다양하게 변형 및 응용해가며 결과값이 어떻게 달라지는, 다함께 공유하며 고민하고 학습합니다.

 

 

다음 스터디에도 항상 발전하는 스터디가 되기를 기대하면서 오늘 하루도 고생 많으셨습니다.

 

2020-03-16 / http://sqlangeles.com

 

 

LA 한인 SQL 스터디 모임, LA IT 모임, OC IT 모임, SQL 스터디, 비개발자 스터디, 데이터 스터디

 

경사 하강법(Gradient Descent)

 

경사 하강법(Gradient Descent) 머신러닝 딥러닝 알고리즘을 학습시킬때 사용하는 방법 하나이며 1 근삿값 발견용 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사) 구하여 기울기가 낮은 쪽으로 계속 이동시켜 극값(최적값) 이를 때까지 반복하는 것이다.

 

 

해당 함수의 최소값 위치를 찾기 위해 비용 함수(Cost Function) 경사 반대 방향으로 정의한 Step Size 가지고 조금씩 움직여 가면서 최적의 파라미터를 찾으려는 방법이다. 여기에서 경사는 파라미터에 대해 편미분한 벡터를 의미하며 파라미터를 반복적으로 조금씩 움직이는 것이 관건이다.

 

 

경사 하강법에서는 학습시 스텝의 크기 (step  size) 중요하다. 학습률이 너무 작을 경우 알고리즘이 수렴하기 위해 반복해야 하는 값이 많으므로 학습 시간이 오래걸린다. 그리고 지역 최소값(local minimum) 수렴할 있다. 반대로 학습률이 너무 경우 학습 시간은 적게 걸리나, 스텝이 너무 커서 전역 최소값(global minimum) 가로질러 반대편으로 건너뛰어 최소값에서 멀어질 있다.

 

경사 하강법에도 약점이 있다. 경사 하강법은 현재 위치에서의 기울기를 사용하기 때문에 지역 최소값에 빠질 있다. 또한 무작위 초기화(random initialization) 인해 알고리즘이 전역 최소값이 아닌 지역 최소값에 수렴할 있다. 또한 평탄한 지역을 지나기 위해서 시간이 오래 걸리고 일찍 멈추어서 전역 최소값에 도달하지 못할수도 있다.

 

이와 같은 문제점을 해결하기 위해 사용하는 방법이 모멘텀이다. 쉽게 말해 기울기에 관성을 부과하여 작은 기울기는 쉽에 넘어갈 있도록 만든것이다. , 공을 예로 들면 언덕에서 공을 굴렸을때, 낮은 언덕은 공의 관성을 이용하여 쉽게 넘어갈 있게 하여 지역 최소값을 탈출 있게 한다는 뜻이다.

 

모멘텀을 사용하지 않으면 아주 작은 언덕에도 빠져나오지 못할 있으며 기울기가 매우 작은 구간을 빠져나오는데에는 아주 오랜 시간이 걸린다.

 

경사 하강법은 전체 데이터를 모두 사용해서 기울기를 계산(Batch Gradient Descent)하기 때문에 학습하는데 많은 시간이 필요하다. 만약 10만개의 데이터가 있을때, 데이터에 업데이트가 있을 마다 10만번의 계산을 해야한다. 그래서 학습 데이터가 경우 부담이 있다. 이러한 느린점을 보완하기 위해서 확률적 경사 하강법(Stochastic Gradient Descent) 사용한다. 방법은 step에서 한개의 샘플을 무작위로 선택하고 하나의 샘플에 대한 기울기를 계산한다. 확률적 경사 하강법은 아래와 같은 특징이 있다.

·       매우 적은 데이터를 처리하기 때문에 학습 속도가 빠름

·       하나의 샘플만 메모리에 있으면 되기 대문에 데이터셋도 학습이 가능

·       Cost function 매우 불규칙할 경우 알고리즘이 local minimum 건너뛰도록 도와주어 global minimum 찾을 가능성이 높음

·       샘플이 선택이 확률적(Stochastic)이기 때문에 배치 경사 하강법에 비해 불안정

·       Cost function local minimum 이를때 까지 부드럽게 감소하지 않고 위아래로 요동치며 평균적으로 감소

 

 

이외에도 Mini-batch Gradient Descent  방식이 있다. 방식은 임의의 작은 샘플세트에 대해 gradient 계산하여 SGD(Stochastic Gradient Descent) 비해 matrix 연산에 최적화되어 있으며 파라미터 공간에서 불규칙하게 학습한다. 하지만 local minimum 빠지면 빠져나오기 힘든 단점이 있다.

 

 

[참고자료]

·       https://ko.wikipedia.org/wiki/%EA%B2%BD%EC%82%AC_%ED%95%98%EA%B0%95%EB%B2%95

·       https://m.blog.naver.com/PostView.nhn?blogId=2011topcit&logNo=220563609607&proxyReferer=https%3A%2F%2Fwww.google.com%2F

·       https://jaehyeongan.github.io/2019/04/23/%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95-Gradient-Descent/

·       https://bskyvision.com/411

 

 

 

2020-03-15/ Sungwook Kang / http://sungwookkang.com

 

 

인공지능,  Artificial Intelligence, 머신러닝, Machine Learning, 딥러닝, Deep Learning, 경사 하강법, Gradient Descent, 경사 감소법

+ Recent posts