'지도학습'에 해당되는 글 1건

  1. 2016.05.01 [R 기계학습] 기계학습이란? 기계학습의 유형/알고리즘 종류? (15)

기계학습(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 신고  댓글주소  수정/삭제

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