본문 바로가기

Data Science/Machine Learning 구현

(16)
[ML] Tensorflow Window Dataset 객체로 시계열 예측 구현하기 이번 포스팅에서는 Tensorflow 2.x 버전에서 제공하는 Window Dataset 객체로 시계열 순환신경망을 구현하는 방법에 대해 알아본다. 최근에 수요 예측 알고리즘 대회에 참가하면서 Tensorflow를 활용해 딥러닝으로 시계열 예측을 시도했는데, 구현하는 과정이 순조롭지 않았다. 레퍼런스 문서를 Tensorflow 공식 문서를 활용해 구현하려 했지만 개인적으로 이해하기가 매우 난해했다. 너무 작성자 위주로 작성되어 있다고 해야 할까? 그러던 중 유용한 유투브 강의를 참고하면서 tf.data.Dataset 객체를 활용해 시계열 Window 데이터셋을 만드는 데 성공했다. 그리고 시계열 데이터를 예측하는 데 있어서 문제에 따라 예측하는 유형이 매우 다양하다는 것을 느꼈다. 그래서 이번 기회에 알..
[ML] Tensorflow로 Pretrained Model Fine Tuning 하기 🔊 해당 포스팅은 권철민님의 CNN Fundamental 완벽 가이드 강의를 듣고 난 후 배운 내용을 정리하고자 하는 목적 하에 작성되는 포스팅입니다. 하단의 포스팅에서 사용되는 실습 코드 및 자료는 필자가 직접 재구성한 자료이며 권철민님의 자료를 그대로 인용하지 않았음을 필히 알려드립니다. 이번 포스팅에서는 Tensorflow를 활용해 Pretrained Model을 로드하고 우리가 갖고 있는 데이터로 Pretrained Model을 추가로 학습시키는 Fine Tuning하는 방법에 대해 알아보자. 1. Fine Tuning 이란? 먼저 Fine Tuning에 대해 간단히 알아보자. Fine Tuning은 미리 수많은 데이터로 학습된 전이 학습 모델을 가져와서 우리 데이터를 추가로 학습시켜서 전이 학습..
[ML] Tensorflow.keras의 flow_from_directory, flow_from_dataframe 사용법 🔊 해당 포스팅은 권철민님의 CNN Fundamental 완벽 가이드 강의를 듣고 난 후 배운 내용을 정리하고자 하는 목적 하에 작성되는 포스팅입니다. 하단의 포스팅에서 사용되는 실습 코드 및 자료는 필자가 직접 재구성한 자료이며 권철민님의 자료를 그대로 인용하지 않았음을 필히 알려드립니다. 저번 포스팅에서는Tensorflow.keras의 ImageDataGenerator에 대해 배워보았다. ImageDataGenerator가 어떻게 이미지 데이터 소스로부터 데이터를 얻어와 이미지를 전처리 및 증강 기법을 적용하고 모델에 어떤 형태로 입력으로 넣어주는지에 대해 알아보았었다. 이번 포스팅에서는 그 단계 중에 ImageDataGenerator 객체를 생성한 후 Numpy Array Iterator로 생성 및..
[ML] Tensorflow.Keras로 ImageDataGenerator 사용해보기 🔊 해당 포스팅은 권철민님의 CNN Fundamental 완벽 가이드 강의를 듣고 난 후 배운 내용을 정리하고자 하는 목적 하에 작성되는 포스팅입니다. 하단의 포스팅에서 사용되는 실습 코드 및 자료는 필자가 직접 재구성한 자료이며 권철민님의 자료를 그대로 인용하지 않았음을 필히 알려드립니다. 최근에 텐서플로우로 CNN의 기초를 다시 정립하고자 해당 강의를 듣게 되었다. 그러던 중 몰랐다가 알게 된 내용을 정리해서 재구성하여 배운 내용에 대해 기록하고자 한다. 이번 포스팅에서는 이미지 데이터를 증강하는 기법 즉 , Data Augmentation을 지원하는 Tensorflow.keras의 ImageDataGenerator에 대해 알아보고 CIFAR10 이미지 데이터로 실습코드까지 적용해보고자 한다. 1. ..
[ML] Tensorflow를 이용해 Deep Neural Network 구현하기 🔉해당 자료 내용은 순천향대학교 빅데이터공학과 김정현 교수님의 수업자료에 기반하였으며 수업자료의 저작권 문제로 인해 수업자료를 직접 이용하지 않고 수업자료의 내용을 참고하여 본인이 직접 작성하였으므로 저작권 문제가 발생하지 않음을 필히 알려드립니다. 이번 포스팅에서는 그동안 Tensorflow에서 구현해보았던 단층 퍼셉트론이 아닌 2개 이상의 층(layer)으로 구성된 다층 퍼셉트론, 이른바 '딥러닝'이라고 불리는 모델을 구현해보려 한다. 물론 여기서 딥(Deep)하다는 것이 특정 몇 개 이상의 층으로 구성되어야 딥러닝이라고 할 수 있는 절대적 기준이 있는 것은 아니다. 하지만 아직 텐서플로우를 활용해 딥러닝을 구현해보는 기초적인 과정이므로 layer가 2개일 경우만을 소개한다는 점 참고해 주길 바란다...
[ML] Tensorflow를 이용해 (Binary and Multi)Logistic Regression 구현하기 🔉해당 자료 내용은 순천향대학교 빅데이터공학과 김정현 교수님의 수업자료에 기반하였으며 수업자료의 저작권 문제로 인해 수업자료를 직접 이용하지 않고 수업자료의 내용을 참고하여 본인이 직접 작성하였으므로 저작권 문제가 발생하지 않음을 필히 알려드립니다. 이번 포스팅에서는 저번 시간인 Tensorflow를 이용한 뉴럴네트워크 구현하기에서 배웠던 기본 문법과 구현 과정을 기반으로 회귀 모델이지만 분류 문제해결에 사용되는 Logistic Regression 모델을 구현해보려고 한다. Logistic Regression에서도 이진(Binary) 분류인지 다중(Multi)분류인지에 따라 사용하는 활성함수의 종류가 다르다. 이제 예시 데이터를 사용해서 각 모델을 텐서플로우를 이용해 구현해보자. 1. Logistic R..
[ML] Tensorflow를 이용해 Neural Network 구현하기 🔉해당 자료 내용은 순천향대학교 빅데이터공학과 김정현 교수님의 수업자료에 기반하였으며 수업자료의 저작권 문제로 인해 수업자료를 직접 이용하지 않고 수업자료의 내용을 참고하여 본인이 직접 작성하였으므로 저작권 문제가 발생하지 않음을 필히 알려드립니다. 이번 대학교 4학년 마지막 학기에 '딥러닝과 응용'이라는 수업을 듣게 됬다. 1학기에 들었던 수업인 머신러닝의 내용을 기초로 하지만 딥러닝 관련 모델에 수업 내용이 집중될 것 같다. 딥러닝을 모델하는 여러가지 언어와 툴이 있지만 해당 수업에서는 Python을 이용한 Tensorflow 1.x 버전을 사용하여 진행된다. 앞으로 이 수업에 관련된 포스팅은 이론과 실습 두 가지를 동시에 하거나 번갈아가면서 글을 게시할 예정이다. 또한 현재 Tensorflow 2...
[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함수에 대해 ..