레이블이 learning인 게시물을 표시합니다. 모든 게시물 표시
레이블이 learning인 게시물을 표시합니다. 모든 게시물 표시

2017년 2월 21일 화요일

Learning Algorithms

Logistic Regression

  • Like linear regression, logistic regression does work better when you remove attributes that are unrelated to the output variable as well as attributes that are very similar (correlated) to each other. [--> Feature Selection required.]
  • It's a fast model to learn and effective on binary classification problems.

LDA (Linear Discriminant Analysis)

  • If you have more than two classes then the LDA algorithm is the preferred linear classification technique. The technique assumes that the data has a Gaussian distribution (bell curve), so it is a good idea to remove outliers from your data before hand.
  • 클래스를 구별할 수 있는 정보를 보존하면서도 dimension reduction을 추구;
    • PCA (as unsupervised)는 클래스의 종류에 관계없이 기저벡터를 찾아서 모든 원소를 투영시켜서 전체 원소들의 분포를 보았을 때 가장 넓게 퍼질 수 있는 축을 찾아가는 방식.
    • LDA (as supervised)는 동일 클래스의 원소들은 뭉치고, 이종 클래스 간의 거리는 멀어지는 투영 축을 찾는 방식. (참고 설명1, 참고 설명2)
      • class들의 mean 값들의 차이는 최대화하고, class내의 variance는 최소화하는 벡터 $w$를 찾는 것
      • LDA will seek to maximize the separation between the different classes by computing the component axes (linear discriminants).
  • 한계점: 
    • LDA는 parametric 기법(unimodal Gaussian likelihood를 전제)이기 때문에, 가우시안 분포가 아닌 데이터에 대해서는 classification 성능이 낮음.

Naive Bayes (= Simple Bayes)

  • Naive Bayes is called naive because it assumes that each input variable is independent(확률적으로 서로 독립). This is a strong assumption and unrealistic for real data, nevertheless, the technique is very effective on a large range of complex problems.
  • 속성(feature)가 너무 많은 경우, 모든 연관 관계를 고려한다면 너무 복잡한 상황에서 '단순화'를 통해 쉽고 빠른 판단을 내리기 위해 적용됨.
    • multi-class 분류 문제를 쉽고 빠르게 예측 가능.
      • spam-filtering, sentiment analysis, 질병 예측.
    • 범주형 데이터 분석에 효과적.
    • 하지만, training data에 없던 category의 데이터에 대해서는 정상적인 예측 불가능.
      • 이와 같은 zero frequency 상황을 피하기 위해, smoothing 기법이 필요함(예: Laplace 추정)
  • Bayes theorem
    • Posterior: P(c|x) = 특정 개체 x가 특정 그룹 c에 포함될 사후 확률
      • Posterior = Likelihood와 Prior의 곱
    • Likelihood: P(x|c) = 특정 그룹 c에 특정 개체 x가 포함될 조건부 확률
    • (Class) Prior: P(c) = 특정 그룹 c가 발생할 빈도.
    • Predictor: P(x) = 특정 개체가 발생할 확률 = 모든 그룹에 대해 동일한 상수값이므로 보통 계산식에서 무시됨.

KNN (K-Nearest Neighbor)

  • A downside of K-Nearest Neighbors is that you need to hang on to your entire training dataset.
  • KNN and LVQ need normalization.
  • 튜토리얼

LVQ (Learning Vector Quantization)

  • 입력 벡터를 가장 유사한 참조 벡터로 군집화하는 인공 신경망.
    • 참조 블로그: http://untitledtblog.tistory.com/50
  • The Learning Vector Quantization algorithm (or LVQ for short) is an artificial neural network algorithm that allows you to choose how many training instances to hang onto and learns exactly what those instances should look like.
  • If you discover that KNN gives good results on your dataset try using LVQ to reduce the memory requirements of storing the entire training dataset.
  • 다음과 같은 주장이 있음: kNN is usually superior than LVQ. (개인적 경험상, LVQ 학습하는 데 RF 만큼 상당한 시간 소요되는 것으로 판단됨.)

Decision Trees

  • On the opposite end of the spectrum, you have decision trees. Unfortunately, decision trees are often implemented as ensembles in practice to improve accuracy and reduce variance. Random forests and gradient boosted trees are simple enough models conceptually, but once you add tens or hundreds of trees, it becomes impractical to try to interpret why the model made a certain prediction.
  • Decision trees have a high variance and can yield more accurate predictions when used in an ensemble.
  • Tree가 커지면 커질 수록 세밀한 분류가 가능해지는 대신, overfitting 가능성이 높아짐. 따라서 가지치기(pruning)을 통해 일반화하는 기법이 적용되고 있음
  • 장점:
    • 빠른 구현 가능; 속성 유형에 상관없이 잘 동작; outlier에 (상대적으로) 덜 민감; 튜닝 파라미터 개수가 적음; missing value 있어도 효율적 처리 가능; 해석이 용이.

Random Forest

  • If you get good results with an algorithm with high variance (like decision trees), you can often get better results by bagging (Bootstrap Aggregating) that algorithm.

Bagging

  • Bootstrap
    • 통계에서 사용되던 용어(Bootstrapping, 1979, by Bradley Efron)에서 유래. 
      • 전체 모집단의 분포를 확실하게 알 수 없는 경우, 표본(샘플)을 취하여, (해당 표본이 전체 모집단을 대표한다는 가정하에) 전체 분포를 예측하기 위해 사용. (즉, 전체 표본의 분포와 표본에 대한 샘플들 간의 분포 간의 관계를 통해, 모집단의 분포를 유추하는 방식)
  • model averaging을 통해 성능을 높이는 방식.
    • regression 문제의 경우, variance를 줄이는 효과.
    • classification 문제의 경우, voting을 통해 가장 많은 결과가 나오는 것을 선택.
  • 적용하면 안되는 경우
    • 모집단에 비해, 표본 데이터가 매우 작은 경우.
    • 데이터에 잡음이 많은 경우. (outlier로 인해 왜곡이 커질 수 있음)
    • 데이터간 독립성이 부족한 경우. 
  • Boosting과 다른 점
    • bootstrap 에 사용되는 각 model은 서로 독립적인 반면, boosting은 model이 순차적으로 학습됨.
    • boosting은 최종적으로 weighted vote를 하지만, bagging은 단순 vote를 함.
    • bagging은 variance를 줄이는 것이 주목적, boosting은 bias를 줄이는 것이 주목적.
    • 잡음이 없는 경우, boosting이 bagging 보다 우수함.
    • boosting은 overfiting 발생할 수 있지만, bagging은 overfitting 문제를 해결 가능.

Boosting

AdaBoost (= adaptive boosting)

  • (무작위로 선택하는 대신) 약간 가능성이 높은 규칙들(weak learner/classifier)를 결합시켜서 보다 정확한 예측모델을 만들어 내는 기법.
    • Boosting is an ensemble technique that attempts to create a strong classifier from a number of weak classifiers.
      • 간단한 결합 방식 1) 평균/가중 평균을 사용; 2) 가장 많은 의견(vote)을 선택.
    • (Schapire 1989), (Freuen) 등에 의해 효율적인 boosting 알고리즘이 개발됨.
  • This is done by building a model from the training data, then creating a second model that attempts to correct the errors from the first model. Models are added until the training set is predicted perfectly or a maximum number of models are added.
    • 즉, weak learner를 이용한 학습에서 에러가 발생하면, 해당 에러에 집중하기 위한 weighting을 올려서 새로운 weak learner를 학습하여, 모든 결과를 결합한 최종 결과를 이용한다. 
      • 새로운 learner를 학습할 때마다, 이전 결과를 참조하는 방식.
    • Modern boosting methods build on AdaBoost, most notably stochastic gradient boosting machines.
  • Because so much attention is put on correcting mistakes by the algorithm it is important that you have clean data with outliers removed.

XGBoost

  • XGBoost is a tree ensemble model, which means the sum of predictions from a set of classification and regression trees (CART). In that, XGBoost is similar to Random Forests but it uses a different approach to model training.
  • Out of the different implementations and variations of gradient boosting algorithms, caret performed best on PCA-preprocessed data in the validation set.
  • Both xgboost and gbm follows the principle of gradient boosting.  There are however, the difference in modeling details. Specifically, xgboost used a more regularized model formalization to control over-fitting, which gives it better performance.
  • 참조 블로그: 

t-SNE

    • t-Distributed Stochastic Neighbour Embedding
    • instead of looking at directions/axes which maximise information or class separation, T-SNE aims to convert the Euclidean distances between points into conditional probabilities. A Student-t distribution is then applied on these probabilities which serve as metrics to calculate the similarity between one datapoint to another.
      • Multiple local minima may occur as the algorithm is identifying clusters/sub-clusters.

    Model Ensembling

    • generalization error를 reduce하기 위한 일련의 기법 중 하나.
    • Rank ensembling: 주어진 test set에 대한 다양한 모델의 예측값을 combining; original model을 다시 retrain할 필요가 없음
      • Voting; Averaging; Rank averaging; Historical averaging
    • Stacking (= stack generalization): base predictors를 combine하는 또다른 predictor를 이용하기. 
      • Feature weighted linear stacking; Quadratic weighted stacking; StackNet
    • Blending: 학습 데이터 중 일부(10%)를 holdout set으로 놓고, stacker model을 holdout set으로 학습. 

    *References

    2014년 12월 9일 화요일

    기계학습 오픈소스 도구

    관련링크: http://www.itworld.co.kr/slideshow/90912

    • 스팸 필터링, 얼굴 인식, 추천 엔진을 비롯해 대규모 데이터를 기반으로 예측 분석이나 패턴 인식을 하고 싶다면, 기계 학습(Machine Learning) 적용 가능
    • 컴퓨터가 코드로 정의되지 않은 방식으로 데이터를 학습하고, 분석하고, 행동한다는 이론
    • 여기서는 각각의 앱이나 하둡과 같은 전체 프레임워크에 대한 기능을 제공하는 기계 학습 도구 11가지를 소개

    싸이킷(Scikit)은 파이썬 전용의 기계 학습 라이브러리
    사이킷-런(Scikit-learn)은 수학과 과학 분야에서 넘피(NumPy), 사이피(SciPy), matplotlib 등을 폭넓게 이용한다. 결과물인 라이브러리는 인터랙티브 '워크벤치' 애플리케이션에 이용하거나, 다른 소프트웨어에 탑재시켜 재사용할 수 있다. BSD 라이선스로 제공되는 오픈소스로 재사용이 가능하다.

    쇼군(Shogun)은 범용 및 전용 언어에 대한 각종 인터페이스를 지원. 1999년 개발. C++에 기반
    SWIG 라이브러리 덕분에 자바, 파이썬, C#, 루비, R Lua, Octave, Matlab에서도 이용할 수 있다. 쇼군에 비견할 수 있는 라이브러리로는 Mlpack이 있는데, C++ 기반으로 2011년 개발됐다. 그러나 Mlpack보다 더 많은 통합 API를 제공하는 쇼군이 쉽고 빠르게 다룰 수 있다는 평가

    어코드(Accord) Framework/AForge.net
    닷넷(.Net)용 단일 프로세싱 프레임워크 겸 기계 학습 라이브러리인 어코드(Accord)는 AForge.net의 확장판이다. 여기에서 '단일 프로세싱’은 이미지를 통합하거나 얼굴을 인식하는 등 이미지와 음성을 처리하는 여러 기계 학습 알고리즘을 일컫는다. 여기에는 동영상 등 이미지 스트림을 대상으로 하는 비전 프로세싱(vision processing) 알고리즘이 포함되며, 움직이는 물체를 추적하는 기능을 구현하는 데 사용되기도 한다. 어코드에는 신경망에서 의사결정 나무 시스템에 이르기까지 보다 전통적인 기계 학습 기능을 구현하는 라이브러리가 포함

    Mahout
    Mahout 프레임워크는 오랜 기간 하둡과 연관됐으나, 상당수는 하둡 이외에서도 작동된다. 해당 프레임워크는 하둡이나 자체적인 독립형 애플리케이션으로 분리될 수 있는 하둡 프로젝트와 통합할 독립형 애플리케이션에 유용하다.


    MLlib
    아피치의 스파크 및 하둡용 기계 학습 라이브러리인 MLlib은 속도와 확정이 뛰어난 알고리즘과 유용한 데이터 형식을 지원한다. 하둡 프로젝트이기 때문에 MLib의 주 언어는 자바다. 그러나 파이썬 또한 넘피 라이브러리를 이용해서 MLib을 연결할 수 있으며, 스칼라(Scala) 사용자들도 MLib에 코드를 쓸 수 있다. 하둡 클러스터가 실용적이지 못하다면, 하둡 없이 스파크에 배치할 수 있다. EC2와 Mesos도 마찬가지이다.
    또 다른 프로젝트인 MLbase는 MLib에 기반을 두고 있는데, 결과 도출은 좀 더 쉬운 프로젝트다. 코드를 쓰는 대신 SQL을 이용해 쿼리를 처리할 수 있기 때문이다.


    H2O
    옥스데이터(Oxdata)의 H2O는 이미지 분석보다는 부정행위나 트렌드 분석 등 비즈니스 프로세스에 더 적합한 알고리즘이다. H2O는 HDFX에는 스탠드얼론, 맵리듀스에서는 YARN 기반, 아마존 EC 인스턴스에서는 직접 구현을 할 수 있다. 하둡 전문가라면 자바를 이용해 H2O를 연동할 수 있다. 또한, 파이썬, R, 스칼라를 지원하고, 이들 플랫폼의 라이브러리로 연동을 시킬 수 있다.


    클라우데라 오릭스(Cloudera Oryx)
    하둡을 대상으로 한 또 다른 기계 학습 프로젝트인 오릭스(Oryx)는 클라우데라 하둡 배포판이다. 클라우데라는 스파크 프로젝트를 이용한 스트리밍 데이터 분석을 강조하는데, 오릭스는 그 덕분에 실시간 스트림 데이터에 배치할 수 있는 기계 학습 알고리즘을 구현할 수 있다. 이는 실시간 스팸 필터나 추천 엔진에 사용된다.
    최근에는 오릭스2라는 새로운 버전이 개발되고 있다. 성능을 높이기 위해 스파크 및 Kafka를 사용하며, 해당 구성요소를 한층 느슨한 형태로 작성해 향후 검증을 할 수 있다.


    고런(GoLearn)
    구글의 고(Go)는 5년밖에 되지 않은 언어이다. 그러나 라이브러리가 풍부해짐에 따라 폭넓게 사용되기 시작하고 있다. 고(Go)를 대상으로 하는 일체형 기계 학습 라이브러리가 없어 개발된 것이 고런(GoLearn)이다. 이를 개발한 스테판 위트워스에 따르면 고런은 ‘간결한 맞춤화’에 목표를 두는데, SciPY 및 R의 패턴을 채택해 라이브러리에 직접 불러와 처리할 수 있다는 점에서 간단하다. 맞춤화는 특정 애플리케이션에서 MIT의 라이선스를 받은 오픈소스, 데이터 구조를 쉽게 확장할 수 있다는 점에 근간하고 있다.
    한편, 위트웍스는 쇼군(Shogun) 라이브러리에도 포함된 Vowpal Wabbit 라이브러리용 고 래퍼(Go Wrapper)도 개발했다.


    Weka
    뉴질랜드 와이카토 대학교(University of Waikato)가 개발한 Weka는 데이터 마이닝에 목적을 둔 자바 기계 학습 알고리즘을 집대성했다. 이 GNU GPLv3-라이선스 라이브러리에는 기능성을 확대할 수 있는 패키지 시스템과 공식, 비공식 패키지가 포함돼 있다. Weka에는 소프트웨어와 사용 기법을 설명한 책도 들어있다. 앞서 개념을 파악하고 싶은 사람들에게 도움이 되는 내용이다.
    Weka는 하둡 사용자를 주 대상으로 하고 있지는 않지만, 최신 Weka 버전용 래퍼 덕분에 하둡에서도 이용할 수 있다. 스파크는 지원하지 않고, 맵리듀스만 지원한다. Clojure 사용자 또한 Clj-ml 라이브러리로 Weka를 이용할 수 있다.


    CUDA-Convnet
    현재 대다수는 GPU가 특정 기능 구현에서는 CPU보다 성능이 앞선다는 사실을 안다. 그렇지만 GPU 가속화 기능이라는 장점을 이용하도록 프로그래밍을 해야 애플리케이션이 해당 기능을 이점으로 활용할 수 있다. CUDA-Convnet는 신경망 애플리케이션을 대상으로 한 기계 학습 라이브러리다. C++에 기반을 두고 있으며, 엔비디아의 CUDA GPU 프로세싱 기술을 이용한다(CUDA 보드에는 Fermi가 있어야 한다). C++가 아닌 파이썬을 사용하고 있다면, 결과물인 신경망을 파이썬 객체로 저장하면 된다. 초기 버전은 더 이상 개발되지 않는데, CUDA-Convnet2 버전으로 다시 탄생했기 때문이다. 여러 GPU와 케플러 GPU의 지원을 받는 것이 특징이다. 유사한 프로젝트인 Vulpes는 F#로 개발됐으며, 통상적으로는 닷넷 프레임워크와 연동된다.


    ConvNetJS
    ConvNetJS는 이름이 암시하듯, 자바스크립트 기반의 신경망 기계 학습 라이브러리를 제공하는데, 브라우저를 데이터 워크벤치로 사용하게끔 도와준다. Node.js를 이용하는 사람들을 위한 NPM 버전도 있다. 라이브러리는 자바스크립트의 비동기성을 적절히 활용할 수 있도록 설계됐다. 예를 들어, 학습이 완료되면, 실행 콜백을 내보낼 수 있다. 이 라이브러리에는 다양한 데모 예제도 포함돼 있다.