목록머신러닝 (22)
귀퉁이 서재
200개가 넘는 블로그 글을 쓰며 제 이야기를 하는 건 이번이 처음이네요. 제목 그대로 《머신러닝·딥러닝 문제해결 전략》이라는 책을 출간했습니다. 캐글 경진대회로 머신러닝, 딥러닝 문제해결 능력을 키우는 데 도움을 주는 책입니다. 어떤 일이든 일정 수준에 도달하면 최적화된 패턴이 있기 마련이죠. 여러 캐글 수상자의 코드를 리팩터링하며 찾아낸 공통된 패턴과 전략을 이 책에 담았습니다. 엄선한 7가지 캐글 경진대회(머신러닝 대회 4가지와 딥러닝 대회 3가지)로 기본기와 문제해결 능력을 확실하게 기를 수 있을 겁니다. 단순히 코드만 따라 하는 게 아닙니다. 어떤 점을 분석해야 하는지, 분석 결과를 어떻게 적용하는지, 이 기법이 왜 유용한지, 특정 기법을 어떻게 활용하는지까지 점진적으로, 그리고 체계적으로 알려..
이번 장에서는 특이값 분해(SVD)에 대해 알아보겠습니다. 고유값 분해에 대해 알고 있어야 특이값 분해를 이해할 수 있습니다. 고유값 분해를 잘 모르시는 분은 이전 장을 참고해주시기 바랍니다. 이번 장은 MIT Open Course Ware, 파이썬 머신러닝 완벽 가이드 (권철민 저), 다크 프로그래머스 블로그를 참고했습니다. 특이값 분해(Singular Value Decomposition, SVD) 이전 장에서 고유값 분해에 대해 알아봤습니다. 고유값 분해는 정방 행렬(행과 열의 크기가 같은 행렬)에 대해서만 가능하다고 했습니다. 하지만 특이값 분해는 정방 행렬뿐만 아니라 행과 열의 크기가 다른 행렬에 대해서도 적용할 수 있습니다. 즉, 특이값 분해는 모든 직각 행렬에 대해 가능합니다. SVD는 m x..
이번 시간에는 고유값과 고유 벡터, 그리고 고유값 분해에 대해 알아보겠습니다. 참고로 고유값, 고유 벡터를 이해하기 위해서는 행렬의 몇 가지 종류에 대해 알고 있어야 합니다. 본 글의 맨 아래에 부록으로 행렬의 종류에 대해서도 설명해놨으니, 행렬의 종류에 대해 까먹으신 분들은 참고하시면 되겠습니다. 이번 장은 다크 프로그래머스 블로그와 공돌이의 수학정리노트 유튜브를 참고해 작성했습니다. 고유값(eigenvalue)과 고유 벡터(eigenvector) 정방 행렬 A를 선형 변환으로 봤을 때, 선형 변환 A에 의한 변환 결과가 자기 자신의 상수 배가 되는 0이 아닌 벡터를 고유벡터(eigenvector)라고 하고, 이 상수배 값을 고유값(eigenvalue)이라고 합니다. 고유값, 고유 벡터는 정방 행렬에 ..
선형판별분석(Linear Discriminant Analysis, LDA) 선형판별분석(Linear Discriminant Analysis, LDA)는 PCA와 마찬가지로 축소 방법 중 하나입니다. (구글에 LDA라고 치면 토픽 모델링 기법인 Latent Dirichlet Allocation이 주로 나올 겁니다. 이와는 다른 개념인 선형판별분석에 대한 글입니다.) LDA는 PCA와 유사하게 입력 데이터 세트를 저차원 공간으로 투영(project)해 차원을 축소하는 기법이지만, PCA와 다르게 LDA는 지도학습의 분류(Classification)에서 사용됩니다. LDA 원리 PCA는 데이터의 변동성이 최대가 되는 축을 찾아 주성분으로 정했지만, LDA는 데이터의 Target값 클래스끼리 최대한 분리할 수 ..
회귀의 평가를 위한 지표는 실제 값과 회귀 예측값의 차이를 기반으로 합니다. 회귀 평가지표 MAE, MSE, RMSE, MSLE, RMSLE는 값이 작을수록 회귀 성능이 좋은 것입니다. 값이 작을수록 예측값과 실제값의 차이가 없다는 뜻이기 때문입니다. 반면, R² 는 값이 클수록 성능이 좋습니다. 각 회귀 평가지표 별 구하는 공식은 아래와 같습니다. 캐글 회귀 문제에서도 아래의 평가 지표가 자주 사용됩니다. MAE (Mean Absolue Error) 실제 값과 예측 값의 차이를 절댓값으로 변환해 평균한 것 MSE (Mean Squared Error) 실제 값과 예측 값의 차이를 제곱해 평균한 것 RMSE (Root Mean Squared Error) MSE 값은 오류의 제곱을 구하므로 실제 오류 평균보..
앤드류 응 교수가 속해있는 스탠퍼드 ML Group에서 최근 새로운 부스팅 알고리즘을 발표했습니다. 머신러닝의 대가인 앤드류 응 교수의 연구소에서 발표한 것이라 더 신기하고 관심이 갔습니다. 2019년 10월 9일에 발표한 것으로 따끈따끈한 신작입니다. 이름은 NGBoost(Natural Gradient Boost)입니다. Natural Gradient이기 때문에 NGBoost지만 Andrew Ng의 NG를 따서 좀 노린 것 같기도 하네요.. 엔쥐부스트라 읽어야 하지만 많은 혹자들이 앤드류 응 교수의 이름을 따서 응부스트라 읽을 것 같기도 합니다. 어쨌든 다시 본론으로 넘어가면, 지금까지 부스팅 알고리즘은 XGBoost와 LightGBM이 주름잡았습니다. 캐글의 많은 Top Ranker들이 XGBoost..
앙상블 방법론에는 부스팅과 배깅이 있습니다. (머신러닝 - 11. 앙상블 학습 (Ensemble Learning): 배깅(Bagging)과 부스팅(Boosting)) 배깅의 대표적인 모델은 랜덤 포레스트가 있고, 부스팅의 대표적인 모델은 AdaBoost, Gradient Boost등이 있습니다. Gradient Boost의 변형 모델로는 XGBoost, LightGBM, CatBoost가 있습니다. XGBoost, LightGBM, CatBoost은 캐글에서 Top Ranker들이 많이 사용하고 있는 모델입니다. XGBoost, LightGBM, CatBoost에 대해서는 추후 알아보도록 하고, 이번 글에서는 Gradient Boost에 대해 알아보겠습니다. 본 글은 StatQuest의 Gradient ..
본 챕터에서는 부스팅 기법 중 가장 기본이 되는 AdaBoost에 대해 알아보겠습니다. 부스팅에 대해서 잘 모르신다면 '머신러닝 - 11. 앙상블 학습 (Ensemble Learning): 배깅(Bagging)과 부스팅(Boosting)'을 참고해주시기 바랍니다. 아래 AdaBoost는 StatQuest의 AdaBoost, Clearly Explained를 요약 정리한 글입니다. AdaBoost 개요 아래와 같이 노드 하나에 두개의 리프(leaf)를 지닌 트리를 stump라고 합니다. AdaBoost는 아래와 같이 여러 개의 stump로 구성이 되어있습니다. 이를 Forest of stumps라고 합니다. 트리와 다르게 stump는 정확한 분류를 하지 못합니다. 여러 질문을 통해 데이터를 분류하는 트리와..
파라미터와 하이퍼 파라미터는 명확히 다른 개념입니다. 하지만 많은 사람들이 두 단어를 혼용해서 쓰고 있습니다. 특히, 하이퍼 파라미터를 파라미터라 칭하는 오류가 많습니다. 파라미터와 하이퍼 파라미터의 차이에 대해 알아보겠습니다. 본 챕터는 Machine Learning Mastery의 What is the Difference Between a Parameter and a Hyperarameter?를 번역 및 요약한 글입니다. 파라미터(Parameter) 아래는 Machine Learning Mastery에서 기술한 파라미터에 대한 정의 및 특성입니다. A model parameter is a configuration variable that is internal to the model and whose ..
편향-분산 트레이드오프 (Bias-Variance Trade-off)는 지도 학습(Supervised learning)에서 error를 처리할 때 중요하게 생각해야 하는 요소입니다. 우선, 아래 그림을 통해 편향(Bias)과 분산(Variance)의 관계를 살펴보시기 바랍니다. 편향은 예측값이 정답과 얼마나 멀리 떨어져 있는지로 측정할 수 있습니다. 분산은 예측값들끼리의 차이로 측정할 수 있습니다. 편향(Bias) 편향은 지나치게 단순한 모델로 인한 error입니다. 편향이 크면 과소 적합(under-fitting)을 야기합니다. 모델에 편향이 크다는 것은 그 모델이 뭔가 중요한 요소를 놓치고 있다는 뜻입니다. 분산(Variance) 분산은 지나치게 복잡한 모델로 인한 error입니다. 훈련 데이터에 지..
앙상블(Ensemble) 앙상블은 조화 또는 통일을 의미합니다. 어떤 데이터의 값을 예측한다고 할 때, 하나의 모델을 활용합니다. 하지만 여러 개의 모델을 조화롭게 학습시켜 그 모델들의 예측 결과들을 이용한다면 더 정확한 예측값을 구할 수 있을 겁니다. 앙상블 학습은 여러 개의 결정 트리(Decision Tree)를 결합하여 하나의 결정 트리보다 더 좋은 성능을 내는 머신러닝 기법입니다. 앙상블 학습의 핵심은 여러 개의 약 분류기 (Weak Classifier)를 결합하여 강 분류기(Strong Classifier)를 만드는 것입니다. 그리하여 모델의 정확성이 향상됩니다. 앙상블 학습법에는 두 가지가 있습니다. 배깅(Bagging)과 부스팅(Boosting)입니다. 이를 이해하기 위해서는 부트스트랩(Bo..
교차검증 (Cross Validation) 교차검증은 모델을 평가하는 방법 중 하나입니다. 기본적으로 훈련 데이터를 기반으로 모델링을 하고 테스트 데이터로 해당 모델의 성능을 측정합니다. 하지만 테스트 데이터의 수가 적다면 성능 평가의 신뢰성이 떨어집니다. 테스트 데이터를 어떻게 잡느냐에 따라 성능이 상이하게 나온다면 신뢰성이 떨어지겠죠. 그렇다고 훈련 데이터를 줄이고 테스트 데이터를 늘리면 정상적인 학습이 되지 않습니다. 이런 문제점을 해결하기 위한 방법이 교차검증입니다. 훈련 데이터의 종속 변수값을 얼마나 잘 예측하였는지를 나타내는 것을 표본내 성능 검증 (in-sample testing)이라고 하고, 테스트 데이터의 종속 변수값을 얼마나 잘 예측하였는지를 나타내는 것을 표본외 성능 검증 (out-o..
차원 축소와 PCA 차원 축소는 많은 feature로 구성된 다차원 데이터 세트의 차원을 축소해 새로운 차원의 데이터 세트를 생성하는 것입니다. 일반적으로 차원이 증가할수록, 즉 feature가 많아질수록 예측 신뢰도가 떨어지고, 과적합(overfitting)이 발생하고, 개별 feature간의 상관관계가 높을 가능성이 있습니다. PCA(주성분 분석, Principal Component Analysis)는 고차원의 데이터를 저차원의 데이터로 축소시키는 차원 축소 방법 중 하나입니다. (Reference1) 머신러닝을 할 때 훈련 데이터의 feature가 많은 경우가 있습니다. 하지만 모든 feature가 결과에 주요한 영향을 끼치는 것은 아닙니다. 가장 중요한 feature가 있을 것이고, 그다음 중요한..
Feature Scaling Feature Scaling이란 Feature들의 크기, 범위를 정규화시켜주는 것을 말합니다. 예를 하나 들어보겠습니다. A, B, C라는 사람이 있습니다. A는 6.1ft에 140 lbs, B는 5.9ft에 175 lbs, C는 5.2ft에 115 lbs입니다. 단위가 생소하겠지만 피트(ft), 파운드(lbs)로 했습니다. B의 상의 사이즈는 L이고, C의 상의 사이즈는 S라고 할 때, A의 상의 사이즈는 L일까요 S일까요? 직관적으로 봤을 때 L일 것입니다. B보다 몸무게는 작지만 키가 더 크기 때문입니다. 이제 사람이 아니라 컴퓨터에게 A의 상의 사이즈를 예측하는 걸 시켜본다고 합시다. 키와 몸무게에 대한 데이터를 토대로 상의 사이즈를 예측하려면 어떻게 해야 할까요? 가..
K-means clustering은 비지도 학습의 클러스터링 모델 중 하나입니다. 클러스터란 비슷한 특성을 가진 데이터끼리의 묶음입니다. (A cluster refers to a collection of data points aggregated together because of certain similarities) (Reference1) 여기서 말하는 비슷한 특성이란 가까운 위치를 의미합니다. 아래 그림에서는 총 3개의 클러스터가 있습니다. 같은 클러스터끼리 같은 색으로 표시를 해놨습니다. 거리가 서로 가까운 데이터끼리 군집(Cluster)을 이루고 있습니다. 클러스터링이란 어떤 데이터들이 주어졌을 때, 그 데이터들을 클러스터로 그루핑 시켜주는 것을 의미합니다. 위 데이터들은 처음엔 모두 까만 점이었..
K-최근접 이웃(K-Nearest Neighbor, KNN)은 지도 학습 알고리즘 중 하나입니다. 굉장히 직관적이고 간단합니다. 어떤 데이터가 주어지면 그 주변(이웃)의 데이터를 살펴본 뒤 더 많은 데이터가 포함되어 있는 범주로 분류하는 방식입니다. 처음 본 사람에 대해서 잘 모를 때 그 사람의 주변 친구들을 보면 대강 그 사람이 어떤 사람인지 알 수 있다고 하죠. 친구들 중 나쁜(?) 사람들이 많으면 그 사람도 나쁜 사람일 확률이 높고, 좋은 사람들이 많으면 그 사람도 좋은 사람일 확률이 높을 겁니다. 너무 극단적이고 일반화의 오류가 있는 예시긴 하지만 KNN을 이해하는데 도움이 될 것입니다. 아래 그림을 보겠습니다. 새로운 데이터가 주어졌을 때 (빨간 점) 이를 Class A로 분류할지, Class ..
이전 포스트에서 결정 트리(Decision Tree)에 대해 알아봤습니다. 랜덤 포레스트를 배우기 위해서는 우선 결정 트리부터 알아야 합니다. 결정 트리에 대해 잘 모른다면 이전 포스트를 먼저 보고 오시기 바랍니다. (머신러닝 - 4. 결정 트리) 랜덤 포레스트의 개념은 쉽습니다. 랜덤 포레스트의 포레스트는 숲(Forest)입니다. 결정 트리는 트리는 나무(Tree)입니다. 나무가 모여 숲을 이룹니다. 즉, 결정 트리(Decision Tree)가 모여 랜덤 포레스트(Random Forest)를 구성합니다. 결정 트리 하나만으로도 머신러닝을 할 수 있습니다. 하지만 결정 트리의 단점은 훈련 데이터에 오버피팅이 되는 경향이 있다는 것입니다. 여러 개의 결정 트리를 통해 랜덤 포레스트를 만들면 오버피팅 되는 ..
결정 트리(Decision Tree, 의사결정트리, 의사결정나무라고도 함)는 분류(Classification)와 회귀(Regression) 모두 가능한 지도 학습 모델 중 하나입니다. 결정 트리는 스무고개 하듯이 예/아니오 질문을 이어가며 학습합니다. 매, 펭귄, 돌고래, 곰을 구분한다고 생각해봅시다. 매와 펭귄은 날개를 있고, 돌고래와 곰은 날개가 없습니다. '날개가 있나요?'라는 질문을 통해 매, 펭귄 / 돌고래, 곰을 나눌 수 있습니다. 매와 펭귄은 '날 수 있나요?'라는 질문으로 나눌 수 있고, 돌고래와 곰은 '지느러미가 있나요?'라는 질문으로 나눌 수 있습니다. 아래는 결정 트리를 도식화한 것입니다. 이렇게 특정 기준(질문)에 따라 데이터를 구분하는 모델을 결정 트리 모델이라고 합니다. 한번의 ..
sklearn을 활용하여 서포트 벡터 머신(SVM) 실습을 해보겠습니다. 코드 및 데이터는 제 깃헙에 모두 있습니다. 본 포스트의 내용은 OpenCV의 글을 정리한 것입니다. (Reference1) Linearly Separable Data without Noise 먼저 가장 단순한 케이스를 봅시다. Noise가 전혀 없어 아주 깔끔하게 선형 구분이 가능한 데이터입니다. 맨 왼쪽은 전체 데이터, 가운데는 Training Data, 오른쪽은 Test Data입니다. 전체 데이터를 80:20 비율로 Training Data, Test Data로 나눈 겁니다. Noise가 없고 딱 봐도 두 데이터를 선형(직선)으로 구분할 수 있습니다. SVM Classfier로 위 데이터를 구분하는 Decision Bound..
서포트 벡터 머신(SVM, Support Vector Machine)이란 주어진 데이터가 어느 카테고리에 속할지 판단하는 이진 선형 분류 모델입니다. (Reference1) 본 포스트는 Udacity의 SVM 챕터를 정리한 것입니다. 아래 그림을 봅시다. 빨간 X와 파란 O를 구분하는 3개의 선을 나타낸 것입니다. 3개 선 중 어떤 선이 가장 적절하게 두 데이터를 구분한 선일까요? 표시가 된 가운데 선이 가장 적절합니다. 왜 양 옆의 선보다 가운데 선이 두 데이터를 더 적절히 구분하는 선일까요? Margin의 최대화 정답은 가운데 선이 Margin을 최대화하기 때문입니다. Margin이란 선과 가장 가까운 양 옆 데이터와의 거리입니다. 선과 가장 가까운 포인트를 서포트 벡터(Support vector)라..