이제 다음에 다룰 데이터(Iris 데이터와 Titanic 데이터)부터는 실제로 우리가 알고리즘을 사용하여 데이터에 대한 가설을 검증하는 등의 과정을 거칠 것이다.
그전에 머신러닝에 대해 간단히 개념을 짚고 넘어가야겠다.
우선, 현재 데이터 처리가 원초인? 분야에서 많이 거론되는 분야에 대해 적어보겠다.
- 인공지능(AI) : 사람의 지능을 모방하여, 사람이 하는 것과 같은 복잡한 일을 할 수 있도록 기계를 만드는 것
- 머신러닝 : 기본적으로 알고리즘을 이용해 데이터를 분석 및 학습하며, 학습한 내용을 기반으로 판단이나 예측하는 것
- 딥러닝 : 인공신경망에서 발전한 형태의 인공지능. 머신러닝 중 하나의 방법론
머신러닝은 데이터(Data)를 기반으로 (알고리즘을 이용해) 패턴(Model)을 학습하여 결과(Prediction)를 추론한다.
즉, 머신러닝에서는 '데이터' '패턴' '결과' 가 중요한 키워드이다.
머신러닝은 데이터를 기반으로 패턴을 학습한다고 했는데, 이 학습을 3가지로 분류할 수 있다.
- 지도학습 : 정답 데이터가 있는 학습. (회귀, 분류)
- 비지도 학습 : 정답 데이터가 없는 학습. (군집합, 차원축소)
- 강화 학습 :
위키백과의 정의를 이용해서 구체적으로 적겠다.
먼저 지도 학습 (Supervised Learning)은 훈련 데이터(Training Data)로부터 하나의 함수를 유추해내기 위한 기계 학습(Machine Learning)의 한 방법이다. 즉, 정답데이터를 포함한 훈련데이터가 주어지고, 그 훈련데이터를 이용해서 기계는 학습을 한다. 그 후에 새로운 데이터를 줬을 때 높은 정확도로 유추하는 것이 '지도학습'이다.
비지도 학습 (Unsupervised LEarning)은 데이터가 어떻게 구성되었는지를 알아내는 문제의 범주에 속한다. 즉, 정답 데이터를 포함하지 않은 데이터가 주어지면, 기계는 주어진 데이터의 주요 특성을 고려하거나 데이터 간의 관계 혹은 범주를 구분하는 등을 스스로 한다. 앞에서도 언급했지만 이 방법은 지도 학습 혹은 강화 학습과는 달리 입력값에 대한 목표치가 주어지지 않는다.
강화 학습은 어떤 환경 안에서 정의된 에이전트가 현재의 상태를 인식하여, 선택 가능한 행동들 중 보상을 최대화하는 행동 혹은 행동 순서를 선택하는 방법이다. 간단히 말해서 현재의 상태(State)에서 어떤 행동(Action)을 취하는 것이 최적(Reward)인지를 학습하는 것이다. 결국 기계가 스스로 상태와 상호작용하여 목표를 달성하는 방법을 배우는 문제라고 생각해야겠다.
'생활코딩' 에서 강화 학습을 '게임실력을 키워가는 것'과 비유한 것이 이해가 쏙쏙되어서 적어보겠다.
일단 강화학습이 지도학습과 다른 점은, 지도학습이 배움을 통해서 실력을 키우는 것이라면, 강화학습은 일단 해보면서 경험을 통해 실력을 키워가는 것이다. 강화학습에서는 '상과 벌' (제가 위에서 말한 Reward) 개념이 있다.
행동의 결과가 자신에게 유리한 것이었다면 상을 받고, 불리한 것이었다면 벌을 받는 것이라고 한다. 이 과정을 매우 많이 반복하게되면 더 많은 보상을 받을 수 있는 더 좋은 답을 찾아낼 수 있다는 강화학습의 기본 아이디어!
이제 위 사진에 대해 적어보겠다.
우리는 두개의 주체를 생각해야한다. 게임과 게이머. 게임은 게이머에게 보여줄 화면이 필요하고, 게이머는 우선 현재의 상태를 관찰해야한다.
1. 게임은 게이머에게 현재의 '상태'를 보여준다. ex) 캐릭터는 어디에 있고, 장애물은 어디에 있는지.
2. 동시에 현재의 점수도 알려준다. 게이머에게는 이 값이 높아지는 것이 상이고, 장애물에 부딪히는 것이 벌이다.
3. 관찰의 결과에 따라 게이머는 어떤 상태에서 어떻게 행동해야 더 많은 상을 받고, 더 적은 벌을 받을 수 있는지를 알게된다. 이를 통해 판단력이 강화된 것이다.
4. 판단에 따라서 행동을 한다.
5. 그 행동이 게임에 변화를 주게 된다.
이는 마치 현실에서의 게임의 실력자가 되는 과정이다.
우리는 배우지 않고도 결국 잘하게 되는 많은 일들이 이런 과정을 통해 이루어진다. 강화학습은 이러한 과정을 모방해서 기계를 학습시키는 것이라고 생각하면 된다.
위의 과정을 강화학습에서 사용하는 용어로 바꾸면 다음과 같다.
- 게임 ⇒ 환경(environment)
- 게이머 ⇒ 에이전트(agent)
- 게임화면 ⇒ 상태(state)
- 게이머의 조작 ⇒ 행동(action)
- 상과 벌 ⇒ 보상(reward)
- 게이머의 판단력 ⇒ 정책(policy)
강화학습에서는 더 많은 보상을 받을 수 있는 정책을 만드는 것이 핵심이다.
다시 본론으로 돌아와서, 이제 머신러닝의 장점에 대해 알아보겠다.
- 기계가 복잡한 패턴을 인지한다.
- 적절한 알고리즘, 다양한 양질의 데이터가 있다면 좋은 성능을 발휘한다. (이 문장에서 단점도 알 수 있다. 데이터의 질이 좋지 않으면 잘못된 결과를 산출한다는 점..)
- 도메인(전문 분야) 영역에 대한 지식이 상대적으로 부족해도 가능하다. (증권회사에서도 주식 예측에 AI를 쓰는 것)
머신러닝의 문제점
- 데이터의 의존성이 크다.
- 과적합의 오류에 빠질 수 있다. 일반화 오류라고 생각하면 된다. 즉, 과거의 학습 데이터를 학습할 때 과하게 학습되어 일반화를 내려버리면, 실제 새로운 데이터가 일정 수준 이상 복잡해지면 오류가 발생하는 문제이다.
- 풍부한 데이터가 기본적으로 요구된다.
결국 머신러닝에서는 좋은 성능 = 좋은 데이터 (quality, quantity)이다.
우리가 상황에 따라 필요한 머신러닝을 구현할 때는 어떤 알고리즘(모델)을 쓸 것인지 선택해야 한다. (보통 우리가 직접 만드는게 아니다.) 각 모델의 강한 기능 및 성능에 따라 선택하면 된다.
'Python' 카테고리의 다른 글
[colab] 8. colab으로 Iris 데이터 활용하기 (0) | 2021.01.24 |
---|---|
[colab] 7. colab으로 scikit-learn 모듈 사용하기(Linear SVC) (0) | 2021.01.23 |
[colab] 5. colab으로 matplotlib를 이용한 그래프 그리기 (0) | 2021.01.22 |
[colab] 4. colab으로 데이터 전처리 실습하기 (0) | 2021.01.22 |
[colab] 3. colab으로 pandas 모듈 사용하기(2) (0) | 2021.01.21 |