개발 335

강화학습이란

강화학습(Reinforcement Learning)에 대해서 알아보겠습니다. 얘는 무엇인가에 대해서 알아보겠습니다. 여기 개가 있습니다. 그런데 얘를 보고 "앉아"라고 하면 이렇게 앉는 개가 있다고 해 볼까요? 얘네들한테 앉으라고 했을 때, 먹이를 주면서 "앉아"라는 것을 가르친다고 해보겠습니다. 저 강아지들은 앉아 라는 말은 알아듣지 못합니다. 그러면 어떻게 앉아라는 것을 배우는 것인가? 얘네들이 앉아라고 말 들을 때 움직여도 보고 짖어도 보고 누워도 보는데, 앉을 때 사료(reward)를 줍니다. 이 과정을 통해 강아지들은 "앉아"라고 했을 때 앉으면 먹이를 주는구나 라고 학습을 하게 됩니다. 이런 학습 과정을 강화학습이라고 합니다. 얘를 그림으로 표현해보면 아래와 같습니다. 참조 [1] - http..

개발/AI 정리 2020.01.28

회귀(regression)란 무엇인가?

머신러닝을 하다보니 회귀(regression)이라는 말이 나옵니다. 그런데 회귀를 잘 설명하지 않고 회귀 모델은 어쩌고 하면서 설명을 하기 때문에, 회귀에 대한 개념이 부족합니다. 회귀에 대한 설명을 찾아보면 선현 회귀는 종속 변수 y 와 한 개 이상의 독립 변수 x와의 선형 상관 관계를 모델링하는 회귀분석 기법이다. 한 개의 설명 변수에 기반하는 경우는 단순 선형 회귀, 둘 이상의 설명 변수에 기반한 경우에는 다중 선형 회귀라고 한다. 라고 합니다. 어렵게 말해놨는데, 얘를 쉽게 말하면 뭐라고 할까요? 간단하게 말하면 데이터가 어떤 데이터가 어떠한 함수로부터 생성되어있는가를 알아보는 것입니다. 다시 말하면 변수 사이의 관계를 알아보는 방법입니다. 예를 들면 어느 정도의 오차를 고려하더라도, 아버지의 키..

개발/AI 정리 2020.01.27

XGBoost, LightGBM

LightGBM와 XGBoost에 대해서 알아보겠습니다. XGBoost는 GBM(Gradient Boosting Algorithm)에 기반하지만, GBM의 단점을 보완하여 각광받고 있습니다. XGBoost는 GBM에 기반하고 있지만, GBM의 단점인 느린 수행시간과 과적한 규제 부재 등의 단점을 해결해서 각광받고 있습니다. 일반적으로 분류와 회귀영역에서 뛰어난 예측성능을 발휘하고, 병렬 수행 및 다양한 기능으로 GBM에 비해 빠른 성능을 보장합니다. LightGBM은 XGBoost에 단점을 보완한 러닝 알고리즘입니다. LightGBM에 경우, 학습에 걸리는 시간이 XGBoost보다 적고, 기능상의 다양한 이점이 있습니다. 또한, 카테고리형 피처의 자동변환과 최적분할을 지원합니다. 참고 [1] - http..

앙상블학습, 배깅, 보팅

앙상블이라는 단어를 무슨 요리 프로그램에서 들어본 것 같습니다. 재료들이 앙상블을 이룬다? 뭐 이런말을 할 때 썻던 것 같은데, 이게 머신러닝에서 어떻게 쓰이냐 하면 머신러닝에서 어떤 데이터의 값을 예측한다고 했을 때, 모델을 하나 만들어서 학습시킨 후, 평가를 실행합니다. 하지만 앙상블 학습법에서는 모델을 여러개 학습시켜, 그 모델들을 결합시켜 좋은 결과를 내는 학습 방법입니다. 이 앙상블 헉습법에는 두 가지가 있는데, 배깅과 부스팅입니다. 하나씩 한번 보겠습니다. 배깅(Bagging) 배깅이란 샘플을 여러번 뽑아서, 각 모델을 학습십켜 집계하여 모델을 만드는 방식입니다. 이 것을 그림으로 나타내면 아래와 같습니다. 그럼 부스팅이란 무엇일까요 얘는 성능이 약한 학습기를 여러가 연결하여, 강한 학습기를 ..

결정트리

결정트리(decision tree)에 대해서 알아보겠습니다. 결정트리라는 이름처럼, 결정을 하는 트리입니다. 그러면 얘가 머신러닝과 무슨 상관이 있는가? 라고 하시면, 일단 사람의 의사결정 과정을 생각해보겠습니다. 사람이 어떠한 결정을 하는데에 굉장히 많은 상황이 고려됩니다. 예를 들면, 오늘 비가 올 것 같다 라고 했을 때, 우산을 들고 갈까 말까 고민을 하다보면, 예전에는 이렇게 바람이 불면 비가 왔었다 라던가 일기예보에서 확률이 몇퍼센트라고 했던가 처럼 많은 상황이 고려가 됩니다. 이 과정에서 저희는 정보획득량이라는 것을 알게 됩니다. 정보획득량은 정보함수와 엔트로피로 구성되어 있습니다. 정보획득량은 어떤 사건이 얼마만큼의 정보를 줄 수 있는지를 수치화한 값입니다. 정보함수와 엔트로피는 어렵게 설명..

ROC, AUC

ROC 커브(Receiver Operating Characteristic curve)란 무엇인지 알고 가봅시다. 우리가 만약 암을 진단하는 머신러닝 모델을 만들었습니다. 그런데, 얘가 암이 아닌데 암이라고 진단해버리면, 갑자기 환자는 멀쩡한데 암 환자가 되겠죠? 이런 일이 없을 수는 없지만, 이런 일이 없도록 노력해야 합니다. 때문에 ROC커브를 통해서, 머신러닝 모델의 정확도를 예측할 수 있습니다. ROC Curve에서 아래 보이는 파란색 주황색 초록색 밑의 라인을 AUC라고 하는데, ROC커브에서 AUC면적이 높을 수록, 이 머신러닝 모델의 정확도가 높다고 평가합니다. 참조 [1] - https://losskatsu.github.io/machine-learning/stat-roc-curve/#3-ro..

classification성능평가와 accuracy

분류(Classification)과 정확도(Accurancy)에 대해 알아보겠습니다. 자, 차근차근히 알아볼텐데, 이진 분류 문제에서 정확도 예측을 어떻게 하느냐? 를 물어봅니다. 예를 들면 "암"에 걸린 경우 암의 양성(positivie)데이터와 음성(negative)데이터를 가지고 있다고 생각해봅시다. 위의 경우 양성, 밑의 경우 음성인 그림을 볼 수 있는데, 현실 세계에서는 저렇게 아름답게 데이터가 분류되지 않습니다. 위의 그림처럼, 애매하게 Classification 이 걸쳐있어, False Positive 부분과 False Negative부분이 생깁니다. 이 때문에 100%의 정확도로 예측할 수 없습니다.(물론 현실 세계의 사람도 마찬가지입니다.) 자 얘네들을 표로 나타내보면 Positive N..

사이킷런 텐서플로우 파이토치 케라스

사이킷런(scikit-learn)과 텐서플로우(TensorFlow) 파이토치(PyTorch) 케라스(Kreas)대해서 알아보겠습니다. 비교적 텐서플로우에 대해서는 많이 들어보셨을 것 같습니다. 텐서플로우는 2015년에 오픈 소스로 공개된 구글의 러신러닝 시스템입니다. 복잡한 머신 러닝 작업을 텐서플로우를 사용하여 간단하게 구현할 수 있습니다. 사이킷런은 머신 러닝 라이브러리 중에 하나인데, 학습하고 사용하기 쉬운데, 딥러닝과 강화학습 라이브러리를 지원하지 않습니다. 파이토치란 facebook에서 만든 딥러닝 연구 플랫폼입니다. 코드를 조금 간결하게 쓸 수 있습니다. 케라스란 오픈소스 신경망 라이브러리이고, 텐서플로우, MXNet, Deeplearning4j 등을 백엔드로 사용하여 AI코딩을 할 수 있게 ..

개발/AI 정리 2020.01.22

머신러닝과 딥러닝에 대해서

알파고가 나온 이후로 머신러닝과 딥러닝에 대해서 많이 들어봤을 겁니다. 근데 이게 도대체 뭔가 정확하게? 인공지능이라는 것은 알겠는데 머신러닝은 뭐고 딥러닝은 뭐고, 신경망 어쩌고 하는 학습은 무엇인지 쉽게 한번 설명 가보겠습니다. 나도 아는척하기 위해서 머신러닝 딥러닝에 대해서 알아볼텐데 머신러닝과 딥러닝에 대해서 자세히 알아보겠습니다 일단 AI라고 하면 기계가 지능을 가진 것 처럼 사고하는 것을 통틀어서 말합니다. 그러면 기계가 지능을 가진 로봇처럼 하는 것이 AI라고 하면 딥러닝과 머신러닝을 무엇일까요? 기계가 지능을 가진 것 처럼 사고하기 위해서는 기계도 무엇인가를 배우는 과정이 필요합니다. 저희도 이렇게 생긴 귀여운 애가 고양이라는 것을 알기 위해서는 다양한 고양이를 많이 보고, 이렇게 생긴 애..

개발/AI 정리 2020.01.22

데이터 전처리

머신러닝에서 데이터를 학습시킬 때, 당연히 데이터를 컴퓨터가 학습할 수 있게 가공해야 합니다. 그 중에 원 핫 인코딩과, 피처 스케일링에 대해 알아보겠습니다. 원 핫 인코딩 (one-hot encoding) : 원 핫 인코딩에 대해서 알아보겠습니다. ["머신러닝", "딥러닝", "배우기"] 라는 애들의 데이터 집합이 있다고 생각해보겠습니다. 머신러닝 : 0 딥러닝 :1 배우기 : 2 라고 해서 숫자값을 해당되는 문자에 부여해서 컴퓨터가 읽을 수 있는 값으로 변환시킵니다. 얘를 벡터 형태로 바꾸면 [[0,0,1] [0,1,0] [1,0,0]] 와 같이 벡터 형태로도 변경해서 사용할 수 있습니다. 다만 원 핫 인코딩의 경우 단어의 개수가 늘어나면 벡터의 크기가 계속 커진다는 단점이 있습니다. 또한, 단어들간..