본문 바로가기

분류 전체보기

(174)
케라스 실습] tf.keras API를 사용한 다층 신경망 훈련 기본 tf.keras 고수준 API를 어떻게 신경망을 훈련하는지 알아보겠습니다. 1. 훈련 데이터 준비 import struct import os import numpy as np import tensorflow as tf def load_mnist(path, kind='train'): """`path`에서 MNIST 데이터 적재하기""" labels_path = os.path.join(path, '%s-labels-idx1-ubyte/' % kind) images_path = os.path.join(path, '%s-images-idx3-ubyte/' % kind) labels_file = ('%s-labels.idx1-ubyte' % kind) images_file = ('%s-images.idx3-uby..
텐서플로우 #1] 텐서플로우의 시작과 배열 구조 다루기 일반적인 내용은 넘어가겠습니다. 텐서플로는 노드 집합으로 구성된 계산 그래프를 바탕으로 합니다. 각 노드는 0개 이상의 입력이나 출력을 가지는 연산을 나타냅니다. 계산 그래프의 에지를 따라 이동하는 값을 텐서(tensor)라고 합니다. 텐서플로 1.5.0 버전에는 계산 그래프를 만들지 않고 텐서를 즉시 평가할 수 있는 즉시 실행(eager execution) 기능이 추가되었습니다. 텐서플로 2.x에서는 즉시 실행 모드가 기본으로 활성화되어 있어서 텐서 값을 바로 확인할 수 있습니다. 이 절에서는 저수준 API를 사용하여 텐서플로 1.x와 2.x 차이를 알아보겠습니다. 텐서는 스칼라(sclar), 벡터, 행렬 등이 일반화된 것으로 생각할 수 있습니다. 구체적으로 말해서 스칼라는 랭크 0 텐서로 정의합니다...
머신러닝 강좌 #26] 규제선형 모델 - 릿지, 라쏘, 엘라스틱넷 규제선형 모델에 대해서는 하기 3가지 Step을 사용하여 학습합니다. Regulation(규제) 선형 모델에 대한 개요 - 릿지(Ridge), 라쏘(Lasso), 엘라스틱(Elastic Net) 규제 선형 모델의 개요 좋은 머신러닝 회귀 모델은 적절히 데이터에 적합하면서도 회귀 계수가 기하급수적으로 커지는 것을 제어할 수 있어야 합니다. 이전까지 선형 모델의 비용 함수는 RSS를 nicola-ml.tistory.com 릿지 회귀 : Ridge Model 이란? Scikit Learn에서의 실습 릿지 회귀 : Ridge Model 사이킷런에서의 Ridge 클래스의 주요 생성 파라미터는 alpha이며, 릿지 회귀의 alpha L2규제 계수에 해당합니다. from sklearn.model_selection i..
머신러닝 강좌 #25] 다항 회귀와 과(대)적합/과소적합 이해 지금까지 설명한 회귀는 독립변수(feature)와 종속변수(target)의 관계가 일차 방정식 형태로 표현된 회귀였습니다. 하지만 세상의 모든 관계를 직선으로만 표현할 수는 없습니다. 회귀가 독립변수의 단항식이 아닌 2차, 3차 방정식과 같은 다항식으로 표현되는 것을 다항회귀라고 합니다. 한 가지 주의할 것은 다항 회귀를 비선형 회귀로 혼동하기 쉽지만, 다항 회귀는 선형 회귀라는 점입니다. 회귀에서 선형 회귀/비선형 회귀를 나누는 기준은 회귀 계수가 선형/비선형인지에 따른 것이지 독립변수의 선형/비선형 여부와는 무관합니다. 아쉽지만 사이킷런은 다항 회귀를 위한 클래스를 명시적으로 제공하지 않습니다. 대신 다항 회귀 역시 선형 회귀이기 때문에 비선형 함수를 선형 모델에 적용시키는 방법을 사용해 구현합니다...
RNN 실전실습 : 시퀀스 모델링을 위한 다층 RNN구현 : IMDB 영화리뷰 구현 다음은 다대일(Many-to-Once)구조로 감성 분석을 위한 다층 RNN을 구현해 보겠습니다. 1.데이터준비 import pyprind import pandas as pd from string import punctuation import re import numpy as np df = pd.read_csv('./data/aclImdb/movie_data.csv', encoding='utf-8') 데이터프레임 df에는 'review'와 'sentiment' 두 개의 컬럼이 있습니다. RNN모델을 만들어서 시퀀스 단어를 처리하고 마지막에 전체 시퀀스를 0또는 1클래스로 분류하겠습니다. 신경망에 주입할 입력 데이터를 준비하기 위해 텍스트를 정수 값으로 인코딩해야 합니다. 이를 위해 전체 데이터셋에서 고유한..
RNN 지식 : 순환 신경망으로 시퀀스 데이터 모델링 위한 기본 지식 시퀀스 데이터(또는 시퀀스)의 특징에 관해 알아보면서 RNN에 대해 알아보겠습니다. 시퀀스에는 다른 종류의 데이터와는 구별되는 독특한 성질이 있습니다. 시퀀스 데이터를 표현하는 방법과 시퀀스 데이터를 위한 여러 가지 모델을 살펴보겠습니다. 1.시퀀스 데이터 모델링: 순서를 고려한다. 다른 데이터 타입과 다르게 시퀀스는 특별합니다. 시퀀스 원소들은 특정 순서를 가지므로 상호 독립적이지 않기 때문입니다. 일반적으로 지도 학습의 머신 러닝 알고리즘은 입력 데이터가 독립 동일 분포라고 가정합니다. 예를 들어 n개의 데이터 샘플이 있을때 머신 러닝 알고리즘을 훈련하기 위해 데이터를 사용하는 순서는 상관없습니다. 시퀀스 데이터를 다룰 때는 더 이상 이런 가정이 유효하지 않습니다. 시퀀스는 정의 자체가 순서를 고려한..
인공신경망관련 용어정리 : 퍼셉트론, MLP, Feed Forward, Back Propagation, 활성 함수, 시그모이드 함수, Gradient Descent Method 퍼셉트론 퍼셉트론은 1957년에 개발된 최초의 인공지능 모형입니다. Feed-Forward Network모형의 가장 간단한 형태이며 선형 분류(Linear Classfier)모형의 형태를 띠고 있습니다. Input과 Weight가 선형 결합의 형태를 띠는 것을 알 수 있습니다. 이 선형 결합의 값에 특정 임곗값의 초과 여부를 판단하는 함수를 적용합니다. 이 출력 값이 0보다 크면 1, 작으면 -1로 결괏값을 내보내 분류하는 모형을 '퍼셉트론'이라 합니다. 여기서 임곗값의 초과 여부를 판단하는 함수를 '활성화 함수(Activation Function)'라 합니다. 가장 기본적인 Activation함수는 Step Function으로 Input값이 0이상이면 1, 이상이 아니면 0을 출력하도록 하는 함수입니다..
머신러닝 강좌 #24] 사이킷런 LinearRegression을 이용한 보스턴 주택 가격 예측 사이킷런의 linear_models모듈은 매우 다양한 종류의 선형 기반 회귀를 클래스로 구현해 제공합니다. 선형 모델 중 규제가 적용되지 않은 선형 회귀를 사이킷런에서 구현한 클래스인 LinearRegression을 이용해 보스턴 주택 가격 예측 회귀를 구현합니다. LinearRegression 클래스 - Ordinary Least Squares LinearRegression 클래스는 예측값과 실제 값의 RSS(Residual Sum of Squares)를 최소화해 OLS(Ordinary Least Squares)추정 방식으로 구현한 클래스입니다. LinearRegression클래스는 fit()메소드로 X, y배열을 입력 받으면 회귀 계수(Coefficients)인 W를 coef_속성에 저장합니다. 관련..
머신러닝 강좌 #23] 회귀 : Regression, 단순 선형 회귀를 통한 회귀 이해 그리고 경사하강법 (GD)에대해 회귀란? 회귀(Regression)분석은 데이터 값이 평균과 같은 일정한 값으로 돌아가려는 경향을 이용한 통계학 기법입니다. 통계학 용어를 빌리자면 회귀는 여러 개의 독립변수와 한 개의 종속변수 간의 상관관계를 모델링하는 기법을 통칭합니다. 독립변수의 값에 영향을 미치는 회귀 계수(Regression Coefficients)입니다. 머신 러닝 관점에서 보면 독립변수는 피처에 해당되며 종속변수는 결정 값입니다. 머신러닝 회귀 예측의 핵심은 주어진 피처와 결정 값 데이터 기반에서 학습을 통해 최적의 회귀 계수를 찾아내는 것입니다. 회귀 계수가 선형이냐 아니냐에 따라 선형 회귀와 비선형 회귀로 나눌 수 있습니다. 그리고 독립변수의 개수가 한 개인지 여러 개인지에 따라 단일 회귀, 다중 회귀로 나뉩니다. 지도학..
머신러닝 강좌 #22] SMOTE, LightGBM을 이용한 예측 분류 실습 - 캐글 신용카드 사기 검출 신용카드 데이터 세트를 이용한 검출 분류 실습을 해보겠습니다. 해당 데이터 세트의 레이블인 Class속성은 매우 불균형한 분포를 가지고 있습니다. Class는 0과 1로 분류되는데 0이 사기가 아닌 정상적인 신용카드 트랜잭션 데이터, 1은 신용카드 사기 트랜잭션을 의미합니다. 전체 데이터의 약 0.172%만이 레이블 값이 1, 즉 사기 트랜잭션입니다. 일반적으로 사기 검출이나 이상 검출과 같은 데이터 세트는 이처럼 레이블 값이 극도로 불균형한 분포를 가지기 쉽습니다. 왜냐하면 사기와 같은 이상 현상은 전체 데이터에서 차지하는 비중이 매우 적을 수밖에 없기 때문입니다. 언더 샘플링과 오버 샘플링의 이해 레이블이 불균형한 분포를 가진 데이터 세트를 학습시킬 때 예측 성능의 문제가 발생할 수 있는데, 이는 이..
머신러닝 강좌 #21] 분류 XGBoost를 이용한 고객 만족 예측 캐글의 산탄데르 고객 만족 데이터 세트에 대해서 고객 만족 여부를 XGBoost와 LightGBM을 활용해 예측해 보겠습니다. 클레스 레이블 명은 TARGET이며, 이 값이 1이면 불문을 가진 고객, 0이면 만족한 고객입니다. 모델의 성능 평가는 ROC-AUC(ROC 곡선 영역)로 평가합니다. 대부분이 만족이고 불만족인 데이터는 일부일 것이기 때문에 정확도 수치보다는 ROC-AUC가 더 적합니다. 데이터를 다운로드 후 TARGET.count()를 확인하면 갯수를 알 수 있습니다. 이를 통해 불만족 비율을 확인해 봅니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib cust_df = pd.re..
머신러닝 강좌 #20] LightGBM에 대한 이해 LightGBM은 XGBoost와 함께 부스팅 계열 알고리즘에서 가장 각광을 받고 있습니다. Xgboost는 매우 뛰어난 부스팅 알고리즘이지만, 여전히 학습 시간이 오래 걸립니다. XGBoost에서 GridSearchCV로 하이퍼 파라미터 튜닝을 수행하다 보면 수행 시간이 너무 오래 걸려서 많은 파라미터를 튜닝하기에 어려움을 겪을 수밖에 없습니다. 물론 GBM보다는 빠르지만, 대용량 데이터의 경우 만족할 만한 학습 성능을 기대하려면 많은 CPU 코어를 가진 시스템에서 높은 병렬도로 학습을 진행해야 합니다. 그렇지 않은 H/W로 학습을 진행할 경우에는 당연히 더 많은 시간이 ㅍㄹ요하기에 불편합이 커질 수밖에 없습니다. LightGBM의 가장 큰 장점은 XGBoost보다 학습에 걸리는 시간이 훨씬 적다는 점..
머신러닝 강좌 #19] XGBoost (eXtra Boost Machine), Scikit Wrapper Class 사이킷런의 프레임워크와 연동하기 위해 사이킷런 전용의 XGBoost 래퍼 클래스를 제공합니다. 사이킷런의 기본 Estimator를 그대로 상속해 만들었기 때문에 다른 Estimator와 동일하게 fit()과 predict()만으로 학습과 예측이 가능하고, GridSearchCV, Pipline 등 사이킷런의 다른 유틸리티를 그대로 사용할 수 있기 때문에 기존의 다른 머신러닝 알고리즘으로 만들어놓은 프로그램이 있더라도 알고리즘 클래스만 XGboost 래퍼 클래스로 바꾸면 기존 프로그램을 그대로 사용할 수 있습니다. 18장에서 설명한 파이썬 래퍼 XGBoost에서 사용한 파라미터는 아래와 같이 변경하여 사용합니다. eta → learning_rate sub_sample → subsample lambda → ..
머신러닝 강좌 #18] XGBoost (eXtra Boost Machine) XGBoost는 트리 기반의 앙상블 학습에서 가장 각광받고 있는 알고리즘 중 하나입니다. 압도적인 수치의 차이는 아니지만, 분류에 있어서 일반적으로 다른 머신러닝보다 뛰어난 예측 성능을 나타냅니다. XGBoost는 GBM에 기반하고 있지만, GBM의 단점인 느린 수행 시간 및 과적합 규제(Regularization) 부재 등의 문제를 해결해서 매우 각광을 받고 있습니다. 특히 XGBoost는 병렬 CPU환경에서 병렬 학습이 가능해 기존 GBM보다 빠르게 학습을 완료할 수 있습니다. 과적합(overfitting)은 기계 학습(machine learning)에서 학습 데이타를 과하게 학습(overfitting)하는 것을 뜻한다. 일반적으로 학습 데이타는 실제 데이타의 부분 집합이므로 학습데이타에 대해서는 오..
머신러닝 강좌 #17] GBM(Gradient Boost Machine) 부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식입니다. 부스팅의 대표적인 구현은 AdaBoost(Adaptive Boosting)와 그래디언트 부스트가 있습니다. 에이다 부스트(AdaBoost)는 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 대표적인 알고리즘입니다. GBM(Gradient Boost Machine)도 에이다부스트와 유사하나, 가중치 업데이트를 경사 하강법(Gradient Descent)을 이용하는 것이 큰 차이입니다. 이 경사 하강법은 머신러닝에서 중요한 기법 중 하나이며 여기에서는 '반복 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 기법' 정도로 이해 바..
머신러닝 강좌 #16] 랜덤 포레스트 - 공공데이터 에어코리아 대기오염정보 API 연결 후 머신러닝 실행하기 이번에는 공공데이터의 대기오염정보 API를 통해 데이터를 가져오고 이를 통해 머신러닝을 통해 데이터를 분석해 보겠습니다. 공공데이터의 "한국환경공단_에어코리아_대기오염정보"를 통해 API를 연결한 후 데이터를 수집합니다. url ="http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty" service_key = "KEYIN SERVICEKEY" base_date = ["종로구"] for i in range(len(base_date)): break; payload = "?serviceKey=" + service_key + "&"+"returnType=xml&numOfRows=100000&pageNo=1&dataTe..