본문 바로가기
Data science

머신러닝이 뭐지? 3분 안에 정리하는 기초 개념

by 리밋T 2022. 4. 25.
반응형

 

 머신러닝 개념

알파고 이후로 이슈가 된 머신러닝은, 사실 몇십 년 전부터 존재해온 개념이지만 최근 하드웨어의 발전 및 여러 요인으로 인한 빅데이터 수집이 가능해지고, 여러 알고리즘들이 발전하면서 더욱 주목받게 된 개념이다.

머신러닝에 대한 개념을 정리한 대표적 인물로는 Arthru Samuel과 Tom Mitchell이 있다.

아서 사무엘은 1959년, 프로그램이 작성되지 않더라도 컴퓨터가 스스로 학습하는 것을 머신러닝이라 정의했으며,

톰 미첼은 1988년, 컴퓨터가 경험(E, experience)으로부터 학습하여 작업(T, task)을 하되 이 성능(P, performance)에 대한 측정이 가능한 것을 머신러닝이라 정의했다.

 

 머신러닝 프로그래밍 차이

먼저 프로그래밍은 input data를 갖고 있고, 원하는 output을 위해 코드를 짜는 것이다.

반면 머신러닝은 컴퓨터가 프로그래밍 자체를 하며, 규칙과 패턴을 찾게 만드는 것이다.

이는 단순한 자동화와는 또다른 개념인데, 예를 들어 매일 같은 시간에 특정 사이트에서 글을 수집하는 것과 같이 단순히 똑같은 작업을 하는 것은 머신러닝이 아닌 자동화이다.

 

 지도학습 비지도학습 차이

1. 지도학습

앞에서 input 데이터에 대한 이야기를 했는데, 지도학습은 이러한 input 데이터에서 올바른 정답(레이블)이 주어진 것을 학습하는 것이다. 대표적으로 주가 예측과 같은 회귀, 그리고 미리 정의된 class로 할당시키는 분류가 있다.

분류는 Yes or No로 나누는 이진 분류와, 고양이/사자/개 중에서 개를 분류해내는 것과 같은 다중 분류가 있다.

KNN, 선형 회귀, SVM, Decision Tree 등이 지도학습에 포함된다.

2. 비지도학습

input 데이터에 대해서 올바른 정답이 없는 것을 학습할 때 이를 비지도학습이라고 한다.

특정 콘텐츠 안에서 비슷한 것들끼리 모이게끔 만드는 군집, 대표적으로 k-means, 계층 군집, 그 외 시각화, 차원 축소에 쓰이는 PCA 등이 비지도학습에 포함된다.

3. 준지도학습

페이스북에서 사진을 얼굴로 알아보고 태그 하는 것과 같이, 지도학습과 비지도학습이 혼합된 형태를 준지도학습이라 한다.

4. 강화학습

강화학습은 앞 세 가지와 다르긴 하지만, 알파고에서 쓰인 방법으로 가장 유명한 방법 중 하나라 살짝 언급하자면..

에이전트가 환경을 선택하면서 특정 행동을 하고, 올바른 행동을 할 때마다 보상을 준다. 그리고 그 보상이 극대화되도록 에이전트를 움직이게 하는 것인데, 미리 예측하지 않고 일단 해보고 판단한다는 점이 독특하다. 스키너의 쥐(쥐가 상자 안을 돌아다니다 우연히 지렛대를 밟으면 먹이를 주는 보상 실험)를 강화 학습을 설명할 때 많이 인용한다. 스타크래프트, 슈퍼마리오와 같은 게임에도 적용된 개념이다.

 

 과대적합 과소적합 차이

인공지능은 'Training', 즉 학습 과정을 거쳐야 한다.

그래서 실제로는 학습 데이터, training 데이터를 미리 떼어두고 인공지능을 학습시키는데, 실제 딥러닝에서는 이 training 데이터에는 정확하게 적용이 잘 되는데 새롭게 다른 데이터를 넣으면 정확도가 떨어지는 경우가 흔히 발생한다. 이를 과대적합이라고 한다.

과대적합을 방지하기 위해서는 훈련 데이터를 더 많이 모으거나, 정규화를 하거나, 훈련 데이터의 작업을 줄이는 등의 시도를 해볼 수 있다.

 

반대로 과소적합은 너무 단순해서 데이터에 내재된 구조를 학습하지 못할 때 발생한다. 이를 해결하려면 파라미터가 많은 복잡한 모델을 선택하거나, 모델의 제약을 줄이거나, 조기종료 시점까지 충분히 학습을 시키는 등의 과정이 필요하다.

이렇게 training 데이터가 아닌 실제 input 데이터를 넣었을 때에도 똑같은 성능으로 결과가 출력되도록 하는 과정을 일반화라고 한다. 

 

 

 자주 쓰는 머신러닝 라이브러리

 

파이썬 라이브러리를 5가지만 소개하자면, 아래와 같다.

1. Numpy : 행렬 다룰 때 잘 씀.

import numpy as np
data=[1,2,3,4,5]
arr= np.array(data) # 행렬 형태로 바꿔주기
arr.shape #데이터 몇갠지 확인
arr.dtype #데이터 타입 확인
np.zeros((9,2)) #0만 가진 행렬 만들 수 있음
np.arange(20) #0부터 1씩 증가하는 행렬 만들 수 있음


2. Pandas:데이터 다루고 분석할 때 쓰는 라이브러리

import pandas as pd
pd.Series([1,2,3,4,5]) #시리즈 = 인덱스가 있는 일정한 배열. 
students_name=["Curry","Durant","Duncan","Green"]
math=[99,35,23,85]
result=pd.Dataframe({
"Name":students_name,
"Math":math
})
result
#데이터프레임 : 행과 열로 구성된 사각형으로 이해하면 편함.head,tail,result


3. Matplotlib : 매트플롯라이브러리, 시각화.

import matplotlib.pyplot as plt
plt.bar(students_name,math)


4.Scikit-learn 싸이킷런

지도학습 비지도학습 모델 만들 때 쓰는 것. 이러한 알고리즘을 사용하게 해주는게 sklearn.



5. NLTK

자연어처리에서 자주 사용됨. 토큰화(문법적으로 더이상 나눌 수 없을 때까지 나누는 것). 챗봇, 번역 등에 사용.

반응형

댓글