본문 바로가기

Data Science

(158)
[NLP] Collaborative Filtering(Recommendation) 이번 포스팅에서는 저번 시간의 컨텐츠 기반 필터링(추천) 방법과는 다른 추천 알고리즘인 협업 필터링(Collaborative Filtering)에 대해 알아보고 코드로 구현하는 방법에 대해 알아본다. 협업 필터링은 사용자 또는 아이템(컨텐츠) 기반인 최근접 이웃 필터링과 잠재(Latent)요인 기반 필터링으로 나뉘어 진다. 그러므로 각 개념을 설명하면서 코드로 구현하는 방법 순으로 전개된다. 목차는 다음과 같다. 1. 협업 필터링의 종류 2. 최근접 이웃(Nearest-Neighbor) 기반 필터링 3 최근접 이웃 기반 필터링 구현하기 4. 잠재(Latent)요인 기반 필터링 5. 잠재요인 기반 필터링 구현하기 1. 협업 필터링의 종류 먼저 협업 필터링(Collaborative Filtering)은 다음..
[NLP] Contents-based Recommendation(컨텐츠 기반 추천) 이번에 다룰 주제는 2개의 포스팅으로 분리해서 작성해 볼 예정이다. 바로 자연어 처리(NLP)를 활용한 추천 시스템 구현이다. 추천 시스템은 우리의 일상에 매우 가까이에서 적용되고 있다. 대표적으로 YouTube나 Netflix와 같은 영상 컨텐츠를 담은 기업뿐만 아니라 국내외 E-commerce 기업에서도 추천 알고리즘을 상당히 효과적으로 활용하고 있다. YouTube에서의 '맞춤 동영상' 이나 E-commerce 홈페이지의 "이 A라는 상품을 구매한 고객들은 B라는 상품도 함께 구매합니다" 라는 문구를 보았을 것이다. 이런 것들이 바로 추천 알고리즘을 적용한 예시이다. 추천 알고리즘에도 종류가 몇 가지 존재한다. 크게 '컨텐츠 기반 필터링' 과 '협업 필터링'으로 나뉘어 진다. '협업 필터링'에서는 ..
[NLP] 문서 군집화(Clustering)와 문서간 유사도(Similarity) 측정하기 이번 포스팅에서는 여러가지의 문서들을 군집화시켜보고 특정 하나의 문서가 다른 문서들간의 유사도를 측정해보는 방법에 대해서 알아보려고 한다. 군집분석은 비지도 학습으로 비슷한 데이터들끼리 서로 군집을 이루는 것을 말한다. 이러한 방법은 텍스트로 이루어진 문서 데이터에도 적용이 된다. 단어 발생 빈도수에 기반하는 BOW(Bag Of Words) 방식을 이용해 Feature(문서들을 이루고 있는 단어들)를 벡터화시키거나 단어들간의 의미 관계 즉, 단어 벡터들간의 방향을 고려해 Word embedding을 통해 벡터화 시킨다. 이번 포스팅에서는 BOW에 기반한 Tf-idf 방법을 사용한다. 다른 BOW 방식인 Count Vectorizer는 단순히 그저 단어 발생 빈도수에만 초점을 맞추기 때문에 여러가지 문서들..
[NLP] LDA를 활용한 Topic Modeling 구현하기 이번 포스팅에서는 주어진 수많은 단어들을 기반으로 토픽(Topic) 별 단어들의 분포를 확인하고 또 문서(Document)별 토픽들의 분포를 계산해서 문서들의 주제가 무엇인지 예측하는 Topic Modeling에 대해 다루려고 한다. 해당 포스팅은 토픽모델링에 대한 개념적인 깊이보다 파이썬으로 구현하는 내용에 초점이 맞추어져 있으므로 토픽 모델링, 그중에서도 LDA(Latent Dirichlet Allocation)의 이론에 대해 알고 싶다면 여기를 참고하자. 목차는 다음과 같다. 1. Topic Modeling의 종류 2. Python으로 LDA 구현해보기 1. Topic Modeling의 종류 토픽 모델링은 크게 확률에 기반한 모델과 행렬분해에 기반한 모델 2가지로 나뉘어 진다. 간단하게 종류에 대해..
[NLP] 텍스트 분류와 감성(Sentiment)분석 구현하기 이번 포스팅에서는 sklearn의 내장된 데이터와 Kaggle 데이터를 활용해 뉴스 기사 데이터들의 카테고리를 분석하는 텍스트 분류, 그리고 Review의 감성(긍정, 부정)을 분류해보는 실습내용에 대해 소개하려고 한다. 텍스트 데이터 분석, 모델링 과정 프로세스에 대해서는 여기를 참고하자. 목차는 다음과 같다. 1. 뉴스 카테고리 분류하기 2. 리뷰 감성 분류하기 1. 뉴스 카테고리 분류하기 네이버, 다음, 그리고 여러 종류의 언론사 각각의 홈페이지를 방문해 보면 다양한 카테고리의 뉴스가 존재하는 것을 알 수 있다. 그리고 각 뉴스 기사의 카테고리를 지정하는 기준은 해당 뉴스의 내용이 기반이 된다. 그렇다면 뉴스 내용의 텍스트를 기반으로 해당 뉴스의 카테고리를 예측할 수 있지 않을까? 이러한 예시 이외..
[NLP] 텍스트를 이용한 머신러닝 프로세스에 대한 이해 새로운 포스팅 카테고리를 추가했다. 주제는 NLP(Natural Language Processing)이라고 불리는 '자연어 처리'이다. 자연어 처리는 텍스트 분류, 감성분석, 텍스트 요약, 텍스트 군집화 또는 유사도 측정과 같이 여러가지 분야에서 널리 사용되고 있다. 필자는 자연어 처리에 대한 기본적인 사전 지식이 없었기 때문에 개인적인 기회를 통해서 공부해야 했다. 그리고 우연히 마주했던 Google Assistant NLP팀의 언어학자로 일하시는 박지호님의 NLP Tutorial을 통해서 자연어처리를 입문했다. 해당 블로그를 꾸준히 구독하고 있고 글을 읽으면서 습득한 내용을 따로 기록하고 있다. 추후에 자연어처리의 기본에 대한 내용을 꼭 내 블로그에도 포스팅할 예정이다. 이번 글에서는 텍스트 형식의 ..
[ML] Mean Shift, DBSCAN, and Silhouette metric 이번 포스팅에서는 군집화 모델인 Mean Shift와 DBSCAN에 대해 알아보고 군집화 모델의 성능을 평가하는 지표인 Silhouette metric에 대해서 소개하려한다. 그리고 이 두 가지 모델들과 평가지표를 Scikit-learn을 이용해서 간단하게 구현해보는 시간도 갖는다. 목차는 다음과 같다. 1. Mean Shift 2. DBSCAN(Density Based Spatial Clustering of Application with Noise) 3. Silhouette metric for clustering 1. Mean Shift Mean Shift는 Non-parametric(비모수 방법론) 모델이며 KDE(Kernel Density Estimation)을 이용하여 개별 데이터 포인트들이 데이..
[ML] K-means 와 GMM(Gaussian Mixture Model) 구현하기 이번 포스팅에서는 군집화 모델 중 K-means와 GMM을 Scikit-learn을 이용해서 구현해보려 한다. K-means는 대표적인 Semi-parametric 모델이며 GMM은 Parametric 모델이라는 점에서 두 개의 모델 간에 차이점이 존재한다. 이 각 모델들에 대한 자세한 이론적인 설명이 알고 싶다면 K-means는 여기, GMM은 여기를 참고하자. 1. K-means K-means 알고리즘은 쉽고 간결하며 대용량 데이터에도 활용이 가능하다. 하지만 거리 기반 알고리즘으로 feature의 개수가 너무 많아진다면 군집화의 성능이 저하된다. 따라서 경우에 따라 PCA로 차원을 축소하여 적용하기도 한다. 또한 반복적인(iterative) 알고리즘이기 때문에 반복 횟수가 급격히 많아질 경우 학습 ..
[ML] LDA(선형판별분석)와 SVD(특이값 분할) 구현하기 이번 포스팅에서는 Linear Discriminant Analysis(LDA)인 선형판별분석과 Singular Value Decomposition(SVD)인 특이값 분할을 어떻게 구현할 수 있는지에 대해 살펴보려고 한다. 본 포스팅에서는 개념에 대해서는 간단히 다루므로 보다 깊숙한 개념은 여기를 참고하자. 목차는 다음과 같다. 1. LDA 구현해보기 2. SVD 구현해보기 1. LDA 구현해보기 LDA는 PCA와 비슷하게 입력 데이터셋을 저차원 공간으로 축소하는 기법이다. 하지만 PCA와는 다르게 LDA는 지도학습의 분류문제를 해결하기 수월하도록 클래스를 가장 잘 분류할 수 있는 선형을 최대한 잘 유지하는 축을 찾아준다는 차이점이 있다. LDA에 대한 목적함수나 수식에 대해서는 해당링크를 참고하자. LD..
[ML] Scikit-learn을 이용한 PCA 구현하기 이번 포스팅에서는 PCA에 대해 간단하게 알아보고 언제 PCA를 사용해야할지, 그리고 Scikit-learn 라이브러리를 이용해 PCA를 간단하게 구현해보는 내용에 대해 소개하려 한다. PCA에 대한 자세한 이론은 여기를 참고하자. 목차는 다음과 같다. 1. PCA란? 2. Scikit-learn 이용해 PCA 구현하기 1. PCA란? PCA란, Principal Components Analysis로 한국어로는 '주성분 분석'이다. PCA는 feature 개수가 너무 많을 때, 여러 feature들의 내재된(latent) feature를 추출하는 것이다. PCA를 본격적으로 소개하기 전에 feature selection(선택) 과 feature extraction(추출)의 차이점에 대해서 짚고 넘어가자...
[ML] Regression metric과 Polynominal Regression 구현하기 이번 포스팅에서는 회귀분석(Regression) 모델의 성능 평가에 이용되는 평가지표(metric)과 Polynominal Regression(다항 회귀분석)를 Python으로 구현하는 방법에 대해 알아보려고 한다. 목차는 다음과 같다. 1. Metrics for regression 2. Polynominal Regression 1. Metrics for regression 회귀분석은 기본적으로 연속적인 실수값을 예측하는 모델이다. 따라서 회귀분석 모델의 성능을 평가할 때에는 분류 모델의 성능을 평가할 때 사용했던 정확도, 정밀도, 재현율 등 Confusion Matrix같은 지표를 사용해선 안 된다. Regression의 성능을 평가하기 위한 방법으로는 보통 Loss(Error라고도 부르며 예측값에서 ..
[ML] Scikit-learn을 이용한 Feature engineering 구현하기 이번 포스팅에서는 Scikit-learn을 이용해 데이터의 feature를 engineering 하는 간단한 방법들에 대해 알아보려고 한다. 그동안 다양한 feature engineering 방법을 이론적으로나마 배워왔다. 수많은 feature engineering 방법들이 존재하고 지금도 새롭고 놀라운 방법들이 개발되고 있지만 모든 방법을 다루지는 못한다. 따라서 이번 글에서는 간단한 몇 가지 방법들만 살펴보고 코드로 구현해보려고 한다. 소개할 feature engineering 방법들은 다음과 같다. 1. 편향된 분포를 정규분포화 시켜주기 위한 log 변환 2. 이상치(Outlier) 제거하기 3. SMOTE를 이용한 Oversampling 하기 1. 편향된 분포를 정규분포화 시켜주기 위한 log 변..
[ML] Scikit-learn을 이용한 Stacking 구현하기 이번 포스팅에서는 저번 시간에 다루었던 Ensemble(앙상블)모델의 연장선인 Stacking에 대해 알아보려고 한다. Stacking에 대한 개념과 동작 방법에 대해 시각적으로 알아보고 이를 Python과 Scikit-learn을 이용해 직접 구현하는 방법에 대해 살펴본다. 목차는 다음과 같다. 1. Stacking이란? 2. Stacking이 동작하는 방식 3. Scikit-learn을 이용해 Stacking을 구현해보기 1. Stacking이란? Stacking의 'Stack'의 사전적 의미는 '쌓다' 정도로 볼 수 있다. 컴퓨터의 자료구조 중 하나로서 '스택'이라는 개념도 존재하는데, 의미가 완전하게 동일하진 않지만 '쌓다' 라는 의미의 관점에서는 통한다고 볼 수 있을 것 같다.(지극히 개인적인 ..
[ML] Scikit-learn을 이용해 Ensemble 모델들 구현하기 이번 포스팅에서는 Scikit-learn library를 이용해서 여러가지 Ensemble 모델들을 구현해보는 방법에 대해서 알아보려고 한다. 해당 포스팅에서는 Ensemble에 대한 이론적인 부분은 주요내용으로 다루지 않으므로 이론적인 내용에 대해 궁금하다면 여기를 참고하자. 구현해볼 여러가지 앙상블 모델들에 대한 목차는 다음과 같다. 1. Simple Voting 2. Bagging - Random Forest 3. Boosting - GBM 4. Boosting - XGBoost 5. Boosting - LightGBM 1. Simple Voting Voting이라는 방법은 앙상블 모델의 기본적인 방법론 중 하나라고 볼 수 있다. 이 Voting도 구체적으로는 2가지 종류로 나누어 질 수 있다. H..
[ML] Precision 과 Recall의 Trade-off, 그리고 ROC Curve 이번 포스팅에서는 분류 문제 성능을 평가하는 대표적인 metric으로서 Precision과 Recall에 대해 알아보고 이 둘 간의 관계, 그리고 ROC Curve와 이를 Score로 환산한 AUC에 대해서 알아보려고 한다. 그리고 Scikit-learn을 통해서 구현하는 방법에 대해서도 소개한다. 목차는 다음과 같다. 1. Precision 과 Recall 2. Precision과 Recall의 Trade-off 3. F1 - Score 4. ROC Curve와 AUC 본격적인 내용에 들어가기 앞서 Cofusion Matrix에 대한 사전적인 지식이 필요하다. 이에 대한 개념을 모른다면 다음의 포스팅 내용들 중 Confusion Matrix에 대한 내용을 숙지하자. #https://techblog-hi..
[ML] Cross validation과 GridSearch하는 방법 이번 포스팅에서는 머신러닝 모델의 성능을 중간에 평가하는 즉, 해당 모델을 Test 데이터로 검증하기 전에 모델의 성능을 중간점검 하는 하나의 객관적인 방법으로서 교차 검증(Cross validation)을 Scikit-learn 라이브러리를 이용해서 어떻게 해보는지에 대해 다루려고 한다. 그리고 모델링의 가장 최적의 하이퍼파라미터 값을 찾기 위해 일일이 모두 다 해보는 방법인 GridSearch를 코드상에서 어떻게 수행할 수 있는지 소개한다. 여기서 소개할 교차 검증방법으로는 일반적으로 사용되는 K-Fold 방법과 Stratified K-Fold를 소개한다. 그리고 앞의 교차 검증방법을 하나의 함수로 단 한번에 해결할 수 있는 Scikit-learn 라이브러리의 cross_val_score함수에 대해 ..
[ML] How to encode categorical variables 이번 포스팅에서는 Categorical variables 즉, 범주형 변수들을 인코딩하는 여러가지 방법에 대해서 알아보려고 한다. 해당 내용은 포스팅 하단의 래퍼런스를 통해 학습했고 해당 래퍼런스에서 다루지 않는 다른 인코딩 방식이 존재한다면 댓글로 달아주시면 너무 감사할 것 같다. 범주형 자료에는 순서가 없는 명목형(nominal) 자료와 순서가 있는 순서형(ordinal) 자료로 나뉜다. 명목형 자료의 대표적인 사례로는 혈액형, 지역, 직업, 학교 등을 들 수 있다. 반면에 순서형 자료의 예시로는 생활수준, 만족도를 대표적으로 들 수 있겠다. 이러한 범주형 값들이 들어있는 데이터를 머신러닝, 딥러닝 모델의 input 데이터로 집어넣으려고 할 때 문자열 상태 그대로 모델에 넣을 수가 없다. 이러한 값들..
ARMIA and SARIMA Models 이번 포스팅에서는 저번에 알아보았던 AR, MA, ARMA에 이어 차분을 추가한 ARIMA 모델과 계절적 AIRMA 모델인 SARIMA 모델에 대해 알아보려고 한다.(여기서 S는 Seasonal을 의미한다.) 목차는 다음과 같다. 1. ARIMA 모델 2. SARIMA 모델 3. 시계열 데이터의 예측력 검정방법 1. ARIMA 모델 ARIMA 모델은 기존에 배웠던 ARMA(AR+MA)모델에 차분을 추가해준 모델을 의미한다. 여기서 차분을 해주는 이유가 무엇일까? 바로 비정상성의 데이터를 정상화 시켜주기 위함이다. ARIMA 모델의 수학적 수식은 다음과 같다. 위 수식에서 C라는 상수값이 존재하는데, 이는 차분(d)의 값에 따라 C값이 달라지게 된다. d = 0 (차분을 하지 않을 때), 단순히 평균(me..
AR(AutoRegressive), MA(Moving Average), ARMA Models 이번 포스팅에서는 자기회귀 모형인 AR, 이동평균 모형인 MA, 이 두개를 합친 ARMA모형에 대해서 알아보려고 한다. 목차는 다음과 같다. 1. 모형식별을 위한 Correlogram 2. AR 모형 3. MA 모형 4. ARMA 모형 1. 모형식별을 위한 Correlogram ACF, PACF 함수 형태를 보고 모형을 식별할 때 사용하는 유용한 Correlogram이 있다. 이 표는 시차 k가 달라짐에 따라 ACF, PACF 함수값이 어떻게 달라지는지를 나타낸 것이며 한국어로는 자기상관성도표라고 부른다. 2. AR 모형 AR 모형은 자기회귀(AutoRegressive)모형이다. AR 모형에 적합한 시계열 데이터의 ACF, PACF 함수 그래프 형태는 위 Correlogram 도표에서 빨간색 네모칸 쳐진..
Box-Jenkins 방법론과 ARIMA 모델의 기초 한 학기 동안 시계열 분석이라는 수업이 끝나고 배운 내용 중에 기록하지 못했던 ARIMA 모델에 대한 내용을 뒤늦게 포스팅 해보려 한다. 이번 포스팅에서는 시계열 모형의 통계이론 체계를 구축하여 모델의 적합성을 살펴보는 Box-Jenkins 방법론이라는 것과 ARIMA 모델에 대한 기초에 대해서 알아보려 한다. 목차는 다음과 같다. 1. ARIMA 모델이란 무엇인가? 2. Box-Jenkins 방법론 절차 3. 백색 잡음(White Noise) 4. 확률 보행과정(Random Walk Process) 5. 정상시계열을 판단하는 방법 1. ARIMA 모델이란 무엇인가? 우선 ARIMA를 풀어 쓴다면 Auto Regressive Integrated Moving Average이다. ARIMA 모델은 확률에 기..